支付系統設計小結
支付作為平台最核心的基礎能力,其重要性不言而喻。
對於平台而言,支付功能最簡單粗暴的實現方式是業務系統直接接入支付渠道,支付和業務耦合在一起。流程見下圖。
但隨著業務的多樣性和複雜度的變化以及業務量的提升,需要有獨立的系統來維護支付規則,管理支付渠道,記錄支付信息。因此引入支付系統,業務流程升級為:
在一個消費者付款流程中,支付系統需完成以下任務:
1、接受業務系統的業務訂單;
2、根據業務訂單類型及金額判斷可支持的支付產品並返回給前端頁面,讓用戶選擇;
3、根據用戶選擇的支付產品,選出具體執行扣款的支付渠道;
4、根據選出的支付渠道要求組裝指令,調用渠道執行扣款任務;
5、獲取支付渠道通知的扣款結果或主動查詢通道扣款結果;
6、通知業務系統支付結果;
以上6個任務在具體執行中可以分化出以下幾個單體:
1、支付應用
平台交易每天有無數訂單,支付系統需要將訂單進行分類。不同類型的訂單對支付渠道有著不同的需求,可以將訂單類型對支付渠道的需求規則維護在支付應用層。
支付應用提供給上層業務統一模塊化的調用方式,業務層而不再需要關注支付的實現。一般來說,支付應用可分為:
即時消費(消費類訂單),充值(錢包類業務),轉帳(錢包類業務),提現(錢包類業務),退款(異常情況處理)等。2、支付核心(支付產品)
支付核心將下游支付渠道自身帶有的原子化功能(鑒權,簽約,扣款等)封裝後提供給上游統一調用。上游通道僅需明確具體支付產品和金額後,由支付核心根據路由選出的渠道的介面要求組裝指令,調用渠道支付介面。
支付核心應封裝渠道包括驗證要素,支付額度,手續費,結算賬戶,查詢方式等屬性。也要能新渠道接入的可擴展性,屏蔽各渠道的差異,將渠道差異統一維護在單個系統中。
3、支付路由
用戶選擇支付產品後,可以有多個支付渠道支持對應支付產品。系統需要根據特定邏輯選出具體的支付通道去執行扣款,而這個特定邏輯就是支付路由。
這裡至少要包括以下幾個邏輯:
1) 指定走某條通道、指定不走某條通道;
2) 選出限額滿足訂單金額的支付通道;
3) 選出手續費較低的通道;
4) 現有的支付要素是否滿足通道要求,是否仍需要用戶參與。
另外,支付應用中支持的具體支付產品,也可在路由中實現。
4、渠道管理
支付路由,和支付核心都需要根據通道特性進行判斷,可以獨立維護一個系統來記錄通道的特性。當通道屬性發生變化時,比如需要參數發生變化,費率發生變化等,通道維護時,可以在渠道管理系統中配置相關信息即可,而不需要重新發版。
基於上面的討論,可以抽象出下面兩張圖。
支付模型:
支付系統:
以上僅是收款環節的設計概述,其中仍有很多單體可以展開來講,快捷產品設計,支付路由,賬戶系統等等,有機會再提。
以上僅是個人在實踐中的總結,如有不對的地方,還請指正。
推薦閱讀: