XxPay支付系統-boot版本了解一下


了解一下

之前看了龍果支付系統,也沒看透,用公司框架改寫,然后就改的比較亂😂,主要是沒有結合公司框架的優點,就想重新整理以下,想起來之前還有個 XxPay 沒看,然后看了下,有三個版本:

  • spring boot 版本;
  • spring cloud 版本;
  • dubbo 版本。

比較喜歡 spring,然后看了 spring cloud,因為沒學,所以沒看懂哈哈哈,因為之前看過一點 spring boot,就決定是他了。

注意:這篇只是一個小屁孩隨便寫的文章,不要當真哈😏

傳送門

與龍果支付系統比較

優勢

  1. 好看
  2. 代碼優美
  3. 前沿框架

劣勢

業務不完整

  1. 沒有對賬功能
  2. 沒有平台資金賬戶
  3. 沒有平台收款,不能用費率收過路費
  4. 沒有商戶后台

XxPay 支付系統 - boot 版本

其實我就下載下來運行了一次后台管理系統,支付什么的沒試過😂,現在我用別的框架改版后的試過支付是可以的。

下載

碼雲
Github
隨便下載下來,里面是包含所有版本的。我從碼雲下載吧,解壓:

clipboard.png

看看 README.md 里面描述的框架結構:

clipboard.png

先來個簡單的 spring boot 版本:
xxpay-master
├── xxpay4spring-boot -- 支付網關,完成支付下單查詢通知等業務,支付的核心
├── xxpay-common -- 公共模塊,各種枚舉常量工具類
├── xxpay-dal -- 數據持久層,數據庫的增刪改查
├── xxpay-mgr -- 運營管理平台,支付系統管理員后台
├── xxpay-shop -- 演示商城,測試案例不屬於支付系統

安裝數據庫

在解壓目錄有一個 init_db.sql ,新建數據庫,運行這個腳本:

clipboard.png

eclipse 導入項目

右鍵 import -> maven -> existing maven projects :

clipboard.png

只導入 boot 版本代碼。

運行管理后台試試

支付系統管理后台,xxpay-mgr,

1 修改數據庫配置
spring boot 結構:
├── src/main/java -- java 代碼
├── src/main/resource -- 放置spring boot 的配置其他配置以及web靜態資源視圖資源等

修改 src/main/resource 下 application.properties 中的數據庫配置:

clipboard.png

配置中 server.port=8092 是 tomcat 運行的端口,

2 運行 src/main/java 下 XxPayMgrApplication 入口程序:

clipboard.png

3 訪問測試
打開瀏覽器,訪問localhost:8092

clipboard.png

clipboard.png

添加個商戶信息試試:

clipboard.png

添加個支付渠道試試:

clipboard.png

clipboard.png

clipboard.png

關於參數
支付的時候,網關(xxpay4spring-boot)會取商戶在第三方支付系統的配置:

clipboard.png

clipboard.png

那個 certLocalPath 應該是微信退款的時候用的證書,存儲在 xxpay 支付平台,但是沒有上傳保存證書的功能,不知道其他版本有沒有,不上傳,其他微信下單,查詢訂單還是可以用的.

運行 XxPay 支付網關試試

1 修改數據庫:

clipboard.png

2 啟動入口:

clipboard.png

日志最后那個 “Failed to connect to ..” activeMQ沒啟動,啟動之后顯示:“Successfully connected to tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=0”。這里必須要啟動,才能測試,之前不用額外啟動一個activemq就可以,不知道為甚惡魔不行了??如果不行那就下載activeMQ,啟動ActiveMQ吧,或者用 rabbitmq:

clipboard.png

3 瀏覽器測試
crtl 包下面的是 Controller ,PayOrderController 是下單的
clipboard.png

我用Postman請求 http://localhost:3020/api/pay/create_order ,json 請求,必須要有內容:

clipboard.png

clipboard.png

啟動成功。

運行演示商城試試

演示商城是商戶對接 xxpay 的案例,

1 修改 數據庫配置:

clipboard.png

2 運行boot入口

clipboard.png

查看 controller 里面的代碼,

clipboard.png

3 瀏覽器訪問測試
http://localhost:8081/goods/openQrPay.html

clipboard.png

解析

統一下單

二維碼統一下單,二維碼是個包含金額的跳轉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 體請求。

clipboard.png

consumes 是請求頭必須是 json,produces 是響應類型,兩個都是APPLICATION_JSON_VALUE,即都是json類型

2 驗證參數
網關接收到請求后,先驗證參數:

