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

瞭解一下

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

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

比較喜歡 spring,而後看了 spring cloud,由於沒學,因此沒看懂哈哈哈,由於以前看過一點 spring boot,就決定是他了。前端

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

傳送門

與龍果支付系統比較

優點

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

劣勢

業務不完整git

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

XxPay 支付系統 - boot 版本

其實我就下載下來運行了一次後臺管理系統,支付什麼的沒試過😂,如今我用別的框架改版後的試過支付是能夠的。github

下載

碼雲
Github
隨便下載下來,裏面是包含全部版本的。我從碼雲下載吧,解壓:web

clipboard.png

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

clipboard.png

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

安裝數據庫

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

clipboard.png

eclipse 導入項目

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

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 已經開源了,我就小改了一下,以前開寫過一片關於龍果支付的文章,龍果支付系統也挺好的,你們能夠研究研究,原本這篇筆記早就該寫完了,由於我懶啊,一直在玩王者榮耀哈哈哈哈。

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

相關文章
相關標籤/搜索