登录async getPhonenumber(e){ wx.login()}此时,是先点击的获取用户信息,再进行登录。逻辑是不对的,因为获取手机号之后才进行的登录第一次获取手_wx.getphonenumber">
当前位置:   article > 正文

微信小程序:wx.login和getPhonenumber获取手机号解密失败问题_wx.getphonenumber

wx.getphonenumber

原来的登录处理流程:

通过按钮点击触发,在处理函数内调用wx.login()

发现每次登录,第一次都会解密失败,第二次就成功了。

<button open-type="getPhoneNumber" 
	bindgetphonenumber="getPhonenumber">登录</button>
  • 1
  • 2
async getPhonenumber(e){
   wx.login()
}
  • 1
  • 2
  • 3

此时,是先点击的获取用户信息,再进行登录。
逻辑是不对的,因为获取手机号之后才进行的登录

第一次获取手机号,微信使用的是当前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){
  // 获取手机号逻辑
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

解决方法二:

微信基础库 2.21.2 开始 提供了新的获取手机号接口,通过动态令牌code就能换取用户手机号信息,能避免使用session_key不一致的问题。

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/792087
推荐阅读
相关标签
  

闽ICP备14008679号