clipboard.png

先驗證公共必填項參數:

clipboard.png

再根據渠道進行相應必填項的驗證,普通商戶公眾號支付,必須要有 openid:

clipboard.png

這里 xxpay 僅支持境內普通商戶的對接使用,不支持境外或者服務商,

再驗證商戶信息和商戶渠道是否存在且可用,沒有被凍結,然后驗證簽名,封裝訂單jsonObject。

如果驗證不通過,返回字符串,否則返回 jsonObject,驗證后返回的對象是 字符串 則響應錯誤信息,否則繼續。

clipboard.png

3 創建訂單
如果驗證返回 jsonObject,則創建支付訂單

clipboard.png

4 根據相應的渠道編碼處理支付

clipboard.png

這幾個都是相應支付渠道請求處理結果的封裝處理,所以方法都是一個do...Req(),這邊可以將開發完成的渠道加進來,未開發完成的,注釋掉,這樣就會走 default:不支持的支付渠道類型。

5 微信支付請求結果封裝返回
執行 payOrderService.doWxPayReq(PayConstant.WxConstant.TRADE_TYPE_JSPAI, payOrder, payContext.getString("resKey"));
用戶信息中有兩個 key:reqKey 和 resKey,分別是商戶請求 xxpay 時加密的密鑰和 xxpay 響應或通知商戶時加密的密鑰。

6 執行微信請求

clipboard.png

微信統一下單:

clipboard.png

根據不同渠道處理返回的結果:

clipboard.png

處理的結果都放在了 map 里面,這里叫他 wxMap,createBizResult 是創建一個新的 map,假如叫 resultMap,把結果 wxMap放到 resultMap,key 為 bizResult,resultMap 還會放入成功業務代碼,

clipboard.png

7 根據 resultMap 返回支付結果
mkRet(Map) 方法是獲取 map 中 bizResult 字符串,必須是業務代碼為成功,且 bizResult 鍵不為空,字符串才不為空

clipboard.png

XXPayUtil.makeRetMap(..)是創建支付響應結果 Map,這里是創建成功的結果 map,並把微信請求業務結果 bizResult map 中的鍵值放入響應結果 Map 中,然后加密返回json字符串。

8 商戶驗簽等處理,執行公眾號請求
前端執行微信支付:

clipboard.png

9 xxpay 接收微信服務器通知

clipboard.png

10 微信通知處理,驗簽、更新訂單、商戶通知

clipboard.png

11 MQ接收並發送商戶通知
若未收到 商戶 success 回復,則繼續通知,最多5次,有一定時間間隔

clipboard.png

改造一下

加上其他的支付

clipboard.png

第三方返回錯誤
第三方支付返回錯誤時,也把錯誤返回給商戶

clipboard.png

還有其他
時間太久了記不清了哈哈哈哈!

發布

可以運行 maven 命令 package 打包,會打包成 jar,放在服務器上運行,也可以打包成 war,如下:
1 packaging 改成 war

clipboard.png

2 添加依賴

<!--因配置外部TOMCAT 而配置-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

3 修改入口程序

clipboard.png

4 打包
運行 maven 命令

package

打包出來的就是 war 包了,可以放到 tomcat 里面運行,修改之后的項目,不用再改回來,依然可以運行 main 入口來啟動項目。

另一個問題

spring boot 打包 war,放到 tomcat 下,一個可能不會出現問題,一個 tomcat 里面放多個 spring boot 打包的 war 可能會出現奇怪問題,可以在 spring boot 項目里的 yml 配置文件里添加 spring.jmx.default-domain 來區分不同的 spring boot 項目:

clipboard.png

看看效果

系統管理后台

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

里面的賬號信息已經被我修改過了是假的賬號,就不要費心思了😂

商家后台

clipboard.png

clipboard.png

用到的技術

大體用到

  • beetl模板 + beetlSQL
  • layui
  • spring boot
  • activeMQ

還有很多有趣的工具類,都在 XXPay 開源的支付項目里,可以自己研究。

想要源碼

想要源碼是不可能的了,這輩子不可能給你們源碼了,嘿嘿,皮這一下很開心o( ̄▽ ̄)o,因為個人成果屬於公司,就不分享了,其實,XxPay 已經開源了,我就小改了一下,之前開寫過一片關於龍果支付的文章,龍果支付系統也挺好的,大家可以研究研究,本來這篇筆記早就該寫完了,因為我懶啊,一直在玩王者榮耀哈哈哈哈。

            </div>

原文地址:https://segmentfault.com/a/1190000016987391


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM