原文作者:鳳凰牌老熊
從產(chǎn)品分類(lèi)、模塊功能和業(yè)務(wù)流程,了解支付產(chǎn)品服務(wù)的設(shè)計(jì)
支付產(chǎn)品模塊是按照支付場(chǎng)景來(lái)為業(yè)務(wù)方提供支付服務(wù)。這個(gè)模塊一般位于支付網(wǎng)關(guān)之后,支付渠道之前。 它根據(jù)支付能力將不同的支付渠道封裝成統(tǒng)一的接口,通過(guò)支付網(wǎng)關(guān)來(lái)對(duì)外提供服務(wù)。所以,從微服務(wù)的角度,支付產(chǎn)品本身也是一個(gè)代理模式的微服務(wù),它透過(guò)支付網(wǎng)關(guān)響應(yīng)業(yè)務(wù)方請(qǐng)求, 進(jìn)行一些統(tǒng)一處理后,分發(fā)到不同的支付渠道去執(zhí)行,最后將執(zhí)行結(jié)果做處理后,通過(guò)支付網(wǎng)關(guān)再回傳給業(yè)務(wù)方。
支付產(chǎn)品在支付系統(tǒng)參考架構(gòu)圖中之位置,請(qǐng)看下圖所示:

產(chǎn)品分類(lèi)
在不同的公司由于接入渠道和應(yīng)用的差異,對(duì)支付產(chǎn)品分類(lèi)略有不同。綜合支付場(chǎng)景和流程,支付產(chǎn)品可以分為如下幾類(lèi):

支付產(chǎn)品是由支付系統(tǒng)對(duì)支付渠道進(jìn)行封裝而對(duì)業(yè)務(wù)方提供的支付能力。整體上來(lái)說(shuō),可以提供如下支付產(chǎn)品:
1. 快捷支付
用戶在完成綁卡之后,在支付的時(shí)候,不需要再輸入卡或者身份信息,僅需要輸入支付密碼就可以完成支付。對(duì)于小額度的支付,甚至可以開(kāi)通小額免密,直接完成支付。 這種支付方式不會(huì)打斷用戶的體驗(yàn),是目前主要的在線支付方式。一般快捷支付產(chǎn)品是通過(guò)封裝銀行或者第三方支付平臺(tái)提供的快捷支付接口或者代付接口來(lái)實(shí)現(xiàn)的。
2. 網(wǎng)銀支付
用戶在支付的時(shí)候,需要跳轉(zhuǎn)到銀行網(wǎng)銀頁(yè)面來(lái)完成支付。在網(wǎng)銀頁(yè)面,需要輸入用戶的卡號(hào)和身份信息。這種支付方式會(huì)中斷用戶當(dāng)前的體驗(yàn),一般僅用于PC Web上的支付。 網(wǎng)銀支付是封裝銀行提供的網(wǎng)銀支付來(lái)實(shí)現(xiàn)。
3. 協(xié)議支付
協(xié)議支付也稱(chēng)代收或者代扣,代收指渠道授權(quán)商戶可以從用戶的銀行賬戶中扣款,一般用于定期扣款,不用于日常消費(fèi)。比如水電煤氣、有線電視費(fèi)。協(xié)議支付是通過(guò)封裝銀行、第三方支付提供的代扣或者快捷接口來(lái)實(shí)現(xiàn)。
4. 平臺(tái)支付
使用微信、支付寶等第三方支付平臺(tái)來(lái)完成支付。使用時(shí),一般需要用戶預(yù)先安裝支付平臺(tái)系統(tǒng)(手機(jī)上),注冊(cè)并登錄到第三方支付平臺(tái),并且已經(jīng)在該平臺(tái)上完成綁卡等操作。 由于微信、支付寶已經(jīng)被大量使用,用戶也產(chǎn)生對(duì)這些平臺(tái)的信任,平臺(tái)支付往往是電商公司的主要支付方式。
5. 外卡支付
對(duì)于由海外支付的需求,還需要提供外卡支付支持。 國(guó)內(nèi)不少支付渠道都能支持外卡支付,如支付寶全球購(gòu)等。直接對(duì)接Paypal,也是目前用的最多的外卡支付渠道。 關(guān)于外卡支付,以后會(huì)有專(zhuān)文介紹。
6. 話費(fèi)支付
對(duì)于有包月小額類(lèi)型的支付,手機(jī)話費(fèi)也是一個(gè)不錯(cuò)的選擇。目前也有一些平臺(tái)可以支持話費(fèi)支付,比如虹軟、聯(lián)動(dòng)優(yōu)勢(shì)等。
7. 虛幣支付
不少公司會(huì)有自己的虛擬幣,比如京豆、Q幣等。這些虛幣也可以作為一種支付方式。
8. 賬戶支付
也成為余額支付、零錢(qián)支付等。 指為用戶建立本地賬戶, 支持充值,之后可以使用這個(gè)賬戶來(lái)完成支付。
9. 信用支付
如京東的白條,螞蟻花唄等,指使用信用賬戶進(jìn)行透支,類(lèi)似信用卡支付。
10. 代付
和代扣相反,代付是平臺(tái)將錢(qián)打給用戶。
每一種支付方式的詳細(xì)功能將在后續(xù)的各個(gè)章節(jié)中介紹。 這里先簡(jiǎn)要介紹支付產(chǎn)品模塊的通用功能。
模塊功能
支出產(chǎn)品根據(jù)其支付能力,對(duì)外提供不同的功能。整體上來(lái)說(shuō),一般支付產(chǎn)品需要提供如下接口:

