小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

堪稱最詳細的支付系統(tǒng)設計

 年年有俞otk8ql 2021-02-23

本文轉(zhuǎn)自公號:技術方舟

支付系統(tǒng)

概述

支付系統(tǒng)是連接消費者、商家(或平臺)和金融機構(gòu)的橋梁,管理支付數(shù)據(jù),調(diào)用第三方支付平臺接口,記錄支付信息(對應訂單號,支付金額等),金額對賬等功能,根據(jù)不同公司對于支付業(yè)務的定位不同大概有幾個階段:第一階段:支付作為一個(封閉)的、獨立的應用系統(tǒng),為各系統(tǒng)提供支付功能支持。一般來說,這個系統(tǒng)僅限于為公司內(nèi)部的業(yè)務提供支付支持,并且和業(yè)務緊密耦合。第二階段:支付作為一個開發(fā)的系統(tǒng),為公司內(nèi)外部系統(tǒng)、各種業(yè)務提供支付服務,支付服務本身應該是和具體的業(yè)務解耦合。

      支付是電商系統(tǒng)中核心

我們先來看一下用戶完成一次購物需要進行那些操作:

通常消費者在手機APP或者網(wǎng)站都會涉及到支付相關的業(yè)務場景,用戶只需要簡單點擊支付按鈕輸入支付密碼,就可以完成整個支付過程,那么我就和大家一起來看看一個完整的支付系統(tǒng)有什么功能組成和設計時需要考慮那些問題。

01

支付系統(tǒng)的作用

從上圖中我們可以看出真實的資金流向。首先當用戶產(chǎn)生支付行為時,資金從用戶端流向支付系統(tǒng),退款時則相反,從支付系統(tǒng)回流至用戶端。因此在整個交易過程中用戶端與支付系統(tǒng)是雙向資金的流動方式。對于支付系統(tǒng)而言,資金有進有出。從支付系統(tǒng)到商戶端就比較簡單了,在清算完成后支付系統(tǒng)負責將代收的資金結(jié)算給商戶,通常結(jié)算的操作可以在線上來完成(采用支付公司代付接口或者銀企直連接口來完成),也可以由公司財務通過線下手工轉(zhuǎn)賬的方式來完成,因此這種資金流動的方式是單向的。出于資金安全考慮,大多數(shù)公司通常這部分采用線下方式實現(xiàn)。

真實的資金流由支付公司按照約定期限(通常 T+1 )結(jié)算到平臺公司對公賬戶中,然后再由平臺公司再按照交易明細進行二次清算后結(jié)算給對應的商戶。

支付系統(tǒng)

一個支付系統(tǒng)需要由哪些功能模塊組成

01

完整的支付系統(tǒng)包括如下功能:

  1. 應用管理: 同時支持公司多個業(yè)務系統(tǒng)對接。

  2. 商戶管理: 支持商戶入駐,商戶需要向平臺方提供相關的資料備案。

  3. 渠道管理: 支持微信、支付寶、銀聯(lián)、京東支付等多種渠道。

  4. 賬戶管理: 渠道賬戶管理,支持共享賬戶(個人商戶)及自有賬戶。

  5. 支付交易: 生成預支付訂單、提供退款服務。

  6. 對賬管理: 實現(xiàn)支付系統(tǒng)的交易數(shù)據(jù)與第三方支付渠道交易明細的自動核對(通常T+1),確保交易數(shù)據(jù)的準確性和一致性。

  7. 清算管理: 計算收款交易中商戶的應收與支付系統(tǒng)收益。

  8. 結(jié)算管理: 根據(jù)清算結(jié)果,將資金劃撥至商戶對應的資金帳戶中。

02

核心流程

支付系統(tǒng)有幾個關鍵的核心流程:支付流程、對賬流程、結(jié)算流程

支付流程

支付流程說明

  1. 用戶在商城選購商品并發(fā)起支付請求;

  2. 商城將支付訂單通過B2C網(wǎng)關收款接口傳送至支付網(wǎng)關;

  3. 用戶選擇網(wǎng)銀支付及銀行,支付平臺將訂單轉(zhuǎn)送至指定銀行網(wǎng)關界面;

  4. 用戶支付完成,銀行處理結(jié)果并向平臺返回處理結(jié)果;

  5. 支付平臺接收處理結(jié)果,落地處理并向商戶返回結(jié)果;

  6. 商城接收到支付公司返回結(jié)果,落地處理(更改訂單狀態(tài))并通知用戶。

