实在想不通了,我本来使用的这个统一下单接口 https://api.mch.weixin.qq.com/pay/unifiedorder 和其相应的代码。
昨天忽然发现,小程序支付成功一次之后,再支付就会报错“缺乏total fee”。如果取消支付,反复下单是没问题的,但只要支付成功一次之后,就不行了。看返回值可知,第一次支付过后,再下单无法获得prepayid了,所以调起支付这步会出错。必须重启小程序才能重新下单。
但经过反复排查,不认为是代码问题,因为同样的逻辑,在我另外的小程序上没有任何问题。
抱着这样迷茫的状态,我今天干脆将支付方法改了。使用官网上目前的v3版本 https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi 这个作为支付方法。
结果,还没等我把最后一步“支付通知”写完,在搞定了下单和调起支付之后,这个问题居然复现了。
我补充说明一下:不存在out_trade_no的重复问题,可以排除这方面的错误可能。
而且,我昨天下午短暂的发现,这个bug消失了,可以正常连续支付了。但是过了阵子又不行了,所以,会不会是我的这个特定的小程序遇到的问题。
另外,我今天还发现一个问题,不知道大家碰到过没有。我今天在第一步下单时,返回prepayid等json数据时发现,小程序(主要是编辑器,手机端不确定)把该段数据有时候读作json,有时候读作string。变化往复,没找到规律。
怀疑是不是受到了paySign值里多变的字符的影响?也不应该呀。哎,反正目前主要是想解决标题里讲到的这第一个问题。请帮帮我吧,不知道大家遇到过这种情况吗?
闹笑话了,原来问题在我自己,我最近的一个改动,在支付后会更新缓存,把关键的一个缓存值给改丢了。
之所以还出现过所谓“下午短暂恢复”的假象,估计是当时测试的运行端暂时没被错误覆盖。
果然遇到问题还是容易归咎于自身的事外,还是得多多冷静的思考和排查。
要先查一下日志,在你调起支付失败时,下单是否成功