1. 簽約和解約
在快捷支付、代扣等產(chǎn)品中,用戶在使用前,需要先完成簽約。簽約可以在渠道側(cè)進(jìn)行,一般第三方支付采用這種方式,當(dāng)電商需要接入時(shí),讓第三方給授權(quán)。 銀行和銀聯(lián)的簽約一般是在電商側(cè)進(jìn)行, 電商側(cè)負(fù)責(zé)收集用戶的信息,調(diào)用銀行和銀聯(lián)的接口進(jìn)行簽約。簽約后,后續(xù)的支付行為就使用簽約號(hào)來(lái)進(jìn)行,無(wú)需再輸入個(gè)人信息。 和簽約相對(duì)應(yīng),解約則是取消簽約關(guān)系。
2. 支付
支付是少不了的操作。 不同產(chǎn)品中支付行為不一樣。快捷支付是在電商服務(wù)器上發(fā)起,請(qǐng)求渠道進(jìn)行支付;網(wǎng)銀支付則是跳轉(zhuǎn)到銀行支付網(wǎng)關(guān)上進(jìn)行; 而賬戶支付、虛幣支付,則是在本地進(jìn)行的。
3. 撤銷(xiāo)和退款
有些渠道區(qū)分撤銷(xiāo)和退款,比如銀聯(lián)、農(nóng)行等,撤銷(xiāo)指取消當(dāng)天在渠道側(cè)未結(jié)算的交易; 而退款僅針對(duì)已經(jīng)結(jié)算的交易。有些渠道則不作區(qū)分。
4. 查詢(xún)簽約狀態(tài)
對(duì)于需要簽約的交易,可以通過(guò)這個(gè)接口來(lái)查詢(xún)簽約狀態(tài)。
5. 查詢(xún)訂單狀態(tài)
通過(guò)這個(gè)接口來(lái)查詢(xún)支付清單狀態(tài)以及退款的訂單狀態(tài)。
6. 預(yù)授權(quán)
預(yù)授權(quán)交易用于受理方向持卡人的發(fā)卡方確認(rèn)交易許可。受理方將預(yù)估的消費(fèi)金額作為預(yù)授權(quán)金額,發(fā)送給持卡人的發(fā)卡方。
7. 預(yù)授權(quán)撤銷(xiāo)
對(duì)已成功的預(yù)授權(quán)交易,在結(jié)算前使用預(yù)授權(quán)撤銷(xiāo)交易,通知發(fā)卡方取消付款承諾。預(yù)授權(quán)撤銷(xiāo)交易必須是對(duì)原始預(yù)授權(quán)交易或追加預(yù)授權(quán)交易最終承兌金額的全額撤銷(xiāo)。
8. 預(yù)授權(quán)完成交易
對(duì)已批準(zhǔn)的預(yù)授權(quán)交易,用預(yù)授權(quán)完成做支付結(jié)算。
9. 預(yù)授權(quán)完成撤銷(xiāo)
預(yù)授權(quán)完成撤銷(xiāo)交易必須是對(duì)原始預(yù)授權(quán)完成交易的全額撤銷(xiāo)。預(yù)授權(quán)完成撤銷(xiāo)后的預(yù)授權(quán)仍然有效。
10. 對(duì)賬
通過(guò)FTP或者HTTP方式提供對(duì)賬文件供商戶側(cè)對(duì)賬。
11. 余額查詢(xún)
查詢(xún)商戶的交易賬戶的余額,避免由于余額不足導(dǎo)致交易失敗。 注意,不是客戶的余額。 當(dāng)然,不是所有的銀行或者第三方支付都提供這個(gè)接口。
業(yè)務(wù)流程
上述操作,除了對(duì)賬、查單外,每個(gè)操作實(shí)現(xiàn)的主流程,一般會(huì)包括參數(shù)校驗(yàn),支付路由,生成訂單,風(fēng)險(xiǎn)評(píng)估,調(diào)用渠道服務(wù),更新訂單和發(fā)送消息這7步,對(duì)于一些比較復(fù)雜的服務(wù),還會(huì)涉及到異步同通知處理的步驟。

