支付系统整体设计:整体架构设计以及注意要点(一)
016-11-23 01:43:00?
來源:?鳳凰牌老熊 導讀:?在支付系統中,支付網關和支付渠道的對接是最核心的功能。其中支付網關是對外提供服務的接口,所有需要渠道支持的資金操作都需要通過網關分發到對應的渠道模塊上。一旦定型,后續就很少,也很難調整。而支付渠道模塊是接收網關的請求...
在支付系統中,支付網關和支付渠道的對接是最核心的功能。其中支付網關是對外提供服務的接口,所有需要渠道支持的資金操作都需要通過網關分發到對應的渠道模塊上。一旦定型,后續就很少,也很難調整。而支付渠道模塊是接收網關的請求,調用渠道接口執行真正的資金操作。每個渠道的接口,傳輸方式都不盡相同,所以在這里,支付網關相對于支付渠道模塊的作用,類似設計模式中的wrapper,封裝各個渠道的差異,對網關呈現統一的接口。而網關的功能是為業務提供通用接口,一些和渠道交互的公共操作,也會放置到網關中。
功能概述
支付系統對其他系統,特別是交易系統,提供的支付服務包括簽約,支付,退款,充值,轉帳,解約等。有些地方還會額外提供簽約并支付的接口,用于支持在支付過程中綁卡。 每個服務實現的流程也是基本類似,包括下單,取消訂單,退單,查單等操作。每個操作實現,都包括參數校驗,支付路由,生成訂單,風險評估,調用渠道服務,更新訂單和發送消息這7步,對于一些比較復雜的渠道服務,還會涉及到異步同通知處理的步驟。這里詳細介紹這些步驟的實現要點。
1. 執行參數校驗
所有的支付操作,都需要對輸入執行參數校驗,避免接口受到攻擊。
● 驗證輸入參數中各字段的有效性驗證,比如用戶ID,商戶ID,價格,返回地址等參數。
● 驗證賬戶狀態。交易主體、交易對手等賬戶的狀態是處于可交易的狀態。
● 驗證訂單:如果涉及到預單,還需要驗證訂單號的有效性,訂單狀態是未支付。為了避免用戶緩存某個URL地址,還需要校驗下單時間和支付時間是否超過預定的間隔。
● 驗證簽名。簽名也是為了防止支付接口被偽造。 一般簽名是使用分發給商戶的key來對輸入參數拼接成的字符串做MD5 Hash或者RSA加密,然后作為一個參數隨其他參數一起提交到服務器端。
2. 根據支付路由尋找合適的支付服務
根據用戶選擇的支付方式確定用來完成該操作的合適的支付渠道。用戶指定的支付方式不一定是最終的執行支付的渠道。比如用戶選擇通過工行信用卡來執行支付,但是我們沒有實現和工行的對接,而是可以通過第三方支付,比如支付寶、微信支付、易寶支付,或者銀聯來完成。那如何選擇合適的支付渠道,就通過支付路由來實現。支付路由會綜合考慮收費、渠道的可用性等因素來選擇最優方案。
3. 評估交易風險
檢查本次交易是否有風險。風控接口返回三種結果:阻斷交易、增強驗證和放行交易。
● 阻斷交易,說明該交易是高風險的,需要終止,不執行第5個步驟;
● 增強驗證,說明該交易有一定的風險,需要確認下是不是用戶本人在操作。這可以通過發送短信驗證碼或者其他可以驗證用戶身份的方式來做校驗,驗證通過后,可以繼續執行該交易。
● 放行交易,即本次交易是安全的,可以繼續往下走。
4.生成交易訂單
將訂單信息持久化到數據庫中。當訪問壓力大的時候,數據庫寫入會成為一個瓶頸。
5. 調用支付渠道提供的服務
所有的支付服務都需要第三方通道來完成執行。一般銀行渠道的調用比較簡單,可以直接返回結果。一些第三方支付,支付寶,微信支付等,會通過異步接口來告知支付結果。
6. 更新訂單
對于同步返回的結果,需要在主線程中更新訂單的狀態,標記是支付成功還是失敗。對于異步返回的渠道,需要在異步程序中處理。
7. 發送消息
通過消息來通知相關系統關于訂單的變更。風控,信用BI等,都需要依賴這數據做準實時計算。
8. 異步通知
如上述流程,其中涉及到調用遠程接口,其延遲不可控。如果調用方一直阻塞等待,很容易超時。引入異步通知機制,可以讓調用方在主線程中盡快返回,通過異步線程來得到支付結果。對于通過異步來獲取支付結果的渠道接口,也需要對應的在異步通知中將結果返回給調用方。 異步通知需要調用方提供一個回調地址,一般以http或者https的方式。這就有技術風險,如果調用失敗,還需要重試。而重試不能過于頻繁,需要逐步拉大每一次重試的時間間隔。 在異步處理程序中,訂單根據處理結果變更狀態后,也要發消息通知相關系統。
整體架構
整體軟件參考架構如下所示:
原文地址:https://blog.csdn.net/sz_bb/article/details/53300937
總結
以上是生活随笔為你收集整理的支付系统整体设计:整体架构设计以及注意要点(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java通过ftp上传文件
- 下一篇: 索尼 PSN 商店夏促开始,部分游戏低至