XxPay支付系统-boot版本了解一下( 二 )


ler.java -- 查询支付订单
er.java -- 接收微信通知
ler.java -- 接收支付宝通知
支付网关下单处理流程
以微信公众号下单为例 。
1 商户发起请求
参考 shop 工程中,.java 的 pay 方法,向网关发起请求 。可以是 key 为的json字符串请求,也可以是请求头是 json 的 json 体请求 。
是请求头必须是 json,是响应类型,两个都是UE,即都是json类型
2 验证参数
网关接收到请求后,先验证参数:
先验证公共必填项参数:
再根据渠道进行相应必填项的验证,普通商户公众号支付,必须要有 :
这里 xxpay 仅支持境内普通商户的对接使用,不支持境外或者服务商,
再验证商户信息和商户渠道是否存在且可用,没有被冻结,然后验证签名,封装订单 。
如果验证不通过,返回字符串,否则返回 ,验证后返回的对象是 字符串 则响应错误信息,否则继续 。
3 创建订单
如果验证返回 ,则创建支付订单
4 根据相应的渠道编码处理支付
这几个都是相应支付渠道请求处理结果的封装处理,所以方法都是一个do...Req(),这边可以将开发完成的渠道加进来,未开发完成的,注释掉,这样就会走 :不支持的支付渠道类型 。
5 微信支付请求结果封装返回
执行 .(.., , .(""));
用户信息中有两个 key: 和 ,分别是商户请求 xxpay 时加密的密钥和 xxpay 响应或通知商户时加密的密钥 。
6 执行微信请求
微信统一下单:

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

文章插图
根据不同渠道处理返回的结果:
处理的结果都放在了 map 里面,这里叫他 wxMap,是创建一个新的 map,假如叫 ,把结果 wxMap放到 ,key 为 ,还会放入成功业务代码,
7 根据返回支付结果
mkRet(Map) 方法是获取 map 中字符串,必须是业务代码为成功,且键不为空,字符串才不为空
.(..)是创建支付响应结果 Map,这里是创建成功的结果 map,并把微信请求业务结果map 中的键值放入响应结果 Map 中,然后加密返回json字符串 。
8 商户验签等处理,执行公众号请求
前端执行微信支付:
9 xxpay 接收微信服务器通知
10 微信通知处理,验签、更新订单、商户通知
11 MQ接收并发送商户通知
若未收到 商户回复,则继续通知,最多5次,有一定时间间隔
改造一下
加上其他的支付
第三方返回错误
第三方支付返回错误时,也把错误返回给商户
还有其他
时间太久了记不清了哈哈哈哈!
发布
可以运行 maven 命令打包,会打包成 jar,放在服务器上运行,也可以打包成 war,如下:
1改成 war
2 添加依赖
org.springframework.bootspring-boot-starter-tomcatprovided
3 修改入口程序
4 打包
运行 maven 命令
package
打包出来的就是 war 包了,可以放到里面运行,修改之后的项目,不用再改回来,依然可以运行 main 入口来启动项目 。
另一个问题
boot 打包 war,放到下,一个可能不会出现问题,一个里面放多个boot 打包的 war 可能会出现奇怪问题,可以在boot 项目里的 yml 配置文件里添加 .jmx.- 来区分不同的boot 项目:
看看效果 系统管理后台
里面的账号信息已经被我修改过了是假的账号,就不要费心思了?
商家后台
用到的技术
大体用到
还有很多有趣的工具类,都在 XXPay 开源的支付项目里,可以自己研究 。