1. 執(zhí)行參數(shù)校驗(yàn)
所有的支付操作,都需要對(duì)輸入執(zhí)行參數(shù)校驗(yàn),避免接口受到攻擊。
- 驗(yàn)證輸入?yún)?shù)中各字段的有效性驗(yàn)證,比如用戶ID,商戶ID,價(jià)格,返回地址等參數(shù)。
- 驗(yàn)證賬戶狀態(tài)。交易主體、交易對(duì)手等賬戶的狀態(tài)是處于可交易的狀態(tài)。
- 驗(yàn)證訂單:如果涉及到預(yù)單,還需要驗(yàn)證訂單號(hào)的有效性,訂單狀態(tài)是未支付。為了避免用戶緩存某個(gè)URL地址,還需要校驗(yàn)下單時(shí)間和支付時(shí)間是否超過(guò)預(yù)定的間隔。
- 驗(yàn)證簽名。簽名也是為了防止支付接口被偽造。 一般簽名是使用分發(fā)給商戶的key來(lái)對(duì)輸入?yún)?shù)拼接成的字符串做MD5 Hash或者RSA加密,然后作為一個(gè)參數(shù)隨其他參數(shù)一起提交到服務(wù)器端。如支付網(wǎng)關(guān)設(shè)計(jì)所介紹,簽名驗(yàn)證也可以在網(wǎng)關(guān)中統(tǒng)一完成。
2. 根據(jù)支付路由尋找合適的支付服務(wù)
根據(jù)用戶選擇的支付方式確定用來(lái)完成該操作的合適的支付渠道。用戶指定的支付方式不一定是最終的執(zhí)行支付的渠道。比如用戶選擇通過(guò)工行信用卡來(lái)執(zhí)行支付,但是我們沒(méi)有實(shí)現(xiàn)和工行的對(duì)接,而是可以通過(guò)第三方支付,比如支付寶、微信支付、易寶支付,或者銀聯(lián)來(lái)完成。那如何選擇合適的支付渠道,就通過(guò)支付路由來(lái)實(shí)現(xiàn)。支付路由會(huì)綜合考慮收費(fèi)、渠道的可用性等因素來(lái)選擇最優(yōu)方案。
3. 評(píng)估交易風(fēng)險(xiǎn)
檢查本次交易是否有風(fēng)險(xiǎn)。風(fēng)控接口返回三種結(jié)果:阻斷交易、增強(qiáng)驗(yàn)證和放行交易。
1) 阻斷交易,說(shuō)明該交易是高風(fēng)險(xiǎn)的,需要終止,不執(zhí)行第5個(gè)步驟;
2) 增強(qiáng)驗(yàn)證,說(shuō)明該交易有一定的風(fēng)險(xiǎn),需要確認(rèn)下是不是用戶本人在操作。這可以通過(guò)發(fā)送短信驗(yàn)證碼或者其他可以驗(yàn)證用戶身份的方式來(lái)做校驗(yàn),驗(yàn)證通過(guò)后,可以繼續(xù)執(zhí)行該交易。
3) 放行交易,即本次交易是安全的,可以繼續(xù)往下走。
4. 生成交易訂單
將訂單信息持久化到數(shù)據(jù)庫(kù)中。當(dāng)訪問(wèn)壓力大的時(shí)候,數(shù)據(jù)庫(kù)寫(xiě)入會(huì)成為一個(gè)瓶頸。
5. 調(diào)用支付渠道提供的服務(wù)
所有的支付服務(wù)都需要第三方通道來(lái)完成執(zhí)行。一般銀行渠道的調(diào)用比較簡(jiǎn)單,可以直接返回結(jié)果。一些第三方支付,支付寶,微信支付等,會(huì)通過(guò)異步接口來(lái)告知支付結(jié)果。
6. 更新訂單
對(duì)于同步返回的結(jié)果,需要在主線程中更新訂單的狀態(tài),標(biāo)記是支付成功還是失敗。對(duì)于異步返回的渠道,需要在異步程序中處理。
7. 發(fā)送消息
通過(guò)消息來(lái)通知相關(guān)系統(tǒng)關(guān)于訂單的變更。風(fēng)控,信用BI等,都需要依賴(lài)這數(shù)據(jù)做準(zhǔn)實(shí)時(shí)計(jì)算。
8. 異步通知
如上述流程,其中涉及到調(diào)用遠(yuǎn)程接口,其延遲不可控。如果調(diào)用方一直阻塞等待,很容易超時(shí)。引入異步通知機(jī)制,可以讓調(diào)用方在主線程中盡快返回,通過(guò)異步線程來(lái)得到支付結(jié)果。對(duì)于通過(guò)異步來(lái)獲取支付結(jié)果的渠道接口,也需要對(duì)應(yīng)的在異步通知中將結(jié)果返回給調(diào)用方。 異步通知需要調(diào)用方提供一個(gè)回調(diào)地址,一般以http或者h(yuǎn)ttps的方式。這就有技術(shù)風(fēng)險(xiǎn),如果調(diào)用失敗,還需要重試。而重試不能過(guò)于頻繁,需要逐步拉大每一次重試的時(shí)間間隔。 在異步處理程序中,訂單根據(jù)處理結(jié)果變更狀態(tài)后,也要發(fā)消息通知相關(guān)系統(tǒng)。
支付系統(tǒng)架構(gòu)整體設(shè)計(jì)
每個(gè)公司根據(jù)其業(yè)務(wù)和公司發(fā)展的不同階段,所設(shè)計(jì)的支付系統(tǒng)也會(huì)有所不同。我們先看看互聯(lián)網(wǎng)公司的一些典型的支付系統(tǒng)架構(gòu)。
支付寶
我們先看看業(yè)內(nèi)最強(qiáng)的支付寶系統(tǒng)。架構(gòu)圖如下:

