本文轉(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)包括如下功能:
02 核心流程 支付系統(tǒng)有幾個關鍵的核心流程:支付流程、對賬流程、結(jié)算流程 支付流程 支付流程說明
一般而言支付系統(tǒng)會給商戶設置有“可用余額”賬戶、“待結(jié)算”賬戶;系統(tǒng)在接收到銀行返回支付成功信息會進行落地處理,一方面更改對應訂單狀態(tài),另一方面在商戶待結(jié)算賬戶記入一筆金額;該筆金額,系統(tǒng)會根據(jù)結(jié)算周期從待結(jié)算賬戶--->“可用余額”賬戶。 退款流程說明
對于收單金額未結(jié)算,還在“待結(jié)算”賬戶的訂單,如果出現(xiàn)退款情況,業(yè)務流程和上述流程差不多,只是從待結(jié)算賬戶進行扣款。 對賬流程 說明 對賬,我們一般稱為勾兌,支付系統(tǒng)的對賬,包含著兩個層面:
支付系統(tǒng)與渠道間的對賬 系統(tǒng)間的對賬比較好理解,這里主要講支付系統(tǒng)與渠道間的對賬。支付系統(tǒng)與渠道間的對賬,又包含2個維度:
說了這么多,就出現(xiàn)來4個對賬文件,支付系統(tǒng)信息流文件、支付系統(tǒng)資金流文件、銀行信息流文件、銀行資金流文件。業(yè)務對賬(勾兌)就是支付系統(tǒng)的信息流文件與銀行的信息流文件勾兌,資金對賬即支付系統(tǒng)的資金流文件與銀行的資金流文件勾兌。 核對的差異處理 1、信息流勾對的差異處理
2、資金流勾對對差異處理
總結(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ù)校驗
03 路由選擇 根據(jù)用戶選擇的支付方式確定用來完成該操作的合適的支付渠道。用戶指定的支付方式不一定是最終的執(zhí)行支付的渠道。比如用戶選擇通過工行信用卡來執(zhí)行支付,但是我們沒有實現(xiàn)和工行的對接,而是可以通過第三方支付,比如支付寶、微信支付、易寶支付,或者銀聯(lián)來完成。那如何選擇合適的支付渠道,就通過支付路由來實現(xiàn)。支付路由會綜合考慮收費、渠道的可用性等因素來選擇最優(yōu)方案 04 風險評估 檢查本次交易是否有風險。風控接口返回三種結(jié)果:阻斷交易、增強驗證和放行交易。
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ù)處理。
10 支付路由 支付路由是一個復雜的話題。對支付系統(tǒng)來說,能支持的支付方式越多越好,不能由于支付方式的不支持斷了財路。現(xiàn)實中的支付方式多得難以置信。用戶隨時甩出一張你聽都沒聽說過的卡。如果一個銀行卡只有幾個用戶在用,那針對這個卡開發(fā)個對接有點得不嘗失?,F(xiàn)在第三方支付的爆發(fā),確實給開發(fā)支付系統(tǒng)省了不少事。但是公司不可能只對接一個第三方支付,如果這個渠道出問題了,或者鬧矛盾了,把鏈接給掐了,老板還不欲哭無淚??傊脤佣鄠€渠道。對于交易量大的銀行,還得考慮直聯(lián)。 11 渠道接入 對于支付渠道,首先考慮的是接入哪些渠道。要對接的渠道按優(yōu)先級有:
總結(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ù)演進。 |
|
來自: 年年有俞otk8ql > 《數(shù)字政府》