個人梳理如有不對 請及時指正 歡迎大家 編輯更新此文檔
系統目標
系統目標:
對接第三方支付系統 為系統平台提供統一的支付中間件.
技術棧使用情況:
Springboot + mybaties + redis + rocketMQ + mysql.
支付系統設計原則和思路
整體設計中,有以下幾個原則
統一,兼顧方便
首要是統一, 對各種應用提供統一使用入口,其次是方便,不需要額外的入侵即可使用支付功能
接口的升級或改動需要兼容歷史版本
易拓展
支持拓展其他支付方式接入以及未來自己實現支付功能
支持,而不是決策
不替使用方應用決策,不摻雜使用方應用和其他模塊業務邏輯處理 (必須傳遞消息時使用MQ 解耦)
少即是多, 側重成長性, 慎重修改API
每添加一個字段(接口)都要謹慎, 加后無法再刪, 對擴展開放, 修改封閉
同一個接口 不同的參數可以實現不同的功能 如 getPayInfo 帶 支付方式 需要去查第三方支付狀態
支付系統目前流程
支付系統主流程
這期間發生了什么?
准備工作: 賬單結算完成,調用生成支付信息接口.
第一步 : 客戶端點擊確認支付 —> 請求后台預支付接口(檢查訂單狀態 )
第二步: 根據后台返回狀態碼 做后續處理
第三步: 可以拉起支付時 —> 拉起支付讓用戶選擇支付方式 —> 請求支付接口(檢查訂單狀態,獲取SDK 需要的簽名 )
第四步: 后台返回正確的簽名 客戶端拉起第三方支付 SDK 界面
第五步: 用戶使用支付工具 成功付款
第六步: 客戶端顯示支持成功並查詢后台支付狀態(如果異步回調未到后台 主動查詢第三方並更新訂單支付信息)
那么處理階段到底做了什么呢?
這里在講下微信和支付寶 官網描述的支付流程
微信官網這樣說:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_3&index=5
第三步和第四步詳細講過程如下:
1.支付系統和微信后台交互生成訂單,微信后台給業務服務器一個預交易訂單號
2.支付系統給你的App預交易訂單號和簽名信息—> App去調起微信支付
3.App聽過微信SDK 調起微信App支付,微信App把預交易訂單號和訂單簽名信息給傳給 微信服務器
4.微信App接收微信服務器支付結果 , 微信App告知App支付支付結果,同時微信后台異步告知支付系統支付結果
整個故事情節大概是這樣的
支付寶官網這樣說:
梳理一下步驟:
1.支付系統做好訂單信息,安全簽名后發給App(支付系統負責RSA加密)
2.App拿着訂單信息和簽名,通過SDK調起支付寶App ,支付寶 app去請求支付寶服務器 完成支付(支付寶 App解密訂單信息,確認訂單安全)
3.支付寶App通知 客戶端的App支付完成;同時,支付寶后台服務異步通知支付系統后台支付完成)
整個流程涉及到你和支付寶雙方的App,雙方的后台服務器,故事情節大概可以這樣理解
奉上支付寶 開發者文檔: https://docs.open.alipay.com/api_1/alipay.trade.pay/
個人梳理如有不對 請及時指正 歡迎大家 編輯更新此文檔
PS. 支付返回狀態碼
狀態碼
|
msg
|
---|---|
0 | 支付成功 |
411 |
訂單已支付 |
413 |
訂單已關閉 |
415 |
校驗訂單信息失敗(未到支付狀態/未查詢到訂單) |
420 |
支付渠道錯誤 |
421 |
MQ廣播通知錯誤 |
999 |
操作失敗 |