一般而言支付系統(tǒng)會給商戶設置有“可用余額”賬戶、“待結(jié)算”賬戶;系統(tǒng)在接收到銀行返回支付成功信息會進行落地處理,一方面更改對應訂單狀態(tài),另一方面在商戶待結(jié)算賬戶記入一筆金額;該筆金額,系統(tǒng)會根據(jù)結(jié)算周期從待結(jié)算賬戶--->“可用余額”賬戶。

退款流程說明

  1. 用戶在商戶平臺發(fā)起退款申請,商戶核實退款信息及申請;

  2. 商戶登錄支付平臺賬戶/或者通過支付公司提供的退款接口向支付平臺發(fā)起退款;

  3. 支付系統(tǒng)會對退款信息校驗(退款訂單對應的原訂單是否支付成功?退款金額是否少于等于原訂單金額?),校驗商戶賬戶余額是否充足等;校驗不通過,則無法退款;

  4. 支付系統(tǒng)在商戶可用余額賬戶扣除金額,并將退款訂單發(fā)送至銀行,銀行完成退款操作。注意:對于網(wǎng)關收款的訂單退款,各銀行要求不一,有些銀行提供的退款接口要求原訂單有效期在90或180天,有些銀行不提供退款接口;針對超期或者不支持接口退款的訂單,支付公司通過代付通道完成退款操作。

對于收單金額未結(jié)算,還在“待結(jié)算”賬戶的訂單,如果出現(xiàn)退款情況,業(yè)務流程和上述流程差不多,只是從待結(jié)算賬戶進行扣款。

對賬流程

說明

        對賬,我們一般稱為勾兌,支付系統(tǒng)的對賬,包含著兩個層面:

  1. 支付系統(tǒng)內(nèi)部間的對賬,支付系統(tǒng)一般是分布式的,整個支付系統(tǒng)被拆分成了多個子系統(tǒng),如交易系統(tǒng)、賬戶系統(tǒng)、會計系統(tǒng)、賬戶系統(tǒng),每個子系統(tǒng)在處理各自的業(yè)務,系統(tǒng)間的對賬,就是以上系統(tǒng)的核對,用于修正內(nèi)部系統(tǒng)的數(shù)據(jù)不一致。

  2. 支付系統(tǒng)與渠道的對賬,這里的渠道泛指所有為支付系統(tǒng)提供代收付業(yè)務的渠道,如:第三方支付公司、銀行、清算中心、網(wǎng)聯(lián)、銀聯(lián)等。

支付系統(tǒng)與渠道間的對賬

系統(tǒng)間的對賬比較好理解,這里主要講支付系統(tǒng)與渠道間的對賬。支付系統(tǒng)與渠道間的對賬,又包含2個維度:

  1. 信息流勾對:即業(yè)務對賬/交易對賬,主要是就收單交易的支付信息與銀行提供的信息流文件進行勾兌。信息流的勾地能發(fā)現(xiàn)支付系統(tǒng)與銀行系統(tǒng)間的掉單、兩邊由于系統(tǒng)間的原因?qū)е碌耐还P交易支付金額不一致(可能性很小)或者支付狀態(tài)不一致。信息流勾兌一般用來恢復掉單數(shù)據(jù),可通過補單或者具體系統(tǒng)問題排查解決。

  2. 資金流勾對:即資金對賬,主要就收單交易的支付信息與銀行提供的資金流信息進行勾兌。資金流的勾兌能發(fā)現(xiàn)支付系統(tǒng)在銀行的帳戶資金實際發(fā)生的變動與應該發(fā)生的變動的差異,比如長款(銀行多結(jié)算給支付系統(tǒng))和短款(銀行少結(jié)算給支付系統(tǒng))。

