订单信息分为两层,业务层和微信层,业务层保留订单的详细信息,微信层只有总金额信息。业务层平台不关心,只提供微信层的封装方法。
需引入微信支付包:
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.3.0</version>
整体流程如下:
1) 调用相关业务接口创建业务层订单。
这部分根据业务自行实现,没有要求。
2)调用平台微信支付接口创建订单
平台提供给业务端的是jar包:
<groupId>org.qlm</groupId>
<artifactId>qlm-utils-wechart</artifactId>
<version>1.0-SNAPSHOT</version>
提供jar包而不是微服务接口的原因是:1 微信支付相关参数不同业务是不同的,要配置在业务的配置文件里;2 可以和上面第一步集成在同一个接口里,前端只需要调用1次。
public WxPayInfoDto createOrder(String openid,String orderId,String title,long total)
需要的配置如下:
qlm:
wechart:
appId:
appSecret:
merchartid:
miniPayNotify:
payKey3:
3)前端调用微信支付
拿到WxPayInfoDto后前端调用相应接口。
4)微信调用回调接口返回结果
回调接口是在创建微信订单过程中传过去的参数
写法:
编写一个接口:
@PostMapping("/miniPay/notify")
public String nativeNotify(HttpServletRequest request, HttpServletResponse response)
其中调用平台提供的函数
WxPayNotifyDto nativeNotify(HttpServletRequest request, HttpServletResponse response)
如果成功,从返回值中得到订单ID,再处理业务端即可