支付系統(tǒng)設(shè)計(jì)

date:2017-04-01

巨人的肩膀

In me the tiger sniffs the rose. —— 英國詩人西格夫里·薩松代表作《于我,過去,現(xiàn)在以及未來 》

從入門到精通:支付系統(tǒng)設(shè)計(jì)

ping++ - 從入門到精通:關(guān)于支付系統(tǒng)設(shè)計(jì)的 17 篇文章

趨勢(shì)

支付的本質(zhì),是價(jià)值的轉(zhuǎn)移

聚合支付:

  • 原因:支付賬戶和銀行賬戶垂直交叉
  • 服務(wù)(>=):支付通道服務(wù)、集合對(duì)賬服務(wù)、技術(shù)對(duì)接服務(wù)、差錯(cuò)處理服務(wù)、運(yùn)行維護(hù)服務(wù)以及其他增值服務(wù)等服務(wù)內(nèi)容

http://qiniu.daydaygo.top/pay-system-design/pay-account

支付服務(wù)其實(shí)需要一套完整的業(yè)務(wù)系統(tǒng),包括且不限于賬務(wù)系統(tǒng)、賬戶系統(tǒng)、路由系統(tǒng)、風(fēng)控/反欺詐系統(tǒng)、運(yùn)營系統(tǒng)等,要為商戶提供完整的“一站式”支付服務(wù)

企業(yè)級(jí)支付突圍:

  • 加強(qiáng)支付渠道能力,提供更完善的基礎(chǔ)支付服務(wù)
  • 拓展支付場(chǎng)景,提供場(chǎng)景下的支付解決方案:紅包、打賞、平臺(tái)分賬、增值服務(wù)
  • 提供安全穩(wěn)定的支付服務(wù)

支付市場(chǎng)未來格局:

  • 電子支付賬戶的多維化呈現(xiàn)不可逆轉(zhuǎn)之勢(shì)
  • 利用自身的技術(shù)與服務(wù)集成能力,越來越多的技術(shù)供應(yīng)商開始著眼于聚合支付領(lǐng)域
  • 聚合支付的系統(tǒng)安全技術(shù)已日益成熟,讓企業(yè)無論大小,都能獲得安全、穩(wěn)定、便捷的支付系統(tǒng)

支付系統(tǒng)的專業(yè)與商業(yè)

支付的商業(yè)化探索:

  • 從功能到場(chǎng)景的轉(zhuǎn)換:廣告、粉絲經(jīng)濟(jì)、社區(qū)電商、平臺(tái)類商城
  • 支付場(chǎng)景的構(gòu)建:賬戶體系、營銷功能、層級(jí)管理、賬務(wù)管理
  • 收費(fèi)服務(wù):好的服務(wù)一定是需要利潤(rùn)支撐的、低價(jià)值的數(shù)據(jù)增長(zhǎng)會(huì)對(duì)發(fā)展帶來致命的影響、付費(fèi)是對(duì)可從事商業(yè)模式的認(rèn)可

從功能到場(chǎng)景的轉(zhuǎn)變:

  • 支付方式:網(wǎng)關(guān)、快捷、支付賬戶、信用分期;支付賬戶 和 銀行賬戶
  • 支付服務(wù):身份認(rèn)證、銀行卡信息認(rèn)證、海關(guān)報(bào)關(guān)、物流信息查詢
  • 場(chǎng)景:C2B2B、C2B2C、B2B2C、B2B2B;功能 -》組織成場(chǎng)景 -》用戶黏性和付費(fèi)意愿 -》創(chuàng)造交易
  • 互聯(lián)網(wǎng)的消費(fèi)中,有很大比例的沖動(dòng)型消費(fèi),通過優(yōu)惠券可以有效的刺激用戶的消費(fèi)意愿
  • 賬戶系統(tǒng)(應(yīng)該具備):現(xiàn)金賬戶系統(tǒng),卡券賬戶系統(tǒng),支付系統(tǒng)和帳號(hào)系統(tǒng)

支付營銷:

  • 用戶對(duì)于貨幣電子紅包的接受度已經(jīng)達(dá)到了 88.3% 的高度
  • 沒人再敢拿互聯(lián)網(wǎng)的流量紅利來說事了

http://qiniu.daydaygo.top/pay-system-design/pay-operation1

http://qiniu.daydaygo.top/pay-system-design/pay-operation2.jpg

不同行業(yè)支付系統(tǒng)設(shè)計(jì)