這個(gè)整體架構(gòu)上并沒(méi)有與眾不同之處。在模塊劃分上,這個(gè)圖顯示的是最頂層的劃分,也無(wú)法告知更多細(xì)節(jié)。 但支付寶架構(gòu)文檔有兩個(gè)搞支付平臺(tái)設(shè)計(jì)的人必須仔細(xì)揣摩的要點(diǎn)。 一個(gè)是賬務(wù)處理。在記賬方面,涉及到內(nèi)外兩個(gè)子系統(tǒng),外部子系統(tǒng)是單邊賬,滿足線上性能需求;內(nèi)部子系統(tǒng)走復(fù)式記賬,滿足財(cái)務(wù)需求。在清結(jié)算這個(gè)章節(jié)中也是基于這個(gè)模型來(lái)詳細(xì)介紹如何記賬、對(duì)賬和平賬。

另一個(gè)亮點(diǎn)是柔性事務(wù)處理,利用消息機(jī)制來(lái)實(shí)現(xiàn)跨系統(tǒng)的事務(wù)處理,避免數(shù)據(jù)庫(kù)鎖導(dǎo)致的性能問(wèn)題。
京東金融
來(lái)自京東支付平臺(tái)總體架構(gòu)設(shè)計(jì) 。如下圖:

京東金融是在網(wǎng)銀在線的基礎(chǔ)上發(fā)展起來(lái)的。 網(wǎng)銀在線的原班技術(shù)人員有不少來(lái)自易寶公司,在京東收購(gòu)之后,又引入了支付寶的人才。
因而從架構(gòu)上受這兩個(gè)公司的影響很大。
去哪兒
這是來(lái)自去哪兒公司分享的支付產(chǎn)品架構(gòu)。請(qǐng)看下圖:

