微信提现失败:更换了openid,但商户单号未更新

更新日期: 2018-12-05 阅读次数: 11192 分类: 微信小程序

现象是,部分用户提现失败,大部分能提现成功。

固定的几个用户,调用微信提现接口时,一直报错

更换了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 聊聊, 查看更多联系方式