今天在调试和测试支付宝支付的时候,遇到一个有趣的问题,记下来留个底儿,也拿出来给大家分享一下。

对于一个正在运行的网站,如果增加或改动了和支付相关的功能,当然要经过调试和测试。

为了测试,自然会再搭一个测试的网站,与正式运行的网站完全无关。今天遇到的问题是,在测试网站上,每次点击了支付按钮以后,本来应该跳转到支付宝的页面,提示用户输入支付宝的帐号密码等等,完成支付流程。可是今天非常奇怪的是,频频出现如下的错误提示:

错误描述: 抱歉,该商品的交易金额与原先的不一致,请重新创建交易付款。
错误代码: TRADE_TOTALFEE_NOT_MATCH

以前没遇到,自然要上Google搜一下,找到很多相关问题的网页,都是说的一个道理:当第一次向支付宝提交某个一个订单后,这个订单的商家订单号(out_trade_no)以及订单金额等都会被记录下来,如果一次支付成功当然没有问题,如果一次没有成功,以后又再次支付这个订单(根据商家订单号来判断是否是再次支付),就会重新交验一次订单金额,如果和原来的订单金额不一致,就会给出上面的报错信息。

可是奇怪的是,我这里在第一次提交的时候,就报这个错误,实在是不理解,为什么就会报这个错呢,而且并不是每次都会报这个错,而是有一定比例的次数不会报错。反复跟踪,不得其解~~

经过一番长考,突然明白过来,虽然测试网站和正在运行的网站是完全没有关系的,但是支付宝的帐号用的同一个!因此,在测试网站上支付一个订单的时候,这个订单号实际上在主站上已经存在并支付过了,这个订单号在支付宝的后台已经有记录了,因此当在测试网站再次使用这个订单号支付的时候,就被认为是同一个订单的再次支付了,从而就会报这个错了!

原来如此!