登录async getPhonenumber(e){ wx.login()}此时,是先点击的获取用户信息,再进行登录。逻辑是不对的,因为获取手机号之后才进行的登录第一次获取手_wx.getphonenumber">
赞
踩
通过按钮点击触发,在处理函数内调用wx.login()
发现每次登录,第一次都会解密失败,第二次就成功了。
<button open-type="getPhoneNumber"
bindgetphonenumber="getPhonenumber">登录</button>
async getPhonenumber(e){
wx.login()
}
此时,是先点击的获取用户信息,再进行登录。
逻辑是不对的,因为获取手机号之后才进行的登录
第一次获取手机号,微信使用的是当前session_key
对手机号信息进行加密,而我们的session_key还是空的
,或者用户之前登录过,那么session_key就是上一次登录的状态
。解密失败。
第二次获取手机号,我们通过上次登录,获取了最新的session_key
,服务端也存了同样的一份session_key
, 微信加密和我们服务器解密使用的是同一份数据。解密成功。
知道了登录的问题所在,当用户授权之前,应该使得服务端session_key
和 当前session_key
保持一致。
// 该方法应该在进入页面的时候,或者getPhonenumber之前调用
login(){
// 如果有session_id,可以检查一下是否过期
wx.checkSession()
// 过期就登录
wx.login()
// 将session状态同步至服务器
// 登录成功后本地可以保存一份session_id
}
async getPhonenumber(e){
// 获取手机号逻辑
}
微信基础库 2.21.2 开始 提供了新的获取手机号接口,通过动态令牌code就能换取用户手机号信息,能避免使用session_key不一致的问题。
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。