支付宝关闭交易与转支付状态码10003问题

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 15:23   21   0

记录问题,造福后人。

背景

如果有做过支付宝预授权的应该知道,其官方文档上并没有写10003状态码,但是生产环境中却遇到了10003的状态码。

由于代码中是按照10000的状态码来判断为成功的,所以10003被处理成了失败,从而导致一笔成功的交易被错误的当做的失败的交易。

426671-836959a7e8e2af82.jpg
image

后果

  • 以为用户没有付清钱
  • 关闭交易的时候,只能关闭交易失败的,无法关闭交易成功的,从而导致无法关闭这笔交易

代码修复

  1. 在支付宝扣钱成功之后,只有扣钱成功的才有回调。
    这里有两种方案可以选择:
  • 在回调代码中,只要收到了回调,如果原结果不是成功的,就将记录更新为成功。


    426671-64b31deb0cb4555d.png
    image.png
  • 在同步支付结果的时候,如果是10003的代码,先标记为等待状态,回调的代码不更改。

最终选用的是第二种,同步的时候就返回等待状态。如果在回调中更改的话,试想刚开始你扣用户的钱你告诉用户扣失败了,后面回调的时候又告诉用户扣钱成功了。这样肯定是不行的,同步的时候就要给准确的结果

  1. 在关闭交易之前,查询这笔交易的状态,如果交易状态为已关闭或者已支付,则无需关闭交易。这样尽管转支付的时候记录被标记为了失败,如果有回调代表支付成功了,如果没有回调,代表支付是失败的。
426671-5254f6ec6f7a209a.jpg
image

总结

这就是和第三方系统打交道,因为对第三方不够熟悉,其是一个黑盒系统,而这边有时候考虑的又没有那么的全导致的问题。

参考

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP