大家好,我是隱墨星辰,自從《百圖解碼支付系統設計與實現》專欄中的文章《圖解支付報文網關:一種低代碼報文網關的設計思路與核心代碼實現》發表以來,不少同學留言或私信問我如何實現,說是雖然看懂了思路,但是還是不知道如何寫代碼,所以周末抽空實現了核心模塊的代碼,貢獻出來給大家。
1. 效果
只需要手寫幾個配置文件,就可以快速接入一個渠道。如果有能力的話,可以自行擴展后臺界面,就可以形成產品化接入,連配置文件也不需要寫,只需要在后臺管理界面上輸入變量和映射就行。
1.1. 幾個配置文件
一共只需要幾個配置文件:
- 接口配置文件:定義接口名稱,報文格式類型,報文模板等。
- 機構/渠道參數配置文件:與渠道交互使用的host,url,apiKey,商戶號等。
- 密鑰配置文件:簽名私鑰,驗簽公鑰,加解密密鑰等配置。
詳細如下:
- 渠道接口配置文件(生產上建議保存在數據庫):
其中requestMessageTemplate的內容如下:
- 機構/渠道配置(生產上建議保存在數據庫):
- 簽名私鑰配置(生產建議放在密鑰中心)
驗簽公鑰配置(生產建議放在密鑰中心)
1.2. 外發請求與處理簡要說明
以系統運行日志為例子說明,這樣更直觀。
其中渠道報文是拿的一個公共渠道做了一點修改。大家可以拿支付寶或微信支付做實驗。
- 內部應用調用網關的完整請求參數(GatewayRequest):
- 內部應用發送外部渠道的參數示例(只包括requestContext):
- 發給渠道前需要組裝的報文模板(requestMessageTemplate):
- 組裝后將要發給渠道的報文(assembledRequestMessage):
- 渠道返回的原始報文:
- 根據模板轉成內部參數:
- 轉換后返回內部應用的參數(GatewayResponse):
2. 設計思路
參考《百圖解碼支付系統設計與實現》專欄文章:
《圖解支付報文網關:一種低代碼報文網關的設計思路與核心代碼實現》
《圖解支付渠道網關(一):不只是對接渠道的接口》
《圖解支付渠道網關(二):不只是對接渠道的接口》
使用責任鏈串起各處理器:
報文網關的整體架構圖:
渠道網關的整體架構圖:
3. 工程說明
如下圖所示。
4. 如何獲取源碼
留言或私信。
5. 小結
報文網關有四層境界:
1)直接java手寫,一個接口一段代碼。
2)使用模板方法,定義好主流程,每個接口實現特定的函數。
3)低代碼模式(本次實現),寫好核心框架,通過寫配置文件接入渠道。
4)產品化,通過后臺管理界面配置接口完成渠道接入。
第4層境界,需要更好抽象,更多的前后端資源,留待各位自行去探尋。我帶領團隊實現過第4層,如果對第4層有興趣,可私聊。
項目代碼寫得很簡潔精煉,如果有同學所在公司的網關還處在第1、2層,可以直接拿回去修改一下就能用起來。如果已經到了第3層,但是準備重構,可以拿回去參考一下。說不定能為上半年的好績效做點貢獻。
周末有時間再寫篇文章給大家拆解里面的源碼和實現原理。
這是《百圖解碼支付系統設計與實現》專欄系列文章中的第(32)篇。歡迎和我一起深入解碼支付系統的方方面面。
系列文章PDF合集,不定時更新:
Github:GitHub - yinmo-sc/Decoding-Payment-System-Book: 百圖解碼支付系統設計與實現
百度網盤:百圖解碼支付系統設計與實現_免費高速下載|百度網盤-分享無限制
公眾號:隱墨星辰。