评论

code been used和解析失败问题的解决方式

最近项目中遇到在获取用户信息或用户手机号码时遇到了后端报code been used和后端无法将encryptedData解析出来的问题,在一步步探索中解决问题的尝试,及最终的解决方案

在认证和获取用户信息时,前端总需要将code,iv和encryptedData传给后端去解析,当多次调用接口时后端经常报code been used,检查原因得知,由于前端只调用过一次wx.login接口之后将拿到的code存储在全局变量中,而每次认证或者获取用户信息接口一旦使用过该code,那么该code第二次将失效,后面的解决方式是在每次在点击button获取用户信息或者手机号的回调函数中,在调用后端接口前先手动wx.login获取code,然后再调用后端相应的接口,但是这在后面又导致了一个新问题,那就是在回调的中获取到的新code ,后端拿着去换取的 sessionKey 不是加密时使用的 sessionKey,将导致解密失败(这个在微信在文档中也提到过,见下图)。最终解决结果,由于我开发的项目基本上一个页面不会出现连续调用后端解密接口的情况,所以我是在页面的onshow函数中调用一次wx.login,将code保存在一个全局变量中。如果有些小伙伴需要在同一个页面连续调用后端解密接口的话,我建议是在onshow里先wx.login一次将code存在当前页面的全局变量A中,每次点击button的回调中当调用后端接口成功后再主动调用wx.login获取code,并替换A的值。

点赞 4
收藏
评论

1 个评论

  • 一米阳光、
    一米阳光、
    2019-07-11

    这样也有个问题就是,比如在登录页,点击登录,由于后端的原因报错了,导致code被用了,但是小程序页面不会再出发onShow了

    2019-07-11
    赞同
    回复
登录 后发表内容