在一次项目中,需要在商户收到用户的钱的时候发短信通知商户,所以在异步通知哪里写了这么一个功能,然后问题就来了,客户付一次钱,能发10条8条信息,到底是哪里出的问题?在发起支付前打印一下生成的支付单状态,发现是未支付的状态 ok,没问题,然后在异步通知接收到的参数去数据库查询支付单,发现支付单查出来的已经是改变了支付状态的,问题就来了,我是在改变支付单的逻辑前面查询的支付单就查询的,支付单怎么就会改变了状态呢,发起支付请求到微信给我的异步通知,中间没有其他的步骤了,是在哪里改变的支付单状态,我怎么不知道?然后一次次的调试,还是没撤,就找了我老大哥,说让他叫我把file_put_conetnets 加多一个写入模式,是追加进去,然后再测试了一次,OMG!原来微信第一次就给我发起了10条8条异步通知(就是不等我回它success为一次),所以我这个文件就执行了10次8次,问题找到了,马上就逻辑处理了一下。 不知道支付宝是不是这样,我也先不测了,就先当支付宝也是这样吧,特意留下此贴,记录一下开发过程中碰到的那些坑,加深印象,也防止别人遇到我这样的坑,能够避免踩雷
微信支付异步通知的深坑
2023-10-15 20:03:40