支付路由設計
本文首先介紹支付核心模塊支付路由的設計。
一、支付流程
我們以收銀臺為例,詳細說明支付的正確打開方式。 當用戶提交訂單后,就會被引導到收銀臺上。 以某東為例,手機上是這樣的:
PC上是這樣的:
從這里我們可以看出,用戶進入收銀臺之后,首先需要選擇默認的支付方式。
支付方式指消費時付款的方式,比如現(xiàn)金支付、貨到付款、信用卡支付、借記卡支付、掃碼支付等。 |
那么有哪些支付方式適合在收銀臺上展示出來? 也就是支付應用和支付方式的關(guān)系。在這里,收銀臺是一類支付應用。
支付應用指提供給最終用戶在特定場景下使用的產(chǎn)品,比如掃碼收銀、二維碼支付、打賞、眾籌、POS支付、生活繳費、信用卡返款、手機充值等。 這些應用是建立在支付產(chǎn)品的基礎之上,直接面向最終的用戶提供服務。 |
每個支付應用可以用的支付方式是不一樣的。比如說,掃碼收銀,可能僅支持微信和支付寶。POS支付,僅支持銀行卡。而信用卡返款,只能從其他的借記卡上去扣款。 支付應用的設計和公司的業(yè)務有關(guān),并需要考慮在公司業(yè)務場景下的用戶支付體驗。目前應用最全的數(shù)支付寶,可以參觀下支付寶的應用(截止至2017年2月15日):
在收銀臺這個應用中,在呈現(xiàn)支付方式時,哪些支付方式可以提供給當前場景下的用戶來使用,哪個方式應該排在前面,這在支付系統(tǒng)中,是通過引導路由來實現(xiàn)的。
引導路由是根據(jù)支付應用、收款商戶、訂單額度等信息來決定提供給用戶的支付方式列表。 |
當用戶選擇一種支付方式并提交支付后,支付系統(tǒng)開始執(zhí)行扣款。比如用戶選擇通過招行來支付,系統(tǒng)就會請求招行來扣款嗎? 這不一定,因為系統(tǒng)有可能并沒有接入到招行接口。除了招行自己的接口外,第三方支付公司、銀聯(lián)等,也可以從招行卡上扣款。那應該使用哪個通道合適? 這是通過支付路由來決定的。
支付路由指根據(jù)用戶選擇的支付方式,結(jié)合費率、QOS等因素,選擇合適的銀行或者其他公司提供的支付接口來完成資金轉(zhuǎn)移操作。 |
通過支付路由,我們可以定位到一個落地來執(zhí)行的支付接口。
支付接口,指由銀行提供的用來執(zhí)行支付的接口。這里要注意,對于同一家銀行,除了總行可以提供一個接口,各地的分行也可以提供這個接口。 但一般來說,同一家銀行的接口規(guī)范是一樣的,不同的是提供接口的服務器、費率、性能等。 |
比如,支付公司可以接入工行總行、工行上海分行、工行北京分行的接口。為什么要接入分行呢? 一般來說,不少分行會提供更優(yōu)惠的接入費率,以及經(jīng)常會舉辦一些活動來吸引用戶接入。
支付通道,這是對支付接口的一個封裝,包含合作銀行以及通道成本、商戶費率、QOS等信息; |
銀行和第三方支付等渠道提供給電商公司使用的接口,往往都會封裝成支付產(chǎn)品。
支付產(chǎn)品指將支付通道打包成滿足某特定支付場景需求的商品,比如信用卡快捷、信用卡Moto等。 |
在這里我們把涉及到的幾個概念都做了定義。 當然,這些定義僅僅是從約定俗成的角度來描述,不具有學術(shù)意義。 不同的公司,對這些名稱叫法還不完全一致。 比如支付通道,有些叫渠道,有些公司叫網(wǎng)關(guān)。這里統(tǒng)一一下稱呼,避免混淆。 總的來說,支付系統(tǒng)是把支付通道提供的“支付產(chǎn)品” 使用支付路由來封裝成業(yè)務需要的“支付產(chǎn)品”。這就是支付的核心流程。支付路由在其中起著關(guān)鍵作用。
二、設計目標
支付路由在支付系統(tǒng)中的核心作用,除了本職工作路由外,還承擔如下職責:
- 省錢,省錢,省錢,這是支付路由選擇支付通道的最主要的規(guī)則。 哪個通道省錢,基本會優(yōu)先考慮這個通道。
- 提升支付產(chǎn)品的QOS。這體現(xiàn)在系統(tǒng)的可靠性、穩(wěn)定性、性能和可用性上。通過屏蔽掉無法連接、不穩(wěn)定、性能低的通道來提升這些指標。
- 支持營銷。通過優(yōu)先選擇有優(yōu)惠活動的通道,可以幫助業(yè)務提升付費客戶量。
- 降低運營成本。一個設計良好的支付路由,可以大大降低運營投入。
三、軟件架構(gòu)
上述流程,在實現(xiàn)上,參考的架構(gòu)設計如下:
支付路由并不會直接對接前端的支付產(chǎn)品或者后端的支付渠道,它是支付網(wǎng)關(guān)的一部分。如果是基于微服務的架構(gòu),支付路由作為一個獨立的服務,被支付網(wǎng)關(guān)所調(diào)用。
四、計算因子
路由規(guī)則是支付路由的核心。在規(guī)則設置上,需要和公司的業(yè)務、支付服務的scope來綜合考慮。 這里講述的是通用的規(guī)則設計,供具體實現(xiàn)時參考。
產(chǎn)品類型 當然,路由時***需要考慮渠道可以支持的支付產(chǎn)品。
1. 費率
費率是路由最重要的一個指標。一般銀行是按照額度來收費,部分是按照交易筆數(shù)來收費,復雜點的是階梯收費,比如10萬一個費率檔次,100萬一個費率檔次。
2. 優(yōu)惠活動
銀行、第三方支付為了延攬客戶,經(jīng)常也會提供一些補貼給對接的商戶,對于使用該渠道的交易進行補貼。而優(yōu)惠的策略也是多種多樣。
3. 交易限額
不同通道會限制每次交易的金額上限,以及針對每個賬戶每天的額度限制。超過這個額度,需要變換通道。
4. 卡類型
通道支持的信用卡或者借記卡。
5. 通道的QOS
掉單率、網(wǎng)絡延遲以及接口能支持的TPS,是路由的一個重要衡量因素。
6. 資金頭寸
電商公司在銀行或者第三方平臺的資金頭寸。如果資金頭寸不足,則不能使用這個通道來執(zhí)行。
7. 到賬時效
對于轉(zhuǎn)賬,資金什么時候到目標賬戶上,也是影響路由選擇的一個因素。
8. 商戶類型
不同類型的商戶可以選擇不同的通道。 比如高性能、費率高的通道,預留給高級商戶。
五、模塊設計
支付路由從架構(gòu)上來說,一般是作為支付網(wǎng)關(guān)的一部分。采用微服務架構(gòu)時,路由模塊作為一個獨立的服務來部署,為支付網(wǎng)關(guān)所調(diào)用。所涉及的模塊如上所示:
1. 支付通道管理
提供通道支持的產(chǎn)品類型、費率等信息。
2. 支付通道QOS監(jiān)控
收集通道使用過程中的錯誤信息,接口延遲,超時情況等信息,用于統(tǒng)計QOS。
3. 資金頭寸管理
用于監(jiān)控公司在各個支付通道上的頭寸,并提供頭寸的信息。
4. 優(yōu)惠活動
銀行、第三方支付為了延攬客戶,經(jīng)常也會提供一些補貼給對接的商戶,對于使用該渠道的交易進行補貼。而優(yōu)惠的策略也是多種多樣:
- 支付策略;針對使用該通道的所有支付進行補貼;僅針對***使用該通道的用戶進行補貼;僅針對綁卡的用戶進行補貼。
- 補貼時,按照支付金額來設置優(yōu)惠額度,或者按比例打折。
- 一般活動都會設置補貼總額度。該額度用完了就停止補貼。
當然,活動也都會設置開始和截止時間。
六、路由計算
1. 人工路由
大部分支付系統(tǒng)在接入渠道不多時,人工路由也是一個不錯的選擇。運營人員指定支付渠道和產(chǎn)品之間的映射關(guān)系。出問題時人工切換即可。這種路由的優(yōu)勢是性能高,路由結(jié)果可控,出問題時易于排查問題。當接入通道數(shù)量增加,營銷活動頻繁時,人工路由會是一個巨大的投入。
2. 基于規(guī)則的路由
這是相對比較簡單的自動路由設計。 按照業(yè)務要求設置各種路由規(guī)則,比如:
- if(支付方式==招商借記卡 && 額度<100) then 目標通道==銀聯(lián)token支付if(支付方式==招商借記卡 && 額度>100) then 目標通道==招商快捷支付
技術(shù)上,規(guī)則可以使用drools來描述。
3. 基于權(quán)重的路由
規(guī)則路由的難點各種規(guī)則的制定。在路由因子增多的情況下,規(guī)則的維護會是一個噩夢?;跈?quán)重的路由則可以緩解這個問題。這種計算方式,簡單說,就是對各個通道打分,分數(shù)***的就***。難點在于制定打分的標準以及計算公式。 比如可以從費率、優(yōu)惠額度、QOS和使用率角度來評分,給優(yōu)惠額度高一點的比重,這會導致高優(yōu)惠額度的通道被優(yōu)先***。注意每個維度上的計算公式也不是一成不變的,比如使用率和QOS都是動態(tài)打分計算。權(quán)重的調(diào)整是一個挑戰(zhàn),需要在運行過程中不斷的調(diào)試。必要時,可以使用旁路測試來比較兩種算法的優(yōu)劣。
路由是支付的核心模塊,穩(wěn)定性是***要素,其次是性能,***才是怎么省錢。路由系統(tǒng)的設計,需要和公司業(yè)務發(fā)展保持一致,并適度超前。簡單的if-else實現(xiàn)可以滿足大多數(shù)場景下的需求。避免在系統(tǒng)建設初期引入過于復雜的路由。
【本文為51CTO專欄作者“鳳凰牌老熊”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號“鳳凰牌老熊”聯(lián)系作者本人】