现象是,部分用户提现失败,大部分能提现成功。
固定的几个用户,调用微信提现接口时,一直报错
更换了openid,但商户单号未更新
刚开始我以为是,提现按钮点击了多次,同一订单号被提交。(订单号是使用表单的自增ID做的)
但一想,这跟提示的错误信息完全无关啊。而且,就算是重复提交,也应该有一个请求是成功的,但实际上并没有一个成功的。
难道是数据错乱了?那就麻烦大了。。。
反复了确认了几遍代码逻辑,发现不是逻辑问题。数据库中的数据从更新日期看也没有被篡改的迹象。
那就没有头绪了。。。既然逻辑没问题,为何还会说更换了 openid。。。
突然想到,莫不是这个数据表在上线时被清空过,并且重置了自增ID计数器???
那这个解释就非常合理了,线上提现订单 ID 跟内网测试时的订单 ID 重合,而两次提交时的 open_id 肯定不一致,所以微信接口报错信息就非常准确了。
解决方法
- 修改线上的自增 ID 计数器,调大,以与原测试数据错开。
- 并手动修改出现问题的 ID。注意,新 ID 要小于新的计数,因为防止新增数据重合。
alter table big_money AUTO_INCREMENT=1000;
update big_moneyset id = 900 where id = 10;
...
修改之后,再调用提现接口,就一切正常了。
无效的做法
只更改 ID,变成一个较大的值,但是不修改 AUTO_INCREMENT,新增数据的 ID 还是从旧的计数继续,而不是在当前表最大 ID 上自增。
truncate 与 delete 对 AUTO_INCREMENT 的不同影响
- truncate 会导致 AUTO_INCREMENT 重置
- delete 不会导致 AUTO_INCREMENT 重置
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式