收藏
回答

微信登录wx.request网络切换重试导致请求失败:40163 | code been used

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小游戏 Bug Android Android 14 Redmi 8.0.49

wx.request 请求接口应该是有请求失败自动重试机制(但是居然没有可以关闭重试机制的开关参数),当用户在执行登录 wx.login 的瞬间,用户手机网络发生切换(比如:上班途中是4G网络,进入办公室后,自动连接并切换到公司WIFI网络),此时 wx.request 检测到网络切换,就会把尚未完成的请求丢弃掉,然后自动发起一个重试请求,不过这个重试机制使用的是与第一个请求完全相同的请求参数,而微信登录 wx.login 要求请求参数code只能使用一次,第一次HTTP请求中服务端已经将code使用了,所以会导致第二次HTTP请求因使用了相同的code而导致请求失败,并报错:code been used!

这种情况,wx.request 能不能提供一个可以关闭自动重试的开关,由游戏客户端自动实现重试机制,以便重试时可以使用新 code 请求参数发起重试请求。

现在游戏客户端当然也是可以再加一层重试机制确保游戏登录成功, 但是 wx.request 的自动重试机制会在网络切换时导致不必要的HTTP请求!

不知道我的理解是否正确,如果我的理解没问题的话,还请官方大大能否提供 wx.request 自动重试机制的关闭开关。

https://developers.weixin.qq.com/minigame/dev/api/network/request/wx.request.html

回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    06-07

    wx.request 没有自动重试的机制,可以自查看看

    06-07
    有用
    回复 6
    • 李威
      李威
      06-12
      看wx.request的文档, 有提到底层存在重试机制。

      而且我自己尝试了直接用微信原生wx.request调用一个自己写的测试API(API的逻辑仅仅只是sleep() 30秒,模拟一个耗时请求),然后在客户端多次快速切换4G与wifi网络,每次切换网络都调用一次测试API接口,从我的服务器nginx请求日志中可以看到,确实是调用了多次API。
      06-12
      回复
    • 社区技术运营专员--阳光
      社区技术运营专员--阳光
      06-12回复李威
      1.这个是在域名解析失败的情况下才会重试的,这种情况下可以确认第一次请求没有被发出,所以不存在服务端收到两次的情况
      2.你可以重现一下切换网络多次收到调用 API 的情况,并在每次请求参数中带上时间戳参数便于区分,然后上传一下客户端日志,附上你们服务端收到的日志给我们查查
      3.上传客户端日志方法,在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,需要提供一下微信号,时间点
      06-12
      回复
    • 李威
      李威
      06-17回复社区技术运营专员--阳光
      又尝试了一下:先连接WIFI网络,通过wx.login获取登录凭证code,再通过wx.request上报给游戏服务器,游戏服务器的处理逻辑中在调用微信API(/mgplatform/api/apps/jscode2session)后故意sleep(5),用于模拟处理延迟,在调用wx.request后,游戏服务器收到请求日志,在请求尚未返回之前直接切断网络(手机自动连接4G网络),然后游戏服务器再次收到请求且code与前一次请求相同(游戏客户端通过日志确定前后总共只调用了一次wx.request),第二次游戏服务器调用jscode2session报错“40163 | code been used”。


      【微信客户端日志】
      上传日志的微信号:JL-000o
      上传日志的时间点:2024/06/17 12:34


      【游戏服务端日志】
      如截图所示
      06-17
      回复
    • 社区技术运营专员--阳光
      社区技术运营专员--阳光
      06-18回复李威
      查到问题了,等我们排期修复
      06-18
      回复
    • 李威
      李威
      06-18
      好滴
      06-18
      回复
    查看更多(1)
  • showms
    showms
    06-07

    报40163 就重新wx.login把

    06-07
    有用
    回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    06-07

    自己写代码处理

    06-07
    有用
    回复
登录 后发表内容