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

文章目录

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

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

    更换了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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式