了解一下
之前看了龍果支付系統,也沒看透,用公司框架改寫,然后就改的比較亂😂,主要是沒有結合公司框架的優點,就想重新整理以下,想起來之前還有個 XxPay 沒看,然后看了下,有三個版本:
- spring boot 版本;
- spring cloud 版本;
- dubbo 版本。
比較喜歡 spring,然后看了 spring cloud,因為沒學,所以沒看懂哈哈哈,因為之前看過一點 spring boot,就決定是他了。
注意:這篇只是一個小屁孩隨便寫的文章,不要當真哈😏
傳送門
與龍果支付系統比較
優勢
- 好看
- 代碼優美
- 前沿框架
劣勢
業務不完整
- 沒有對賬功能
- 沒有平台資金賬戶
- 沒有平台收款,不能用費率收過路費
- 沒有商戶后台
XxPay 支付系統 - boot 版本
其實我就下載下來運行了一次后台管理系統,支付什么的沒試過😂,現在我用別的框架改版后的試過支付是可以的。
下載
碼雲
Github
隨便下載下來,里面是包含所有版本的。我從碼雲下載吧,解壓:
看看 README.md 里面描述的框架結構:
先來個簡單的 spring boot 版本:
xxpay-master
├── xxpay4spring-boot -- 支付網關,完成支付下單查詢通知等業務,支付的核心
├── xxpay-common -- 公共模塊,各種枚舉常量工具類
├── xxpay-dal -- 數據持久層,數據庫的增刪改查
├── xxpay-mgr -- 運營管理平台,支付系統管理員后台
├── xxpay-shop -- 演示商城,測試案例不屬於支付系統
安裝數據庫
在解壓目錄有一個 init_db.sql ,新建數據庫,運行這個腳本:
eclipse 導入項目
右鍵 import -> maven -> existing maven projects :
只導入 boot 版本代碼。
運行管理后台試試
支付系統管理后台,xxpay-mgr,
1 修改數據庫配置
spring boot 結構:
├── src/main/java -- java 代碼
├── src/main/resource -- 放置spring boot 的配置其他配置以及web靜態資源視圖資源等
修改 src/main/resource 下 application.properties 中的數據庫配置:
配置中 server.port=8092 是 tomcat 運行的端口,
2 運行 src/main/java 下 XxPayMgrApplication 入口程序:
3 訪問測試
打開瀏覽器,訪問localhost:8092
添加個商戶信息試試:
添加個支付渠道試試:
關於參數
支付的時候,網關(xxpay4spring-boot)會取商戶在第三方支付系統的配置:
那個 certLocalPath 應該是微信退款的時候用的證書,存儲在 xxpay 支付平台,但是沒有上傳保存證書的功能,不知道其他版本有沒有,不上傳,其他微信下單,查詢訂單還是可以用的.
運行 XxPay 支付網關試試
1 修改數據庫:
2 啟動入口:
日志最后那個 “Failed to connect to ..” activeMQ沒啟動,啟動之后顯示:“Successfully connected to tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0”。這里必須要啟動,才能測試,之前不用額外啟動一個activemq就可以,不知道為甚惡魔不行了??如果不行那就下載activeMQ,啟動ActiveMQ吧,或者用 rabbitmq:
3 瀏覽器測試
crtl 包下面的是 Controller ,PayOrderController 是下單的
我用Postman請求 http://localhost:3020/api/pay/create_order ,json 請求,必須要有內容:
啟動成功。
運行演示商城試試
演示商城是商戶對接 xxpay 的案例,
1 修改 數據庫配置:
2 運行boot入口
查看 controller 里面的代碼,
3 瀏覽器訪問測試
http://localhost:8081/goods/openQrPay.html
解析
統一下單
二維碼統一下單,二維碼是個包含金額的跳轉url:http://localhost:8081/goods/qrPay.html?amount=1,比如微信掃描二維碼,就會在微信瀏覽器里面訪問這個鏈接,商戶系統接收到請求,可以通過請求頭里的ua(User Agent)獲取瀏覽器信息,這樣判斷是微信瀏覽器還是支付寶瀏覽器,即是使用微信掃碼還是支付寶掃碼,進行相應的操作,對 xxpay 支付網關下單。
支付網關四個控制類
PayOrderController.java -- 創建支付訂單
QueryPayOrderController.java -- 查詢支付訂單
Notify4WxPayController.java -- 接收微信通知
Notify4AliPayController.java -- 接收支付寶通知
支付網關下單處理流程
以微信公眾號下單為例。
1 商戶發起請求
參考 shop 工程中,GoodsOrderController.java 的 pay 方法,向網關發起請求。可以是 key 為 params 的json字符串請求,也可以是請求頭是 json 的 json 體請求。
consumes 是請求頭必須是 json,produces 是響應類型,兩個都是APPLICATION_JSON_VALUE,即都是json類型
2 驗證參數
網關接收到請求后,先驗證參數:
先驗證公共必填項參數:
再根據渠道進行相應必填項的驗證,普通商戶公眾號支付,必須要有 openid:
這里 xxpay 僅支持境內普通商戶的對接使用,不支持境外或者服務商,
再驗證商戶信息和商戶渠道是否存在且可用,沒有被凍結,然后驗證簽名,封裝訂單jsonObject。
如果驗證不通過,返回字符串,否則返回 jsonObject,驗證后返回的對象是 字符串 則響應錯誤信息,否則繼續。
3 創建訂單
如果驗證返回 jsonObject,則創建支付訂單
4 根據相應的渠道編碼處理支付
這幾個都是相應支付渠道請求處理結果的封裝處理,所以方法都是一個do...Req(),這邊可以將開發完成的渠道加進來,未開發完成的,注釋掉,這樣就會走 default:不支持的支付渠道類型。
5 微信支付請求結果封裝返回
執行 payOrderService.doWxPayReq(PayConstant.WxConstant.TRADE_TYPE_JSPAI, payOrder, payContext.getString("resKey"));
用戶信息中有兩個 key:reqKey 和 resKey,分別是商戶請求 xxpay 時加密的密鑰和 xxpay 響應或通知商戶時加密的密鑰。
6 執行微信請求
微信統一下單:
根據不同渠道處理返回的結果:
處理的結果都放在了 map 里面,這里叫他 wxMap,createBizResult 是創建一個新的 map,假如叫 resultMap,把結果 wxMap放到 resultMap,key 為 bizResult,resultMap 還會放入成功業務代碼,
7 根據 resultMap 返回支付結果
mkRet(Map) 方法是獲取 map 中 bizResult 字符串,必須是業務代碼為成功,且 bizResult 鍵不為空,字符串才不為空
XXPayUtil.makeRetMap(..)是創建支付響應結果 Map,這里是創建成功的結果 map,並把微信請求業務結果 bizResult map 中的鍵值放入響應結果 Map 中,然后加密返回json字符串。
8 商戶驗簽等處理,執行公眾號請求
前端執行微信支付:
9 xxpay 接收微信服務器通知
10 微信通知處理,驗簽、更新訂單、商戶通知
11 MQ接收並發送商戶通知
若未收到 商戶 success 回復,則繼續通知,最多5次,有一定時間間隔
改造一下
加上其他的支付
第三方返回錯誤
第三方支付返回錯誤時,也把錯誤返回給商戶
還有其他
時間太久了記不清了哈哈哈哈!
發布
可以運行 maven 命令 package 打包,會打包成 jar,放在服務器上運行,也可以打包成 war,如下:
1 packaging 改成 war
2 添加依賴
<!--因配置外部TOMCAT 而配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3 修改入口程序
4 打包
運行 maven 命令
package
打包出來的就是 war 包了,可以放到 tomcat 里面運行,修改之后的項目,不用再改回來,依然可以運行 main 入口來啟動項目。
另一個問題
spring boot 打包 war,放到 tomcat 下,一個可能不會出現問題,一個 tomcat 里面放多個 spring boot 打包的 war 可能會出現奇怪問題,可以在 spring boot 項目里的 yml 配置文件里添加 spring.jmx.default-domain 來區分不同的 spring boot 項目:
看看效果
系統管理后台
里面的賬號信息已經被我修改過了是假的賬號,就不要費心思了😂
商家后台
用到的技術
大體用到
- beetl模板 + beetlSQL
- layui
- spring boot
- activeMQ
還有很多有趣的工具類,都在 XXPay 開源的支付項目里,可以自己研究。
想要源碼
想要源碼是不可能的了,這輩子不可能給你們源碼了,嘿嘿,皮這一下很開心o( ̄▽ ̄)o,因為個人成果屬於公司,就不分享了,其實,XxPay 已經開源了,我就小改了一下,之前開寫過一片關於龍果支付的文章,龍果支付系統也挺好的,大家可以研究研究,本來這篇筆記早就該寫完了,因為我懶啊,一直在玩王者榮耀哈哈哈哈。
</div>