关于微信支付延迟的一些简单处理

  最近在面试的过程中总会出现一些关于微信支付延迟返回结果的处理方式的问题,这里做了一些个人的浅见总结

一.首先盗用微信的支付流程图来总结下微信的支付过程

关于微信支付延迟的一些简单处理

二.由图我们可以知道微信支付有这么几个过程

1.用户:用户通过app 选择想要购买的商品之后确认商品信息,最后选择支付方式进行付款,

2.商户端:生成调用统一下单接口 :https://api.mch.weixin.qq.com/pay/unifiedorder生成预支付交易单

3.用户:用户对预支付订单做确认支付

4.商户端:商户端调用支付接口进行支付

5.用户:用户收到微信的支付成功结果通知

注意到这里就会出现我们说的微信支付延迟问题,出现延迟有几个原因

1.我们的服务器由于负载或网络延迟等问题有可能收取不到微信的回调

2.偶尔也有可能我们收到的微信回调是空信息,目前我碰到的是这两个如果有其他情况希望大家留言补充

三. 现在问题我们基本已经知道那么就 来说下处理方法

1.第一个处理方法:当我们的业务对实时结果不是很在意时,我推荐用定时任务再第二天进行调用微信的

下载交易账单:https://api.mch.weixin.qq.com/pay/downloadbill 来进行对前一天的支付订单进行比对(微信的前一天对账单信息是在第二天9点生成,所以个人建议在10点之后进行比对)。

2.第二个处理方法:当业务必须用户支付后就要知道结果时,这里我们就要用到微信的订单查询接口https://api.mch.weixin.qq.com/pay/orderquery这个接口再微信开放文档中有详细使用说明我在这里就不阐述了(接口说明url:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_2&index=4

下面我们来说一说这个查询接口在代码中的使用位置:

1.我们可以在调用微信支付接口成功后直接使用,但偶尔微信处理结果没有我们想象的那么快,所以有小概率会收取不到 订单查询接口

2.我们可以利用AOP增强来对微信支付接口和回调接口进行处理。