如何設(shè)計一套支付系統(tǒng)–對賬模塊
編輯導(dǎo)語:很多人都有記賬的習(xí)慣,但是記到后面卻發(fā)現(xiàn)自己的帳算不清楚,記賬不能只靠著單方面的賬單,還要進(jìn)行對賬才能確保無誤;本文將會從產(chǎn)品設(shè)計的業(yè)務(wù)知識點(diǎn)出發(fā),詳細(xì)介紹對賬業(yè)務(wù)流程,并列舉會出現(xiàn)的常見問題和解決方法。
業(yè)務(wù)背景:
對賬模塊是支付系統(tǒng)的核心能力之一,是信息流和資金流關(guān)聯(lián)的重要依據(jù),平臺如果只使用渠道的單邊賬單或者平臺流水訂單,出現(xiàn)差錯或渠道惡意扣單的風(fēng)險極高。
為提高資金賬務(wù)的正確性和保障平臺的利益,需要通過平臺系統(tǒng)對賬能力與上游渠道對賬單逐筆勾兌確認(rèn),如有差異能及時解決或歸檔。
用戶畫像:
1)清結(jié)算專員:負(fù)責(zé)發(fā)起清分的操作者,首先確保信息流對平,然后確認(rèn)資金流應(yīng)收款和信息流平賬賬單金額一致。希望能及時發(fā)現(xiàn)長短款問題,并解決,保障資金清算給商戶(平臺可收款用戶)的時效性。
2)對賬異常訂單處理專員:負(fù)責(zé)核算異常訂單原因,并在平臺操作將異常訂單執(zhí)行修正、平賬。
一、必須知道的業(yè)務(wù)知識點(diǎn)
1. 對賬
在會計上概念:指為了保證賬簿記錄的正確性而進(jìn)行的有關(guān)賬項的核對工作;做到賬證相符、賬賬相符、賬實相符。
在支付系統(tǒng)上的體現(xiàn):
1)賬證核對:是將賬簿記錄與記賬憑證進(jìn)行核對。這里是記賬憑證是指第三方上游提供的渠道對賬單,第三方渠道會根據(jù)對賬單金額實際結(jié)算資金,也就是常說的信息流對賬。(有的支付公司或銀行只要收到對賬單了且平賬,即使資金未實際到賬,業(yè)務(wù)也允許發(fā)起清分以提高清算時效性)
2)賬賬核對:是把有相互關(guān)系的多個賬簿記錄進(jìn)行核對,有相互關(guān)系的賬簿記錄,包括總分類賬簿間核對,明細(xì)賬簿間核對等多種類型。整個支付系統(tǒng)可以被拆分成了多個子系統(tǒng),如交易系統(tǒng)、賬戶系統(tǒng)、會計系統(tǒng)、賬戶系統(tǒng),每個子系統(tǒng)在處理各自的業(yè)務(wù)并記錄,其實就相當(dāng)于會記理論中的賬簿。系統(tǒng)間的對賬,主要用于修正內(nèi)部系統(tǒng)的數(shù)據(jù)不一致。
3)賬實核對:是各項資產(chǎn)物資的記錄數(shù)值與實際真實數(shù)額間的核對。確認(rèn)第三方匯款到銀行賬戶資金和平賬對賬單結(jié)算金額是否匹配,也就是常說的資金流對賬。
2. 軋帳
對賬系統(tǒng)主要做的是信息流的對賬,若對賬中發(fā)現(xiàn)有差異的訂單歸類記入對賬異常訂單表,可稱為軋帳。
3. 平帳
對賬異常訂單進(jìn)入差錯流程,可以通過人工或者自動的方式,按照事先設(shè)計好的規(guī)則處理這些異常差錯,可稱為平帳。
4、渠道對賬單
上游渠道會按照平臺在其申請的渠道賬戶維度推送對賬單,渠道賬戶也就是常說的支付通道。
如果是第三方支付公司或銀行,上游渠道是微信、支付寶、銀聯(lián)二維碼(云閃付)等等。例如:支付平臺申請有微信2通道和微信6通道,則微信側(cè)會生成2份對賬單文件。
每份對賬單會包括支付成功訂單和退款成功訂單。第三方會以對賬單中的結(jié)算金額(支付訂單金額-支付訂單手續(xù)費(fèi))-(退款訂單金額-退款訂單手續(xù)費(fèi))結(jié)算匯款給到平臺資金賬戶。
5、銀聯(lián)二維碼(難點(diǎn))
銀聯(lián)二維碼是銀聯(lián)平臺自主推出的支付產(chǎn)品,C端使用云閃付、各手機(jī)銀行APP支付,訂單底層走的都是銀聯(lián)二維碼通道。
為什么銀聯(lián)二維碼需要重點(diǎn)說呢?
因為它不同于微信、支付寶通道統(tǒng)一費(fèi)率的原則,銀聯(lián)會根據(jù)C端用戶支付時使用的銀行卡借貸性質(zhì)和交易金額是否大于1000作為費(fèi)率規(guī)則,并且還會收取額外的品牌服務(wù)費(fèi),詳情參見下圖。
所以設(shè)計銀聯(lián)二維碼通道對賬時,還需考慮到多費(fèi)率及品牌服務(wù)費(fèi)的場景。
二、對賬流程
1. 業(yè)務(wù)流程
對賬業(yè)務(wù)可以插解為5個業(yè)務(wù)環(huán)節(jié),本文主要說明每個環(huán)節(jié)的能力職責(zé)、常見問題和通用解決方法,具體的產(chǎn)品方案還需要結(jié)合讀者平臺自身的業(yè)務(wù)特點(diǎn)和系統(tǒng)架構(gòu)設(shè)計。
三、對賬任務(wù)
對賬是一個日常操作,正常情況下上游渠道都會以D+1的周期生成渠道對賬單。
每天系統(tǒng)可以默認(rèn)生成定時對賬任務(wù),每個上游渠道生成時間不一樣,可以事前和上游確認(rèn),并結(jié)合平臺對賬的處理時效和商戶到賬需求,設(shè)計一個合理的時間執(zhí)行。
對賬任務(wù)設(shè)計前需確認(rèn),渠道對賬單推送方式、解析方法、匹配字段,并提前做好聯(lián)調(diào)適配工作;例如渠道有可能會需要申請白名單權(quán)限或提供SFTP地址信息,要謹(jǐn)防上線后才發(fā)現(xiàn)系統(tǒng)無法正常獲取對賬單的情況。
1. 創(chuàng)建任務(wù)批次
創(chuàng)建批次一方面是為了防止重復(fù)對賬,另一方面需要在對賬結(jié)束的時候?qū)~的結(jié)果信息存儲到批次中。
2. 記錄任務(wù)信息
對賬任務(wù)信息,例如:通道名稱、通道編號、渠道商戶號、對賬任務(wù)批次、對賬任務(wù)狀態(tài)、交易時間、任務(wù)創(chuàng)建時間、下載開始時間、下載結(jié)束時間、下載狀態(tài)、對賬開始時間、對賬結(jié)束時間、對賬結(jié)果、對賬方式;
對賬方式為對賬處理時的對賬規(guī)則,可以根據(jù)業(yè)務(wù)實際情況分為:無需對賬、以渠道為準(zhǔn)、以平臺為準(zhǔn)。
- 以渠道為準(zhǔn),則若對賬訂單平臺交易狀態(tài)為支付中或支付失敗,但渠道為支付成功,則平臺狀態(tài)改為支付成功。
- 以平臺為準(zhǔn),則是若出現(xiàn)上述情況,對賬訂單記錄為異常訂單。
3. 重置任務(wù)機(jī)制
考慮到對賬過程中可能會遇到的來自上游渠道的問題或平臺系統(tǒng)自身問題,需要設(shè)計重置機(jī)制。
上游渠道對賬單錯誤,需求二次或多次推送,所以需要設(shè)計重新下載渠道對賬單或重新上傳渠道對賬單;有可能平臺自身數(shù)據(jù)錯誤導(dǎo)致出現(xiàn)大量的差異訂單,修復(fù)后需要重新對賬。
4. 對賬任務(wù)詳情示例
- 對賬信息:記錄對賬任務(wù)基本情況;
- 對賬結(jié)果信息:顯示關(guān)鍵對賬字段值;
- 掛銷賬信息:顯示是否有掛銷賬訂單及金額;
- 對賬異常信息:顯示是否有對賬異常訂單及金額;
- 備注:將系統(tǒng)自動處理的過程記錄,也可以手動修改。
四、對賬單下載
1. 獲取文件
渠道對賬單獲取方式,一般提前作為任務(wù)規(guī)則寫死。
大多數(shù)銀行都要求接入方提供ftp服務(wù),銀行定時將對賬單推送到接入方提供的ftp服務(wù)器上面;
還有一部分銀行會提供對賬單的下載服務(wù),通過ftp/http的都有,ftp方式居多;
另外網(wǎng)銀的對賬單比較特殊,一般都需要結(jié)算登錄網(wǎng)銀的后臺管理系統(tǒng)中,手動下載,結(jié)算下載完對賬單后在導(dǎo)入到對賬系統(tǒng)。
2. 判斷文件是否存在
任務(wù)自動獲取文件的情況下需要判斷任務(wù)是否存在:
自動獲取渠道對賬單:不存在需要設(shè)置輪詢,每間隔一段時間重新獲取。重試次數(shù)和間隔的設(shè)置需要小心,重試太頻繁,容易把服務(wù)器打死.;時間間隔太大,又會阻塞后續(xù)處理步驟。5~10分鐘是一個合適的重試間隔區(qū)間。
手動導(dǎo)入渠道對賬單:要設(shè)計導(dǎo)入入口,導(dǎo)入成功后任務(wù)狀態(tài)也要做相應(yīng)的變更。
3. 下載文件
技術(shù)實現(xiàn)上可以做成工廠模式,不同的支付渠道有不同的下載類,如果是http接口將文件寫入到對賬單,如果是ftp服務(wù)器,將服務(wù)器中的對賬單下載到本地帶解析的目錄中。主要涉及的代碼ftp工具類、http(s)工具類,相關(guān)IO讀寫。
4. 判斷來源渠道
獲取到上游對賬單文件后,很有可能多個渠道的對賬單在同一個SFTP地址,根據(jù)文件名匹配到對應(yīng)的對賬任務(wù),文件名一般會包含賬單時間、渠道商戶號,然后再執(zhí)行下一步。
五、文件解析
1. 解析文件
解析文件主要是將下載的對賬文件解析成我們可以對賬的數(shù)據(jù)類型并且入庫。
解析的文件不同渠道有不同的類型,因此也可以設(shè)計成不同的解析模板,使用工廠模式將不同格式的文件解析成可以對賬的統(tǒng)一數(shù)據(jù)類型。
解析的文件類型一般包括:json、text、cvs、excle等,另外部分銀行會對賬單做加密或者提供zip打包的格式,這里就需要額外開發(fā)zip工具類和加解密工具類進(jìn)行處理。
對賬文件中包含的主要信息有:商戶訂單號、交易流水號、交易時間、支付時間、付款方、交易金額、交易類型、交易狀態(tài)這些字段。
2. 轉(zhuǎn)換入庫
每個渠道的賬單格式都不盡相同, 在得到賬單后,下一步是對賬單做標(biāo)準(zhǔn)化處理,這樣軋帳以及后續(xù)工作就可以統(tǒng)一處理了。
標(biāo)準(zhǔn)化后的賬單數(shù)據(jù)可以放在文件系統(tǒng)或者數(shù)據(jù)庫中,這取決于交易數(shù)據(jù)量;每天百萬以上的量,還是使用文件系統(tǒng),比較合適,數(shù)據(jù)庫操作相對比較慢,也浪費(fèi)資源。
基于文件系統(tǒng)的標(biāo)準(zhǔn)化涉及如下內(nèi)容:
- 文件格式標(biāo)準(zhǔn)化統(tǒng)一使用csv或者json或者xml格式,如果是使用hadoop或者spark來對賬,也可以使用csv。
- 文件存儲統(tǒng)一化文件目錄,文件名都需要遵循統(tǒng)一命名規(guī)范。
六、對賬單處理
1. 獲取對方對賬單
將事前準(zhǔn)備的上游對賬單標(biāo)準(zhǔn)文件放入緩沖對賬池。
2. 獲取我方對賬單
本地交易記錄的準(zhǔn)備,總的來說有如下方法:
啥都不做,直接用訂單表的原始數(shù)據(jù):鑒于大部分系統(tǒng)使用的是MySQL,這也意味著在MySQL上做對賬。對賬時需要大量的數(shù)據(jù)查找工作,必然會影響線上業(yè)務(wù)。在數(shù)據(jù)規(guī)模較大,比如超過100萬時,就不太合適了。
使用備庫來執(zhí)行對賬:這樣既簡單,也不影響線上業(yè)務(wù),這是典型的空間換時間的做法。
采用分表分庫對賬:如果業(yè)務(wù)大到需要分表分庫才能處理,那對賬數(shù)據(jù)準(zhǔn)備也不一樣。
3. 逐一匹配
前文有提到對賬方式有三種,不對賬、以渠道為準(zhǔn)、以平臺為準(zhǔn),大部分的情況下的對賬方式都以渠道為準(zhǔn),信息流的傳遞方向,支付成功結(jié)果是由上游渠道通知平臺的,平臺很有可能會因網(wǎng)絡(luò)或系統(tǒng)問題而沒有收到通知。
一般按照交易金額、交易狀態(tài)、手續(xù)費(fèi)金額逐一匹配,對賬方式選擇以渠道為準(zhǔn)的處理邏輯為例:
1)交易金額不匹配:記入異常訂單。
2)交易狀態(tài)不匹配:若上游為支付成功,我方為未支付或支付失敗,則以上游為準(zhǔn)。
- 若我方訂單為支付成功,上游只會推送支付成功的訂單為對賬單,上游對賬單不存在的情況,將我方訂單記入為掛賬訂單;
- 若上游對賬單存在,我方不存在的情況,記入異常訂單。
3)手續(xù)費(fèi)金額不匹配:記入異常訂單。
4. 掛銷賬處理
常會存在因日切時間點(diǎn)不一致或網(wǎng)絡(luò)延時等情況,導(dǎo)致我方平臺訂單時間與上游渠道時間不一致,同一個訂單在渠道交易時間是1月1號,但在平臺是1月2號。
- 掛賬,對賬時若上游無我方有,訂單放入掛賬訂單中。
- 銷賬,若匹配中掛賬訂單匹配上了,記錄為當(dāng)日平臺賬單,掛銷賬狀態(tài)改為已銷賬。
七、差錯處理
關(guān)于差錯流程,每個系統(tǒng)的業(yè)務(wù)特性、運(yùn)營團(tuán)隊流程、公司財務(wù)管理辦法不一樣,不能生搬硬套,但原則是一樣的,所有的異常訂單的報銷賬必須有理有據(jù),多重審核。
1. 異常原因
(1)若出現(xiàn)訂單金額不一致的情況,一般是平臺調(diào)用上游交易接口時,雙方字段的定義不匹配導(dǎo)致的。
(2)若出現(xiàn)手續(xù)費(fèi)金額不一致的情況,一般是平臺手續(xù)費(fèi)計算規(guī)則和上游不匹配導(dǎo)致的,差額不會太大,可以設(shè)計閥值若在可以接受的范圍類不計為異常。
(3)若出現(xiàn)上游對賬單存在,平臺訂單不存在的情況,通常是有第三方繞過平臺系統(tǒng)與上游系統(tǒng)發(fā)生支付或退款交易。需要及時核查是否存在交易密鑰泄露或被繞過商戶去上游系統(tǒng)平臺操作。
2. 修正
選擇以平臺為準(zhǔn)或以上游為準(zhǔn),修改訂單金額、訂單狀態(tài)、手續(xù)費(fèi)金額。此時寫入修正原因很重要,便于后期業(yè)務(wù)追蹤考求。
3. 平賬
將平臺異常訂單狀態(tài)改為平賬,并將平賬時的時間作為賬單時間,合入至平臺賬單。平臺會根據(jù)平臺賬單計算渠道分潤金額和商戶結(jié)算金額。
八、業(yè)務(wù)規(guī)則系統(tǒng)化
最后,每個平臺產(chǎn)品細(xì)節(jié)都會有其特定的業(yè)務(wù)規(guī)則,就不具體說明平臺頁面和和平臺操作功能,筆者不做詳情說明。以上業(yè)務(wù)規(guī)則系統(tǒng)化,系統(tǒng)流程圖如下,讀者可以結(jié)合自己平臺業(yè)務(wù)情況提取細(xì)化。
本文由 @Jamie Gao 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議
請問:確認(rèn)資金流應(yīng)收款和信息流平賬賬單金額一致
這句話比較的兩個對象具體是指什么呢,可以解釋一下嗎,沒有看懂
您好,關(guān)于4中的掛賬,是否可以將掛賬的單放入下一天的匹配中進(jìn)行嘗試銷賬?
我來啦
邏輯很清晰
樓主什么時候分享下結(jié)算系統(tǒng)的設(shè)計,期待中~
同樣期待~