瞭解一下
以前看了龍果支付系統,也沒看透,用公司框架改寫,而後就改的比較亂😂,主要是沒有結合公司框架的優勢,就想從新整理如下,想起來以前還有個 XxPay 沒看,而後看了下,有三個版本:html
- spring boot 版本;
- spring cloud 版本;
- dubbo 版本。
比較喜歡 spring,而後看了 spring cloud,由於沒學,因此沒看懂哈哈哈,由於以前看過一點 spring boot,就決定是他了。前端
注意:這篇只是一個小屁孩隨便寫的文章,不要當真哈😏java
傳送門
與龍果支付系統比較
優點
- 好看
- 代碼優美
- 前沿框架
劣勢
業務不完整git
- 沒有對帳功能
- 沒有平臺資金帳戶
- 沒有平臺收款,不能用費率收過路費
- 沒有商戶後臺
XxPay 支付系統 - boot 版本
其實我就下載下來運行了一次後臺管理系統,支付什麼的沒試過😂,如今我用別的框架改版後的試過支付是能夠的。github
下載
碼雲
Github
隨便下載下來,裏面是包含全部版本的。我從碼雲下載吧,解壓:web
看看 README.md 裏面描述的框架結構:spring
先來個簡單的 spring boot 版本:
xxpay-master
├── xxpay4spring-boot -- 支付網關,完成支付下單查詢通知等業務,支付的核心
├── xxpay-common -- 公共模塊,各類枚舉常量工具類
├── xxpay-dal -- 數據持久層,數據庫的增刪改查
├── xxpay-mgr -- 運營管理平臺,支付系統管理員後臺
├── xxpay-shop -- 演示商城,測試案例不屬於支付系統sql
安裝數據庫
在解壓目錄有一個 init_db.sql ,新建數據庫,運行這個腳本:數據庫
eclipse 導入項目
右鍵 import -> maven -> existing maven projects :json
只導入 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 已經開源了,我就小改了一下,以前開寫過一片關於龍果支付的文章,龍果支付系統也挺好的,你們能夠研究研究,原本這篇筆記早就該寫完了,由於我懶啊,一直在玩王者榮耀哈哈哈哈。