映客APP:

  • 區(qū)別化對(duì)待的優(yōu)惠機(jī)制:從優(yōu)惠策略層面引導(dǎo)用戶關(guān)注微信服務(wù)號(hào),鼓勵(lì)用戶進(jìn)行大額充值(還有首充)
  • 微信紅包提現(xiàn)(當(dāng)時(shí)沒有手續(xù)費(fèi))
  • 設(shè)置不同賬戶出口:消費(fèi)、提現(xiàn)
  • 用兌換比例控制運(yùn)營成本
  • 緊扣用戶消費(fèi)線的經(jīng)驗(yàn)值系統(tǒng)

http://qiniu.daydaygo.top/pay-system-design/inke

教育行業(yè):

  • 互聯(lián)已經(jīng)形成,支付還會(huì)遠(yuǎn)嗎?
  • 體驗(yàn)機(jī)制:小額定金 / 免費(fèi)試課;教育是一個(gè)雙向選擇、互相信任的過程;支付行為本身就能讓平臺(tái)的存在感驟增
  • 饑餓營銷:限量預(yù)售;讓預(yù)售行為本身就帶有自傳播性
  • 優(yōu)惠券機(jī)制:打造口口相傳的熟人效應(yīng);最重要的獲客渠道之一
  • 重線上,規(guī)范線下流程:線上專家、拜師,線下資質(zhì)認(rèn)證、退款保障等

社區(qū) + 消費(fèi)(母嬰):

  • 想法很美好,現(xiàn)實(shí)很骨感:市場(chǎng)大,但是做好難
  • 先做社區(qū),在做電商:打賞 -》 余額 -》 不能提現(xiàn),只能消費(fèi)
  • 抱團(tuán):非標(biāo)產(chǎn)品的促銷與拼團(tuán)機(jī)制結(jié)合起來
  • 用會(huì)員制建立核心用戶群:‘專家組’

旅游 app:

  • 利用出行場(chǎng)景的周期性,增強(qiáng)消費(fèi)轉(zhuǎn)化:APP 的平均打開間隔和日啟動(dòng)次數(shù)可以看出其使用場(chǎng)景和用戶特性
  • 支持第三方支付賬號(hào)登錄
  • 綁定渠道,爭(zhēng)取渠道用戶流量:‘銀聯(lián)專屬’
  • 利用互聯(lián)網(wǎng)優(yōu)勢(shì),打造消費(fèi)體驗(yàn)生態(tài)鏈:優(yōu)惠卡券前置,引導(dǎo)用戶消費(fèi)行為;多個(gè)賬戶體系,滿足多樣人群;加強(qiáng)支付環(huán)節(jié)體驗(yàn)設(shè)計(jì)

http://qiniu.daydaygo.top/pay-system-design/consume-flow

「支付力量」系列

嘛,帶些軟廣,就不列舉了

鳳凰牌老熊 - 支付系統(tǒng)設(shè)計(jì)系列

支付系統(tǒng)架構(gòu)

支付的典型架構(gòu)

  • 某團(tuán)
image
  • 某Q旅游公司
image
  • 某東金融
image
  • 業(yè)界最強(qiáng)的某金服金融
image

龍果開源支付系統(tǒng)

http://git.oschina.net/roncoocom/roncoo-pay

  • 架構(gòu)
image
  • 支付時(shí)序
image

sfy 支付系統(tǒng)升級(jí)

支付系統(tǒng)現(xiàn)狀

sfy 支付相關(guān)整理:使用百度腦圖進(jìn)行整理

