博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三方支付异步通知的陷阱
阅读量:5949 次
发布时间:2019-06-19

本文共 570 字,大约阅读时间需要 1 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j16421881/article/details/78703792

  用户下单后调用第三方支付付款,然后接收第三方支付的异步通知,以便确认支付是否成功。

如下图
交互时序图

  但异步通知可能由于网络原因,或者应用服务崩溃没有接收到。为了应对这种情况需要后台创建一个定时任务去调用第三方接口,主动查询支付结果。这种情形下就涉及并发的问题,可能后台定时任务跟异步通知同时收到了支付成功结果,同时对响应数据进行处理。通常通过加锁来避免这种问题。

  到了这里一切看起来很美好。代码提交后在测试环境顺利通过。由于测试环境情形单一,测试用例不够,异步通知总是成功的,做为备用手段的后台定时任务没有被测试覆盖到就进入了生产环境。后台定时任务的逻辑有可能是错的,而由于生产环境配置了负载平衡,保证了高可用,直到很久都不会发现定时任务的错误。笔者就遇到过在长达一年的时间里定时任务从来就不起作用。
  所以开发要在qa阶段跟测试人员紧密配合,保证每个测试用例都覆盖到,比如关掉异步通知服务,看定时任务是否能正确处理。直到有一天我发现其他部门一位同事采用了一个很有创意的做法,既然异步通知不靠谱,干脆就不要,完全靠后台定时任务主动查询第三方支付结果,然后进一步处理。

你可能感兴趣的文章
ASP.NET MVC测试方法与实战技巧
查看>>
Mysql慢查询
查看>>
传统线程机制之定时器的应用(TIMER,TIMERTASK)
查看>>
org.apache.hadoop.hive.contrib.serde2.RegexSerDe not found
查看>>
citrix客户端的配置和访问(六)
查看>>
Linux下搭建Ionic框架
查看>>
移动支付的基本要素
查看>>
云计算:大数据时代的系统工程(二)
查看>>
Hadoop、Spark、HBase与Redis的适用性讨论(二):HBase
查看>>
常见的数据库连接池
查看>>
K8S使用Ceph RBD作为后端存储
查看>>
Centos yum的配置与使用
查看>>
Linux 文件内容查看工具介绍-cat,less,more,tail,head
查看>>
linux lsof 命令
查看>>
AD 总结
查看>>
在windows中将QString 转化为宽字节
查看>>
Jquery ajax异步提交
查看>>
MySQl的意外断电后无法启动
查看>>
如何防止表单重复提交
查看>>
真是因为忙才加班吗
查看>>