說到支付網關,首先看一下網關的定義,網關的作用是實作網路之間的通訊鏈接,包含兩個基本功能:網間連接和協議轉換, 同理,商戶業務系統中的支付板塊實作的就是商戶業務系統與銀行支付系統之間的鏈接,所起到的作用是類似的,可以被看作為一個網關,
因此,本文要講的支付網關設計,其實就是商戶業務系統的支付板塊設計,下文特指58集團支付網關的設計,但本文重在“網關”,不在“支付”,也所以,支付網關業務特性要求的功能方面就不再展開了,只介紹支付網關在通用網關設計要求上的功能部分,包括統一介面、渠道路由、安全校驗、權限校驗、IP白名單、流量削鋒、服務探活、監控報警、負載均衡等,
支付網關由來
初期,58支付系統為58集團各個業務線提供收銀臺與充值頁(支付paycenter系統)的收款功能,58財務系統(apply系統)同樣為各個業務線提供了打款功能,根據用戶及業務要求,需要提供多家銀行收付款支持,初期為了快速迭代,通過分別直接對接第三方支付的系統介面來完成功能開發,這時可以理解為第三方支付系統就是58支付體系的網關,

后期,隨著公司業務發展及商務合作,58支付系統及58財務系統需要對接多家第三方支付服務,這時候需要解決的問題是如何簡單方便接入多家第三方支付服務,另外對58支付體系的需求也發生了變化,支付網關的位置也需要進一步前移,對58支付體系提出了更高的要求,這時我們決定搭建自己的支付網關,并針對常規業務及需求抽象出通用的功能模塊,

支付網關基礎設計
1)統一介面
2)渠道路由
3)安全校驗
4)權限校驗
5)IP表名單
6)流量削峰
7)監控報警
8)服務探活
9)負載均衡
統一介面
不同的第三方支付服務,它們針對基礎的收付款功能介面,各自有自己的介面引數及回傳值格式要求,網關需要提供統一通用的介面,規定其引數及回傳值,為上層業務屏蔽第三方支付服務介面的復雜性,這就要求支付網關需要具有介面適配能力,
下圖以連連收款與易寶收款為例,展現“統一介面”設計架構與處理流程,

注:以上設計使用到配接器模式實作,
渠道路由
接著上一部分,網關該如何選擇或路由到對應的第三方支付渠道,例如是通過微信或是支付寶,或是其他第三方支付渠道,網關提供多種策略,下面簡單介紹兩種,
1)渠道id策略路由:網關接入方通過顯示傳遞渠道id方式,例如收銀臺默認選擇微信收款,則顯示傳遞給網關對應的微信渠道id,則網關通過渠道配置資訊,選擇微信渠道進行收款,
2)費率計算策略路由:如上層業務未傳遞渠道id,則網關會根據判斷,選擇費率計算策略,例如第三方支付服務A每一筆收款都將收取1元手續費;第三方支付服務B單筆收款收取0.1%元手續費,則在單筆收款金額低于1000元時,走渠道B更為劃算,反之則走渠道A更為劃算,
下圖以連連收款與易寶收款為例,展現“渠道路由”設計架構與處理流程,

注:以上設計使用到策略模式實作,
安全校驗
如何判斷網關呼叫方是否擁有網關的接入權限,我們采用校驗引數簽名的方式,
1)網關的接入方將被分配到一個接入id(parterId)及接入秘鑰(secretKey),
2)呼叫方呼叫網關介面時除了傳遞必要引數,仍將傳遞接入id,及引數簽名sign值;為了安全強度還將加入當前時間戳now作為簽名引數并作為引數并一同傳遞,用于控制安全訪問的時間范圍,
3)網關接到呼叫請求時將校驗引數簽名的合法性,
下圖以收款為例,展現“安全校驗”設計處理流程,

注:以上設計使用到請求攔截器及引數簽名校驗方式進行實作,
權限校驗
如何判斷網關呼叫方是否擁呼叫網關某一功能介面的權限,
1)網關的接入方將被分配到一個接入id(parterId),呼叫網關某一個功能介面時將作為引數進行傳遞,
2)網關接到呼叫請求時將根據權限配置,判斷對應的接入id是否擁有當前介面的訪問權限,
下圖以收款為例,展現“權限校驗”設計處理流程,

注:以上設計使用到請求攔截器實作,
IP白名單
如何判斷呼叫方請求是否來源于某一安全ip或網段,
下圖以收款為例,展現“IP白名單”設計的處理流程,

流量削峰
某些第三方支付服務介面對于一定時間內介面訪問次數存在一定限制,所以在流量高峰時,需要針對網關介面的請求進行流量削鋒,
1)根據redis zset資料結構實作時間視窗演算法邏輯,記錄一定時間視窗內網關訪問某第三方支付服務特定介面的訪問次數,
2)與該介面的單位時間內限流值配置進行比較,需要限流則放入將呼叫請求資訊放入redis佇列中,
3)異步補償模塊在流量低峰時,拉取redis佇列中的請求資訊,完成介面呼叫;再通過訊息模塊,異步通知網關的接入方呼叫結果,

注:通過redis zset實作的時間視窗演算法,此處不再展開,可自行查閱網上資料,
監控報警
網關的例外根據分類可分為業務例外及系統例外,可以采用AOP實作例外的統一捕獲并進行細化分類,通過按照不同的分類作為不同屬性,上報wmonitor實作網關的監控報警,

服務探活
第三方支付服務介面的可用性,即包括其自身可用性,往往也包括網路是否可達的問題,第三方支付服務不會主動通知網關其當前可用性資訊,所以需要網關實作探活模塊,主動進行心跳檢測,
1)通過一定時間間隔視窗訪問各個第三方支付服務查詢介面,封裝探活模塊,
2)當發現某個第三方支付服務不可用時,例外屬性上報WMonitor,進行報警;并將該服務介面標識為不可用狀態,作為支付網關的渠道路由功能的前置判斷依據,

負載均衡
關于負載均衡,支付網關不需要保證對第三方支付服務的呼叫請求進行負載均衡控制,而是由第三方支付服務介面自身保證其可靠性及健壯性,但是支付網關依然針對特殊業務場景做了一些呼叫請求的均衡作業,例如支付網關通過輪詢方式呼叫招行3臺前置機,方案也相對簡單,此處不表,
支付網關整體架構
支付網關除了上面介紹的一些通用網關的要求功能外,還有著支付體系要求的秘鑰服務、通知、配置、開放平臺、預算、推薦等基礎功能,
以下是支付網關的功能架構圖

支付網關意義及運營現狀
意義
運營現狀
文章來源:https://ishare.58corp.com/articleDetail?id=74906
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303448.html
標籤:架構設計
上一篇:“厲害了我的華為”:研發投入、發明專利數、民營企業排行皆拿下第一
下一篇:58集團支付網關設計