說了這么多,就出現(xiàn)來4個對賬文件,支付系統(tǒng)信息流文件、支付系統(tǒng)資金流文件、銀行信息流文件、銀行資金流文件。業(yè)務對賬(勾兌)就是支付系統(tǒng)的信息流文件與銀行的信息流文件勾兌,資金對賬即支付系統(tǒng)的資金流文件與銀行的資金流文件勾兌。

核對的差異處理

1、信息流勾對的差異處理

  • 支付系統(tǒng)信息流沒有,而銀行有的差異,可能是因為支付系統(tǒng)交易數(shù)據(jù)的丟失、銀行的掉單,如果是銀行的掉單,由支付公司的運營登錄銀行網(wǎng)銀確認后,做補單處理,并將差異表中該記錄核銷。

  • 支付系統(tǒng)信息流有,而銀行沒有的差異,此種情況一般不會發(fā)生,因為支付系統(tǒng)所有的交易數(shù)據(jù)都是取銀行返回狀態(tài)的數(shù)據(jù)。

2、資金流勾對對差異處理

  • 支付系統(tǒng)資金流沒有,而銀行有的差異??赡茉蛉缦拢?、銀行日切晚與支付系統(tǒng)核心賬務系統(tǒng);2、支付系統(tǒng)賬務核心系統(tǒng)與其他系統(tǒng)間的掉單。一旦出現(xiàn),則會出現(xiàn)長款(即銀行不應該結(jié)算而實際結(jié)算)的現(xiàn)象,對于因日切導致的差異,在第二天的對賬中系統(tǒng)會對平,其他原因的,需要技術排查。

  • 支付系統(tǒng)資金流有,而銀行沒有的差異,可能是因為銀行日切早于支付系統(tǒng)的核心賬務系統(tǒng),一旦出現(xiàn),會出現(xiàn)短款(銀行應結(jié)算而實際未結(jié)算)的現(xiàn)象,銀行日切導致段差異,會在下一天與銀行的勾對中,將此筆差異勾對上,如果是非日切導致的原因,就需要找銀行追款了。

總結(jié)就是,業(yè)務對賬,即信息流對賬,支付系統(tǒng)的交易流水與銀行的交易流水間核對,保障支付交易完整入賬。資金對賬,即資金流對賬,支付系統(tǒng)的入賬流水與銀行的結(jié)算流水間核對,保障銀行入賬流水與實際入賬資金的匹配。

結(jié)算流程

在清結(jié)算部分,系統(tǒng)按照設定好的清結(jié)算規(guī)則自動將錢款結(jié)算給商戶。完善的運營會計體系幫助財務進行精細化核算,提高財務效率。與支付渠道自動進行對賬,確保賬務正確,在異常情況下能及時定位問題并處理。系統(tǒng)更是能對商戶進行個性化的費率配置或賬期配置,方便靈活。系統(tǒng)的價值不僅體現(xiàn)在支付清結(jié)算方面,同時更是提升了運營管理效率。支付清結(jié)算系統(tǒng)可以有效幫助運營、財務、開發(fā)以及管理人員。對于運營人員,系統(tǒng)可幫助處理平臺的運營工作,包括各類支付管理,商戶、會員管理,營銷活動的數(shù)據(jù)統(tǒng)計等,全面提高運營效率。針對財務人員,可以協(xié)助完成資金對賬、會計處理,出入款管理,賬務差錯處理等,大部分工作由系統(tǒng)自動處理,減少人工處理,提高資金處理效率。一套靈活便捷的配置后臺供開發(fā)人員快速調(diào)整系統(tǒng)以適應新的業(yè)務,并能方便對系統(tǒng)進行維護,如渠道接入、費率配置、賬期調(diào)整等,提高開發(fā)效率。系統(tǒng)提供資金流轉(zhuǎn)過程中各個環(huán)節(jié)的數(shù)據(jù),能夠從各個維度進行核算和分析,形成對管理人員的決策支持,從而提高決策效率。

03

關鍵表設計

04

支付系統(tǒng)要點

