[分享摘要]支付中心設(shè)計(jì)與實(shí)踐

收集金幣的馬里奧

演示 DEMO:掃碼支付

支付“不難做”:App 支付,一名 iOS 工程師唰唰唰搞定;微信 JS 支付,一名前端工程師唰唰唰搞定。而如果想做一個(gè)通用可擴(kuò)展的支付系統(tǒng),90% 的工作在后端,做起來(lái)也并不是很容易。

背景

  • 早期業(yè)務(wù)A已引入支付寶支付
    • 發(fā)起支付邏輯在客戶(hù)端,支付單號(hào)業(yè)務(wù)關(guān)聯(lián)性強(qiáng)不通用(客戶(hù)端寫(xiě)死邏輯影響后端重構(gòu)一坑此處不表)
    • 支付網(wǎng)關(guān)回調(diào)接口在 API 項(xiàng)目中,API 項(xiàng)目異常會(huì)引起支付問(wèn)題(客戶(hù)端一臉萌比)
    • 測(cè)試支付?先把業(yè)務(wù)邏輯走一遍
  • 業(yè)務(wù) B 有單獨(dú)的網(wǎng)頁(yè)端掃碼支付,跟客戶(hù)端沒(méi)什么關(guān)系……
  • 后來(lái)業(yè)務(wù)C需要引入支付寶
    • 原有邏輯無(wú)法重用,依舊是寫(xiě)一套新的,對(duì)應(yīng)業(yè)務(wù)邏輯依舊耦合
    • 對(duì)客戶(hù)端來(lái)說(shuō),API 也是兩套
    • 后端支付網(wǎng)關(guān)回調(diào)也是兩套
  • 產(chǎn)品說(shuō)要加微信支付……??
  • 后來(lái)說(shuō)要有更多業(yè)務(wù)、商品需要支付……??????

一次支付背后發(fā)生的故事

支付寶支付簡(jiǎn)化模型:

最簡(jiǎn)支付模型.png
  • 最簡(jiǎn),如果是微信支付需要預(yù)下單
  • 最簡(jiǎn)單支付除了必備價(jià)格,其它并不重要
  • 支付發(fā)起在客戶(hù)端,看似沒(méi)問(wèn)題,但是沒(méi)擴(kuò)展性
  • 客戶(hù)端發(fā)起最大的問(wèn)題是成單邏輯在客戶(hù)端,不可控:難以追蹤統(tǒng)計(jì),不可變更

Review 需求:

  • 工程師角度:擴(kuò)展?(我只是不想寫(xiě)重復(fù)代碼,改來(lái)改去)
    • 新增業(yè)務(wù)支付、商品支付,支付中心、客戶(hù)端及前端不需要?jiǎng)哟a
    • 新增支付渠道,業(yè)務(wù)不需要?jiǎng)哟a,支付相關(guān)不需要?jiǎng)永洗a
    • 支付中心自洽,模塊職能清晰,有日志,可追溯分析
    • 易測(cè)試
  • 產(chǎn)品運(yùn)營(yíng)角度:
    • 上新商品支付,快
    • 支持優(yōu)惠券
    • 靈活,多端支付,自定義價(jià)格支付,發(fā)個(gè)消息支付……
    • 數(shù)據(jù)完善
    • 有沒(méi)有更多可能?
  • 公司角度:安全
  • 注:以上皆為完成后臆測(cè) ;)

一次“復(fù)雜的”支付背后發(fā)生的故事

支付中心業(yè)務(wù)時(shí)序圖.png

劃重點(diǎn)

  • 定義支付中心(PayCenterServer & 客戶(hù)端 & 前端):
    • 封裝支付邏輯,與終端&支付網(wǎng)關(guān)直接對(duì)接,對(duì)業(yè)務(wù)方透明
    • 對(duì)外方便對(duì)接多個(gè)業(yè)務(wù)方
    • 對(duì)內(nèi)方便擴(kuò)展終端,擴(kuò)展支付網(wǎng)關(guān)
  • 業(yè)務(wù)方拿到 PayOrderId,其它的支付過(guò)程都交給終端,坐等 PayCenterServer 的 bizNotifyUrl 通知(有模仿的重復(fù)通知邏輯)
  • 支付中心需要理解的外部概念: bizOrderId, bizNotifyUrl, (couponId, goodsId, unionOrderId)
  • 內(nèi)部數(shù)據(jù)只有兩類(lèi):PayOrder, GatewayOrder
  • 易測(cè)試

聊聊一些坑

  • 微信開(kāi)放平臺(tái)(open)和公眾號(hào)平臺(tái)(mp)是不同的 appId,支付字段也略有區(qū)別
  • 多鐘支付類(lèi)型的字段解析歸納,是局部實(shí)現(xiàn)的難點(diǎn):
    • 每種支付渠道都不同,同種支付渠道掃碼、H5、App 也不完全相同
    • 簽名階段、終端展示、驗(yàn)簽階段
    • DEMO:各終端需要的不同字段
      • 微信為例:JS,掃碼,APP
  • 簽名、驗(yàn)簽邏輯理解
    • 銀聯(lián)證書(shū)的坑
  • TRADE_FINISHED,遲來(lái)三個(gè)月的 bug

后續(xù)

  • 優(yōu)惠券
  • 商品中心
  • 訂單中心

總結(jié)

  • 區(qū)分變化很重要
    • 前期很容易因?yàn)橹Ц读鞒淌菑?fù)雜的,簽名是復(fù)雜的,錯(cuò)誤認(rèn)為這是變化部分。支付流程梳理清楚后這部分反而是穩(wěn)定的
    • 支付流程、簽名是固定的,不變的,而且是內(nèi)部的
    • 與業(yè)務(wù)端,終端以及支付網(wǎng)關(guān)后臺(tái)的交互是設(shè)計(jì)重點(diǎn)
  • 測(cè)試優(yōu)先(線上也要易測(cè)試)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容