美團(tuán)的支付平臺(tái)架構(gòu)
來(lái)自美團(tuán)的支付平臺(tái)規(guī)劃架構(gòu) 。這是2015年的文檔。 2016年美團(tuán)才拿到支付牌照。 從這個(gè)架構(gòu),大家也能知道為什么美團(tuán)必須拿到支付牌照。

這些架構(gòu)文檔全部來(lái)自互聯(lián)網(wǎng)公開(kāi)資料。 對(duì)于架構(gòu)是否真實(shí)反映實(shí)際系統(tǒng)情況,需要大家自行判斷。 我們以這些文檔為基礎(chǔ),分析支付系統(tǒng)的應(yīng)有的軟件架構(gòu)。
參考架構(gòu)
一般來(lái)說(shuō),支付系統(tǒng)典型架構(gòu)會(huì)包含如下模塊:

支付系統(tǒng)從架構(gòu)上來(lái)說(shuō),分為三層;
- 支撐層: 用來(lái)支持核心系統(tǒng)的基礎(chǔ)軟件包和基礎(chǔ)設(shè)施, 包括運(yùn)維監(jiān)控系統(tǒng)、日志分析系統(tǒng)等。
- 核心層: 支付系統(tǒng)的核心模塊,內(nèi)部又分為兩個(gè)部分: 支付核心模塊以及支付服務(wù)模塊。
- 產(chǎn)品層: 通過(guò)核心層提供的服務(wù)組合起來(lái),對(duì)最終用戶、商戶、運(yùn)營(yíng)管理人員提供的系統(tǒng)。
支撐系統(tǒng)
支撐系統(tǒng)是一個(gè)公司提供給支付系統(tǒng)運(yùn)行的基礎(chǔ)設(shè)施。 主要包括如下子系統(tǒng):
- 運(yùn)維監(jiān)控: 支付系統(tǒng)在下運(yùn)行過(guò)程中不可避免的會(huì)受到各種內(nèi)部和外部的干擾,光纖被挖斷、黑客攻擊、數(shù)據(jù)庫(kù)被誤刪、上線系統(tǒng)中有bug等等,運(yùn)維人員必須在第一時(shí)間內(nèi)對(duì)這些意外事件作出響應(yīng),又不能夠一天24小時(shí)盯著。這就需要一個(gè)運(yùn)維監(jiān)控系統(tǒng)來(lái)協(xié)助完成。
- 日志分析: 日志是支付系統(tǒng)統(tǒng)計(jì)分析、運(yùn)維監(jiān)控的重要依據(jù)。公司需要提供基礎(chǔ)設(shè)施來(lái)支持日志統(tǒng)一收集和分析。
- 短信平臺(tái): 短信在支付系統(tǒng)中有重要作用: 身份驗(yàn)證、安全登錄、找回密碼、以及報(bào)警監(jiān)控,都需要短信的支持。
- 安全機(jī)制: 安全是支付的生命線。 SSL、證書(shū)系統(tǒng)、防刷接口等,都是支付的必要設(shè)施。
- 統(tǒng)計(jì)報(bào)表: 支付數(shù)據(jù)的可視化展示,是公司進(jìn)行決策的基礎(chǔ)。
遠(yuǎn)程連接管理、分布式計(jì)算、消息機(jī)制、全文檢索、文件傳輸、數(shù)據(jù)存儲(chǔ)、機(jī)器學(xué)習(xí)等,都是構(gòu)建大型系統(tǒng)所必須的基礎(chǔ)軟件,這里不再一一詳細(xì)介紹。
支付核心系統(tǒng)
支付核心系統(tǒng)指用戶執(zhí)行支付的核心流程,包括:
- 用戶從支付應(yīng)用啟動(dòng)支付流程。
- 支付應(yīng)用根據(jù)應(yīng)用和用戶選擇的支付工具來(lái)調(diào)用對(duì)應(yīng)的支付產(chǎn)品來(lái)執(zhí)行支付。
- 支付路由根據(jù)支付工具、渠道費(fèi)率、接口穩(wěn)定性等因素選擇合適的支付渠道來(lái)落地支付。
- 支付渠道調(diào)用銀行、第三方支付等渠道提供的接口來(lái)執(zhí)行支付操作,最終落地資金轉(zhuǎn)移。
支付服務(wù)系統(tǒng)
支持支付核心系統(tǒng)所提供的功能。服務(wù)系統(tǒng)又分為基礎(chǔ)服務(wù)系統(tǒng)、資金系統(tǒng)、風(fēng)控和信用系統(tǒng)。
基礎(chǔ)服務(wù)系統(tǒng)提供支撐線上支付系統(tǒng)運(yùn)行的基礎(chǔ)業(yè)務(wù)功能:
- 客戶信息管理:包括對(duì)用戶、商戶的實(shí)名身份、基本信息、協(xié)議的管理;
- 卡券管理: 對(duì)優(yōu)惠券、代金券、折扣券的制作、發(fā)放、使用流程的管理;
- 支付通道管理: 通道接口、配置參數(shù)、費(fèi)用、限額以及QOS的管理;
- 賬戶和賬務(wù)系統(tǒng): 管理賬戶信息以及交易流水、記賬憑證等。這里的賬務(wù)一般指對(duì)接線上系統(tǒng)的賬務(wù),采用單邊賬的記賬方式。 內(nèi)部賬記錄在會(huì)計(jì)核算系統(tǒng)中。
- 訂單系統(tǒng): 一般訂單系統(tǒng)可以獨(dú)立于業(yè)務(wù)系統(tǒng)來(lái)實(shí)現(xiàn)的。這里的訂單,主要指支付訂單。
資金系統(tǒng)指圍繞財(cái)務(wù)會(huì)計(jì)而產(chǎn)生的后臺(tái)資金核實(shí)、調(diào)度和管理的系統(tǒng),包括:
- 會(huì)計(jì)核算: 提供會(huì)計(jì)科目、內(nèi)部賬務(wù)、試算平衡、日切、流水登記、核算和歸檔的功能。
- 資金管理: 管理公司在各個(gè)支付渠道的頭寸,在余額不足時(shí)進(jìn)行打款。 對(duì)第三方支付公司,還需要對(duì)備付金進(jìn)行管理。
- 清算分潤(rùn): 對(duì)于有分潤(rùn)需求的業(yè)務(wù),還需要提供清分清算、對(duì)賬處理和計(jì)費(fèi)分潤(rùn)功能。
風(fēng)控系統(tǒng)是支付系統(tǒng)必備的基礎(chǔ)功能,所有的支付行為必須做風(fēng)險(xiǎn)評(píng)估并采取對(duì)應(yīng)的措施;信用系統(tǒng)是在風(fēng)控基礎(chǔ)上發(fā)展的高級(jí)功能,京東的白條,螞蟻花唄等,都是成功的案例。
支付應(yīng)用
支撐系統(tǒng)、核心系統(tǒng)和服務(wù)系統(tǒng),在每個(gè)互聯(lián)網(wǎng)公司的架構(gòu)上都是大同小異的,都是必不可少的模塊。而支付應(yīng)用是每個(gè)公司根據(jù)自己的業(yè)務(wù)來(lái)構(gòu)建的,各不相同。
總體來(lái)說(shuō),可以按照使用對(duì)象分為針對(duì)最終用戶的應(yīng)用、針對(duì)商戶的應(yīng)用、針對(duì)運(yùn)營(yíng)人員的運(yùn)營(yíng)管理、BI和風(fēng)控后臺(tái)。
總結(jié)
本篇為大家描述支付系統(tǒng)的整體架構(gòu)。后續(xù)我們會(huì)將以此為基礎(chǔ),分別介紹各個(gè)模塊的設(shè)計(jì)
轉(zhuǎn)載自公眾號(hào)-支付圈
原文作者:鳳凰牌老熊