在支付系統(tǒng)中,支付網(wǎng)關和支付渠道的對接是最繁瑣重要的功能之一,其中支付網(wǎng)關是對外提供服務的接口,所有需要渠道支持的資金操作都需要通過網(wǎng)關分發(fā)到對應的渠道模塊上。一旦定型,后續(xù)就很少,也很難調(diào)整。而支付渠道模塊是接收網(wǎng)關的請求,調(diào)用渠道接口執(zhí)行真正的資金操作。每個渠道的接口,傳輸方式都不盡相同,所以在這里,支付網(wǎng)關相對于支付渠道模塊的作用,類似設計模式中的wrapper,封裝各個渠道的差異,對網(wǎng)關呈現(xiàn)統(tǒng)一的接口。而網(wǎng)關的功能是為業(yè)務提供通用接口,一些和渠道交互的公共操作,也會放置到網(wǎng)關中。

支付系統(tǒng)對其他系統(tǒng),特別是交易系統(tǒng),提供的支付服務包括簽約,支付,退款,充值,轉(zhuǎn)帳,解約等。有些地方還會額外提供簽約并支付的接口,用于支持在支付過程中綁卡。 每個服務實現(xiàn)的流程也是基本類似,包括下單,取消訂單,退單,查單等操作。每個操作實現(xiàn),都包括參數(shù)校驗,支付路由,生成訂單,風險評估,調(diào)用渠道服務,更新訂單和發(fā)送消息這7步,對于一些比較復雜的渠道服務,還會涉及到異步同通知處理的步驟。

01

網(wǎng)關前置

支付網(wǎng)關前置是對接業(yè)務系統(tǒng),為其提供支付服務的模塊。它是所有支付服務接口的集成前置,將不同支付渠道提供的接口通過統(tǒng)一的方式呈現(xiàn)給業(yè)務方。這樣接入方就只需要對接支付網(wǎng)關,增加和調(diào)整支付渠道對業(yè)務方是透明的。 支付網(wǎng)關前置的設計對整個支付系統(tǒng)的穩(wěn)定性、功能、性能以及其他非功能性需求有著直接的影響。

在支付網(wǎng)關中需要完成大量的操作,為了保證性能,這些操作都盡量異步化來處理。支付網(wǎng)關前置應保持穩(wěn)定,盡量減少系統(tǒng)重啟等操作對業(yè)務方的影響。支付網(wǎng)關也避免不了升級和重啟。這可通過基于Nginx的LBS(Load Balance System)網(wǎng)關來解決。LBS在這里有兩個作用: 一個是實現(xiàn)負載均衡,一個是隔離支付網(wǎng)關重啟對調(diào)用的影響。 支付網(wǎng)關也采用多臺機器分布式部署,重啟時,每個服務器逐個啟動。某臺服務器重啟時,首先從LBS系統(tǒng)中取消注冊,重啟完成后,再重新注冊到LBS上。這個過程對調(diào)用方是無感知的。

為了避免接口受攻擊,在安全上,還得要求業(yè)務方通過HTTPS來訪問接口,并提供防篡改機制。防篡改則通過接口參數(shù)簽名來處理?,F(xiàn)在主流的簽名是對接口參數(shù)按照參數(shù)名稱排序后,做加密和散列,參考微信的簽名規(guī)范。

02

參數(shù)校驗

  • 所有的支付操作,都需要對輸入執(zhí)行參數(shù)校驗,避免接口受到攻擊。

  • 驗證輸入?yún)?shù)中各字段的有效性驗證,比如用戶ID,商戶ID,價格,返回地址等參數(shù)。

  • 驗證賬戶狀態(tài)。交易主體、交易對手等賬戶的狀態(tài)是處于可交易的狀態(tài)。

  • 驗證訂單:如果涉及到預單,還需要驗證訂單號的有效性,訂單狀態(tài)是未支付。為了避免用戶緩存某個URL地址,還需要校驗下單時間和支付時間是否超過預定的間隔。

  • 驗證簽名。簽名也是為了防止支付接口被偽造。 一般簽名是使用分發(fā)給商戶的key來對輸入?yún)?shù)拼接成的字符串做MD5 Hash或者RSA加密,然后作為一個參數(shù)隨其他參數(shù)一起提交到服務器端。

03

路由選擇

