获取手机号无法保证code有效?
发布于 5 年前 作者 juan60 7764 次浏览 来自 官方Issues

官方文档如是说:

> 在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

其中给出2个方案:

1、提前调用wx.login,获取code。

2、在回调中调用 checkSession 检查登录状态


但这2个方案都有缺陷:

1、code码时效只有5分钟,如果提前获取到code后,用户5分钟之后才授权,那么这个code码也已经失效。

2、checkSession检查登录失效后,还是需要再调用wx.login获得code,但此次用户授权手机号也无效了,需要用再次授权,影响用户体验。


总之,目前官方文档给出的方案都不完美。

希望有大佬能给出完美方案,小弟感激不尽


2 回复

实在没看懂你想表达什么,点击授权时,如果五分钟没到,就用老的code,过期了就会获取新code,点击授权这个时候只是获取encryptedDataStr,iv,这个时候还没有手机号,第一步是通过code获取 session_key之类的,然后再配合授权获取的两个参数解密手机号,这个时候已经有登陆状态了,存下来,只要网络正常,你们服务器正常,不存在你所描述的,点击授权,code失效问题,接口请求都是毫秒计算

用户授权过的 将你想要的存到数据库 再次进来直接就可以获取到相关数据(不会再拉起用户授权了吧)【这块逻辑处理下】

授权手机号: 点击获取用户手机号的事件使用wx.login() 获取code

回到顶部