支付宝在支付时经常会返回的一种错误,而且这个错误可能批量出现,也可能隔几个账单出现,到底是什么原因导致了本该生成二维码扫码支付的页面,却出现了错误代码:TRADE_TOTALFEE_NOT_MATCH呢?
错误解析
错误描述: 抱歉,该商品的交易金额与原先的不一致,请重新创建交易付款。
从支付宝返回的错误来看,似乎是商品的金额发生了变化,但实际上商品金额的变动在程序中很容易看到,不可能被大几率的连续输出错误;商家查看本地网站源代码的支付宝网关文件,与原来备份的文件对比也没有出现错误,我不禁想,这个错误是不是由站外的某些因素引起的。
支付宝官方工作人员给出的回应是,服务器上已经产生过同样编号的订单,两个订单的金额不一致。
排查本地文件但是没有什么卵用,实际上该问题出现的原因很简单,你有多个网站都使用了这个支付宝商户号收款,网站直接产生了重复的订单ID,比如PftHost之前有人支付过编号为999的订单金额为100元,那么当iYunHost有人生成了一个订单,但金额为99元,并且程序将这个订单编号为999的话,那么就会出现该商品的交易金额与原先的不一致的错误。
解决方案
在网站源代码的支付文件中,在生成订单的ID前加入一个特有标识,与其他使用此收款账号的网站要不同,那么支付宝在检查订单ID时就不会出现重复ID的订单了。
在搜索相关问题时看到,华为商城曾大批量出现过此问题,后来也应该是这样解决了,这种错误出现在有多个网站同一收款商户号的情况下。也有很多站长因为订单的起始ID不同,成交量较小而暂时幸运地避开了这个问题,但只要订单ID的标识为统一的数字编号,那么迟早有一天会出现重复。
我遇到这个问题时进行了大量的搜索,但都认为是金额出现了错误。因为在产生一定的错误订单后,该网站的数字编号大小超过了其他网站的最大值,该问题似乎又自动解决了,实际上订单增多时仍然会再次出现。在网上没有找到有效的解决方案,所以将自己的解决方案和原理记录在这里,希望对后来人有所帮助。