根據(jù)用戶選擇的支付方式確定用來完成該操作的合適的支付渠道。用戶指定的支付方式不一定是最終的執(zhí)行支付的渠道。比如用戶選擇通過工行信用卡來執(zhí)行支付,但是我們沒有實現(xiàn)和工行的對接,而是可以通過第三方支付,比如支付寶、微信支付、易寶支付,或者銀聯(lián)來完成。那如何選擇合適的支付渠道,就通過支付路由來實現(xiàn)。支付路由會綜合考慮收費、渠道的可用性等因素來選擇最優(yōu)方案

04

風險評估

檢查本次交易是否有風險。風控接口返回三種結(jié)果:阻斷交易、增強驗證和放行交易。

  • 阻斷交易,說明該交易是高風險的,需要終止,不執(zhí)行第5個步驟;

  • 增強驗證,說明該交易有一定的風險,需要確認下是不是用戶本人在操作。這可以通過發(fā)送短信驗證碼或者其他可以驗證用戶身份的方式來做校驗,驗證通過后,可以繼續(xù)執(zhí)行該交易。

  • 放行交易,即本次交易是安全的,可以繼續(xù)往下走。

05

發(fā)送消息

通過消息來通知相關系統(tǒng)關于訂單的變更。風控,信用BI等,都需要依賴這數(shù)據(jù)做準實時計算。

06

更新訂單

對于同步返回的結(jié)果,需要在主線程中更新訂單的狀態(tài),標記是支付成功還是失敗。對于異步返回的渠道,需要在異步程序中處理。

07

異步通知

其中涉及到調(diào)用遠程接口,其延遲不可控。如果調(diào)用方一直阻塞等待,很容易超時。引入異步通知機制,可以讓調(diào)用方在主線程中盡快返回,通過異步線程來得到支付結(jié)果。對于通過異步來獲取支付結(jié)果的渠道接口,也需要對應的在異步通知中將結(jié)果返回給調(diào)用方。 異步通知需要調(diào)用方提供一個回調(diào)地址,一般以http或者https的方式。這就有技術風險,如果調(diào)用失敗,還需要重試。而重試不能過于頻繁,需要逐步拉大每一次重試的時間間隔。 在異步處理程序中,訂單根據(jù)處理結(jié)果變更狀態(tài)后,也要發(fā)消息通知相關系統(tǒng)。

08

生成交易訂單

將訂單信息持久化到數(shù)據(jù)庫中。當訪問壓力大的時候,數(shù)據(jù)庫寫入會成為一個瓶頸。

09

交易流水和記賬

每一筆交易都需要記錄流水,并登記到個人和機構(gòu)的分戶賬戶上,統(tǒng)計和分析也需要根據(jù)交易流水來更新相關數(shù)據(jù)。 而個人和機構(gòu)賬戶總額更新、交易流水記錄以及庫存的處理,更是需要事務處理機制的支持。 從性能角度, 可以弱化了事務處理的要求,采用消息機制來異步化和交易相關的數(shù)據(jù)處理。

  • 在支付網(wǎng)關前置的主流程中,僅記錄交易流水,即將當前的請求保存到數(shù)據(jù)庫中。

  • 完成數(shù)據(jù)記錄后,發(fā)送MQ出來,記賬、統(tǒng)計、分析,都是接收MQ來完成數(shù)據(jù)處理。

  • 涉及到本地資金支付,比如錢包支付,會需要分布式事務處理,扣減賬號余額,記賬,扣減庫存等,每個操作失敗,都要回滾。阿里有很不錯的分享,這里不詳細描述。

  • 當交易量上來后,需要考慮交易表的分表分庫的事情。分表分庫有兩個策略,按照流水號或者交易主體id來走。后者可以支持按用戶來獲取交易記錄。我們用的是前者。后者可以走elastic,確保數(shù)據(jù)庫專用。風控,信用和統(tǒng)計所需要的數(shù)據(jù),通過MQ同步到歷史庫里面。作為支付系統(tǒng)最有價值的數(shù)據(jù),在存儲上做到專庫專用,無可厚非,畢竟存儲成本還是廉價的。

10

支付路由

