XxPay支付系统-boot版本 使用

https://segmentfault.com/a/1190000016987391?utm_source=tag-newest

有三个版本:

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

传送门

与龙果支付系统比较

优势

  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 支付系统 - 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

转载于:https://www.cnblogs.com/jackking/p/10067418.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值