相關(guān)問題:

  • 沒有接查詢接口進(jìn)行支付結(jié)果確認(rèn)
  • 支付后執(zhí)行的邏輯沒有提取出來,在同步和異步函數(shù)中都寫了一遍(DRY, Don't repeat yourself )
  • 支付后執(zhí)行的邏輯全到寫到支付 sdk 中,需要 sdk 自己判斷支付場(chǎng)景(應(yīng)該抽象出商戶模式)
  • 項(xiàng)目依賴 WEB_LIB 常量來加載第三方 sdk(短信、支付、二維碼), 導(dǎo)致依賴沒有統(tǒng)一管理. php 項(xiàng)目應(yīng)當(dāng)用好 composer 來管理依賴

數(shù)據(jù)庫事務(wù) 是必須要加的,除了防止支付渠道的異步、同步同時(shí)到達(dá),也要防止業(yè)務(wù)系統(tǒng)內(nèi)部的并行操作

支付場(chǎng)景:

  • 分期訂單首付
  • 還款
  • 優(yōu)惠券

支付方式交互字典:統(tǒng)一使用賬務(wù)系統(tǒng)中記錄的支付方式, 避免子系統(tǒng)見不統(tǒng)一

設(shè)計(jì)方案:獨(dú)立出支付系統(tǒng)

支付系統(tǒng)當(dāng)做支付渠道,包含一套 sdk 可以供業(yè)務(wù)系統(tǒng)使用,sdk 包括 4 部分內(nèi)容:下單、同步、異步、查詢

需要考慮 2 點(diǎn):

  • 支付網(wǎng)關(guān)前置、后置:采取后置,這樣業(yè)務(wù)系統(tǒng)只用給支付系統(tǒng)發(fā)起請(qǐng)求,用戶在支付系統(tǒng)提供的頁面選擇支付方式
  • 支付后的邏輯由業(yè)務(wù)系統(tǒng)還是支付系統(tǒng)處理:支付成功后支付系統(tǒng)通知業(yè)務(wù)系統(tǒng),由業(yè)務(wù)系統(tǒng)完成支付之后的邏輯

最終細(xì)化設(shè)計(jì)如下:

  • 業(yè)務(wù)系統(tǒng)只用展示 ‘去支付’ 按鈕,并傳遞相應(yīng)支付參數(shù)和用戶可以使用的支付方式給支付系統(tǒng),支付系統(tǒng)驗(yàn)證后生成 PayOrder,支付系統(tǒng)按照業(yè)務(wù)系統(tǒng)傳遞的 order_no 進(jìn)行去重

  • 支付系統(tǒng)展示收銀臺(tái)(需要 設(shè)計(jì) + 前端 支持)

  • 根據(jù)用戶選擇的支付方式,調(diào)起支付渠道

  • 接收支付渠道的同步和異步通知,解析出支付結(jié)果,更新 PayOrder 后轉(zhuǎn)發(fā)給業(yè)務(wù)系統(tǒng)

  • 對(duì)接支付渠道查詢接口,異步通知業(yè)務(wù)系統(tǒng)結(jié)果

  • 安全:和業(yè)務(wù)交互的接口都進(jìn)行驗(yàn)簽

  • 支付流水記錄:PayOrder 跟蹤一筆支付單全部生命周期

image
image

盜用一下別人的圖,抽空再練練 Axure

支付系統(tǒng)前期工作:代碼拆分,進(jìn)行分層

分層設(shè)計(jì)

pay-gateway(支付網(wǎng)關(guān)) / pay-task(后臺(tái)任務(wù)) -》pay-lib(支付公共庫) -》php-lib(基礎(chǔ)公共庫)

確定 代碼分層依賴關(guān)系 后,實(shí)現(xiàn)起來的難點(diǎn)主要在于一個(gè)接一個(gè)業(yè)務(wù)項(xiàng)目的 拆分 代碼,并清理支付方式中的業(yè)務(wù)代碼

支付系統(tǒng)網(wǎng)關(guān) - pay-gateway

業(yè)務(wù)系統(tǒng)和支付系統(tǒng)API交互約定規(guī)則:

  • 返回:json 格式,6 位 code + message,成功返回 000000,失敗返回 28xxxx(支付系統(tǒng)錯(cuò)誤碼段)
  • 驗(yàn)參:必填參數(shù)、參數(shù)長(zhǎng)度(大部分參數(shù)會(huì)落地到存儲(chǔ)層),返回第一條匹配失敗的信息
  • 驗(yàn)簽:添加 sign 字段進(jìn)行簽名、驗(yàn)簽

收單接口

  • 業(yè)務(wù)系統(tǒng)向支付系統(tǒng)收單接口發(fā)起請(qǐng)求
  • 支付系統(tǒng)收單接口 驗(yàn)參、驗(yàn)簽、去重(商戶號(hào) + 訂單號(hào)),驗(yàn)證通過后生成 支付流水記錄(PayOrder)
  • 展示支付方式給用戶,用戶選擇后,通過支付渠道 sdk 調(diào)起支付
  • 注意:只有一種支付方式時(shí),直接通過支付渠道 sdk 調(diào)起支付,不顯示支付方式選擇頁面

同步接口

  • 支付系統(tǒng)接收到支付渠道的同步通知,通過支付渠道 sdk 獲取支付結(jié)果,更新支付流水記錄
  • 支付系統(tǒng)跳轉(zhuǎn)到業(yè)務(wù)系統(tǒng)下單時(shí)提供的 return_url,并帶上支付信息

支付系統(tǒng) - 異步接口

  • 支付系統(tǒng)接收到支付渠道的異步通知,通過支付 sdk 獲取支付結(jié)果,更新支付流水記錄
  • 支付系統(tǒng)向業(yè)務(wù)系統(tǒng)發(fā)送異步通知

查詢接口

業(yè)務(wù)通過下單使用的單號(hào),調(diào)用支付系統(tǒng)支付查詢接口獲取支付結(jié)果
業(yè)務(wù)系統(tǒng)和支付系統(tǒng)屬于內(nèi)網(wǎng)交互,可靠性更高,可以考慮不做

支付系統(tǒng)后臺(tái)任務(wù) - pay-task

查詢支付渠道支付結(jié)果

  • 通過支付 sdk 查詢接口獲取支付結(jié)果,更新支付流水記錄
  • 獲取結(jié)果后向支付系統(tǒng)發(fā)送異步通知(需要和之前的異步通知進(jìn)行去重處理)

數(shù)據(jù)層設(shè)計(jì)

增加 PayOrder 用來跟蹤支付單

日志

增加專用支付日志, 打在關(guān)鍵節(jié)點(diǎn)上:

  • 支付系統(tǒng):收到業(yè)務(wù)系統(tǒng)下單請(qǐng)求、給支付渠道發(fā)送下單請(qǐng)求、支付渠道同步請(qǐng)求、支付渠道異步請(qǐng)求、調(diào)用支付渠道查詢接口
  • 業(yè)務(wù)系統(tǒng):發(fā)起支付、同步通知、異步通知

php 編程相關(guān)

編碼規(guī)范

PHP 標(biāo)準(zhǔn)規(guī)范

部分通過配置 phpstorm IDE code style 實(shí)現(xiàn)(快捷鍵 ctrl-alt-l

遵循的編碼規(guī)范:

  • 類的命名 必須 遵循 StudlyCaps 大寫開頭的駝峰命名規(guī)范;

  • 類中的常量所有字母都 必須 大寫,單詞間用下劃線分隔;

  • 方法名稱 必須 符合 camelCase 式的小寫開頭駝峰命名規(guī)范。

  • 代碼 必須 使用4個(gè)空格符而不是「Tab 鍵」進(jìn)行縮進(jìn)。

  • 每個(gè) namespace 命名空間聲明語句和 use 聲明語句塊后面,必須 插入一個(gè)空白行。

  • 類的開始花括號(hào)({) 必須 寫在函數(shù)聲明后自成一行,結(jié)束花括號(hào)(})也 必須 寫在函數(shù)主體后自成一行。

  • 方法的開始花括號(hào)({) 必須 寫在函數(shù)聲明后自成一行,結(jié)束花括號(hào)(})也 必須 寫在函數(shù)主體后自成一行。

  • 類的屬性和方法 必須 添加訪問修飾符(private、protected 以及 public),abstract 以及 final 必須 聲明在訪問修飾符之前,而 static 必須 聲明在訪問修飾符之后。

  • 控制結(jié)構(gòu)的關(guān)鍵字后 必須 要有一個(gè)空格符,而調(diào)用方法或函數(shù)時(shí)則 一定不可 有。

  • 控制結(jié)構(gòu)的開始花括號(hào)({) 必須 寫在聲明的同一行,而結(jié)束花括號(hào)(}) 必須 寫在主體后自成一行。

違反的編碼規(guī)范:

  • PHP代碼中 應(yīng)該 只定義類、函數(shù)、常量等聲明,或其他會(huì)產(chǎn)生 副作用 的操作(如:生成文件輸出以及修改 .ini 配置文件等),二者只能選其一;(支付 sdk 里面 12、13 年的代碼, 實(shí)在不好改成遵守編碼規(guī)范的)

自動(dòng)加載

http://docs.phpcomposer.com/

  • 項(xiàng)目中 composer 版本為 1.0-dev,我本地環(huán)境為 1.2,導(dǎo)致生成的文件不同;
  • 修改 composer.json 文件中 autoload 后,執(zhí)行 php composer.phar.php aumpautoload 來生成類的映射文件

第三方依賴

https://packagist.org

  • QrCode: 生成微信二維碼時(shí)使用

開發(fā)環(huán)境 docker + docker-compose

使用 RAML 寫 api

http://raml.org/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容