系統目標:
對接第三方支付系統 爲系統平臺提供統一的支付中間件.php
技術棧使用狀況:
Springboot + mybaties + redis + rocketMQ + mysql.mysql
總體設計中,有如下幾個原則redis
統一,兼顧方便sql
首要是統一, 對各類應用提供統一使用入口,其次是方便,不須要額外的入侵便可使用支付功能api
接口的升級或改動須要兼容歷史版本安全
易拓展服務器
支持拓展其餘支付方式接入以及將來本身實現支付功能微信
支持,而不是決策app
不替使用方應用決策,不摻雜使用方應用和其餘模塊業務邏輯處理 (必須傳遞消息時使用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 |
操做失敗 |