微信支付除了异步回调通知,还要求后端主动轮询订单是否支付成功做为辅助,
前端轮询方案比较多,后端PHP不懂有什么方法?
TP6+使用Workerman执行定时任务?
Workerman有轮询方案吗?
先谢谢了!
感谢您的回复!如果客户订单一提交,后端就主动timer定时发起轮询,这样会对服务器有压力吗?
通常来说后端轮询只是为了兜底的手段策略,实时性依赖webhook回调
明白,非常感谢!官方说一般异步回调不会有问题,就怕通讯有时会出问题,后端轮询做为辅助手段,最好按规范来做
这叫什么轮询,这不就是定时器定时调微信接口么,开个定时器调就完事了
嗯,就是下单后过几秒开启定时器调微信接口查询,感谢!
我是这样干的,创建一个2秒定时器,下单时将订单信息存储在缓存中,在定时器里从缓存里读取订单信息向微信接口请求状态再更新。
感谢兄弟指导!我之前一直是依赖异步回调处理订单,现在对接第三方支付要求在回调的基础上加上轮询,如果每笔订单后端都用定时器调接口查询,服务器会有压力吗?
这跟压力都沾不上边,随便整
每天1万单订单,是不是理解为1万个定时任务?每个定时任务6分钟,6分钟后不管结果如何都结束定时任务
就一个定时任务处理
为啥不是在前端处理定时呢,我们最近有个购票的业务,需要h5下单成功后去票务系统下单,但是靠微信异步通知再去票务系统下单会出现延迟问题 还有就是用户h5下单成功了 票务可能会出票失败,基于这个问题我们解决的方式是 1.前端用户支付成功后,开启定时请求后台订单支付结果查询接口 2.查询支付成功后对票务系统下单,票务系统下单成功,h5订单下单才算成功,票务系统失败,对该笔订单自动执行退款,退款失败提醒客户联系平台(一般不会出现这种情况)
做完这个小系统后 我思索了很久之前做过的支付,其实都存在支付问题,单纯的靠异步通知是解决不了订单的状态更新问题的,尤其前端要求下单成功后进入订单详情的场景,回调稍微延迟下,按我以前的做法都会面临客户明明支付成功了,进入订单却是待支付
前端不确实因素太多。比如用户刚支付完就关闭页面,前端关闭了就发不起请求,只能靠后端主动轮询
这块没测试过用户关闭的情况 异步正常接受,前端正常轮训,轮训为了用户支付完了进入订单时保证看到的是已支付订单,而不是异步处理阻塞下订单状态未及时更新 用户看到的是未支付订单
这种不要前端去,不然同时1万个人去请求你的接口,小心炸了
微信下单,后端只是生成前端拉起支付的数据。若想后端获取该笔交易的支付状态,有以下方案:
感谢回复!第3点消息中间件就是想实现的
其实也很简单了 1、用户下单创建支付订单时,把支付信息也一起放到队列去 2、在创建一个时间任务去查询队列(消费),查询是否已经支付成功 3、查询用户未支付时,再放到队列去 4、设置一个阀值,轮询N次还是未支付情况下基本上用户是不会去支付了,所以可以关闭此条消费记录了(创建微信支付时,有一个支付超时,可以联动起来)
感谢回复!现在下单时是建有queue队列任务检查是否支付超时。文档要求前两分钟间隔3~5秒查一次,之后间隔10秒查一次,如果超出 6 分钟后还未获取到订单最终状态,停止轮询。不懂是用什么来做时间任务
加个延迟队列,下单后塞进去5分钟后查看这条订单是否已经支付了,没支付就查一次微信判断就可以了吧
感谢回复!延迟队列我是用在了5分钟内未支付状态改为已取消
感谢您的回复!如果客户订单一提交,后端就主动timer定时发起轮询,这样会对服务器有压力吗?
通常来说后端轮询只是为了兜底的手段策略,实时性依赖webhook回调
明白,非常感谢!官方说一般异步回调不会有问题,就怕通讯有时会出问题,后端轮询做为辅助手段,最好按规范来做
这叫什么轮询,这不就是定时器定时调微信接口么,开个定时器调就完事了
嗯,就是下单后过几秒开启定时器调微信接口查询,感谢!
我是这样干的,创建一个2秒定时器,下单时将订单信息存储在缓存中,在定时器里从缓存里读取订单信息向微信接口请求状态再更新。
感谢兄弟指导!我之前一直是依赖异步回调处理订单,现在对接第三方支付要求在回调的基础上加上轮询,如果每笔订单后端都用定时器调接口查询,服务器会有压力吗?
这跟压力都沾不上边,随便整
每天1万单订单,是不是理解为1万个定时任务?每个定时任务6分钟,6分钟后不管结果如何都结束定时任务
就一个定时任务处理
为啥不是在前端处理定时呢,我们最近有个购票的业务,需要h5下单成功后去票务系统下单,但是靠微信异步通知再去票务系统下单会出现延迟问题 还有就是用户h5下单成功了 票务可能会出票失败,基于这个问题我们解决的方式是
1.前端用户支付成功后,开启定时请求后台订单支付结果查询接口
2.查询支付成功后对票务系统下单,票务系统下单成功,h5订单下单才算成功,票务系统失败,对该笔订单自动执行退款,退款失败提醒客户联系平台(一般不会出现这种情况)
做完这个小系统后 我思索了很久之前做过的支付,其实都存在支付问题,单纯的靠异步通知是解决不了订单的状态更新问题的,尤其前端要求下单成功后进入订单详情的场景,回调稍微延迟下,按我以前的做法都会面临客户明明支付成功了,进入订单却是待支付
前端不确实因素太多。比如用户刚支付完就关闭页面,前端关闭了就发不起请求,只能靠后端主动轮询
这块没测试过用户关闭的情况 异步正常接受,前端正常轮训,轮训为了用户支付完了进入订单时保证看到的是已支付订单,而不是异步处理阻塞下订单状态未及时更新 用户看到的是未支付订单
这种不要前端去,不然同时1万个人去请求你的接口,小心炸了
微信下单,后端只是生成前端拉起支付的数据。若想后端获取该笔交易的支付状态,有以下方案:
目前,我们公司的做法是:1+3+4+5。
感谢回复!第3点消息中间件就是想实现的
其实也很简单了
1、用户下单创建支付订单时,把支付信息也一起放到队列去
2、在创建一个时间任务去查询队列(消费),查询是否已经支付成功
3、查询用户未支付时,再放到队列去
4、设置一个阀值,轮询N次还是未支付情况下基本上用户是不会去支付了,所以可以关闭此条消费记录了(创建微信支付时,有一个支付超时,可以联动起来)
感谢回复!现在下单时是建有queue队列任务检查是否支付超时。文档要求前两分钟间隔3~5秒查一次,之后间隔10秒查一次,如果超出 6 分钟后还未获取到订单最终状态,停止轮询。不懂是用什么来做时间任务
加个延迟队列,下单后塞进去5分钟后查看这条订单是否已经支付了,没支付就查一次微信判断就可以了吧
感谢回复!延迟队列我是用在了5分钟内未支付状态改为已取消