微信支付错误:商户订单号重复
错误提示
今天新版本上线,但微信支付一直返回fail。查看微信返回信息'err_code'=>'OUT_TRADE_NO_USED','err_code_des'=>'商户订单号重复
错误分析
百思不得其解。支付订单号,是保存在单独的支付表中。每次发起支付,都是插入支付表,返回一个新的自增ID作为支付订单号。不可能存在重复的问题。
后来思考好久,想到了一种情况。保存订单号然后实时生成一个新的订单
原因是测试环境。测试环境测试过支付,使用的也是自增ID。测试支付比较多,多次支付,表产生的自增ID大于线上的字段ID。这样线上ID每次都是已经使用过的。
解决方案
临时解决方案
手动调大支付记录表的自增ID,这样就不会出现重复ALTER TABLE order_pay auto_increment=1100 ;
支付表大概结构
1 | CREATE TABLE `order_pay` ( |
完善解决方案
最终解决方案:支付号随机生成
1 | $pay_sn = time() . mt_rand(10, 99); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 螃蟹壳!