支付路由是一個復雜的話題。對支付系統(tǒng)來說,能支持的支付方式越多越好,不能由于支付方式的不支持斷了財路。現(xiàn)實中的支付方式多得難以置信。用戶隨時甩出一張你聽都沒聽說過的卡。如果一個銀行卡只有幾個用戶在用,那針對這個卡開發(fā)個對接有點得不嘗失?,F(xiàn)在第三方支付的爆發(fā),確實給開發(fā)支付系統(tǒng)省了不少事。但是公司不可能只對接一個第三方支付,如果這個渠道出問題了,或者鬧矛盾了,把鏈接給掐了,老板還不欲哭無淚??傊脤佣鄠€渠道。對于交易量大的銀行,還得考慮直聯(lián)。

11

渠道接入

對于支付渠道,首先考慮的是接入哪些渠道。要對接的渠道按優(yōu)先級有:

  • 第三方支付,對大部分應用來說,支付寶和微信支付都是必須的,一般來說,這兩者可以占到90%以上的交易量。用戶不需要綁卡,授權后直接支付就行。各種平臺都支持,性能和穩(wěn)定性都不錯。對于一些特殊業(yè)務,比如游戲,企業(yè)支付,可以查看一些專用的第三方支付平臺。

  • 銀聯(lián),它的存在,極大方便了和銀行的對接。和第三方支付主要不同在兩個地方一是需要綁卡,也就是用戶先把卡號,手機,身份證號提供出來。這一步會折損不少用戶。綁卡后,以后的支付操作就簡單了,用戶只需要輸入密碼就行。手機客戶端不需要像第三方支付那樣安裝SDK,都在服務器端完成。當然,這是針對快捷支付。網(wǎng)銀支付還是挺麻煩的。銀聯(lián)接入也需要ADSS認證。

  • 銀行:2018年2月9日銀監(jiān)會公布了最新權威數(shù)字:一共【4549家】開發(fā)性金融機構(gòu)1家:國家開發(fā)銀行;政策性銀行2家:進出口銀行、農(nóng)業(yè)發(fā)展銀行;5大國有銀行:工、建、農(nóng)、中、交;郵儲銀行1家;全國性股份制商業(yè)銀行12家:招行、中信、興業(yè)、民生、浦發(fā)、光大、廣發(fā)、華夏、平安、浙商、渤海、恒豐;金融資產(chǎn)管理公司4家:信達、華融、長城、東方四大AMC;城商行134家;住房儲蓄銀行1家;民營銀行17家,如網(wǎng)商銀行;農(nóng)商行1262家;農(nóng)村合作銀行33家;農(nóng)村信用社965家;村鎮(zhèn)銀行1562家;貸款公司13家;農(nóng)村資金互助社48家;外資法人銀行39家;信托公司68家;金融租賃公司69家;企業(yè)集團財務公司247家;汽車金融公司25家;消費金融公司22家;貨幣經(jīng)紀公司5家;其他金融機構(gòu)14家。一般對接一個銀行預計有3周左右的工作量,大部分銀行需要專線接入,費用和帶寬有關,一年也得幾萬費用。不同銀行對接入環(huán)境有不同要求,這也是成本。

  • 手機支付:比如蘋果的In-App支付, 三星支付、華為支付等, 這些支付僅針對特定的手機型號, 支持NFC等,根據(jù)業(yè)務需要也可以接入。

總結(jié)

支付系統(tǒng)是一個繁雜的系統(tǒng),其中涉及了各種錯綜復雜的業(yè)務流程,以上只是簡單介紹了支付系統(tǒng)我們能看見的一些問題和設計,還有后續(xù)的系統(tǒng)保障沒有寫出來,沒寫出來的才是關鍵部分,比如:支付系統(tǒng)監(jiān)控(業(yè)務監(jiān)控分類、渠道監(jiān)控、商戶監(jiān)控、賬戶監(jiān)控)文章只是引子, 架構(gòu)不是靜態(tài)的,而是動態(tài)演化的。只有能夠不斷應對環(huán)境變化的系統(tǒng),才是有生命力的系統(tǒng)。所以即使你掌握了以上所有的業(yè)務細節(jié),仍然需要演化式思維,在設計的同時,借助反饋和進化的力量推動架構(gòu)的持續(xù)演進。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多