了解一下
之前看了龙果支付系统,也没看透,用公司框架改写,然后就改的比较乱?,主要是没有结合公司框架的优点,就想重新整理以下,想起来之前还有个 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 已经开源了,我就小改了一下,之前开写过一片关于龙果支付的文章,龙果支付系统也挺好的,大家可以研究研究,本来这篇笔记早就该写完了,因为我懒啊,一直在玩王者荣耀哈哈哈哈。