此类问题出现在获取用户信息、手机号码上,登录的时候,code的获取,解密出来的session_key不匹配或过期,
示例代码:
/**
* 获取用户绑定微信的手机号码
*/
getPhoneNumber:function (e) {
// console.log(e.detail.errMsg) //用户点击取消或授权的信息回调。
//后台还需得到session_key,openid
//使用接口 wx.checkSession可以校验 session_key 是否有效
var that = this;
wx.checkSession({
success: function (res) {
if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
//拒绝授权绑定手机号码
console.log("拒绝授权绑定手机号码")
} else {//同意授权
var ency = encodeURIComponent(e.detail.encryptedData); //加密的用户数据
var iv = encodeURIComponent(e.detail.iv); //与用户数据一同返回的初始向量
//获取用户登录的code
var code=that.data.code;
//解密手机
util.post('getPhoneNumber',{
encryptedData : ency,
iv : iv,
code :code,
}).then((res) =>{
if (res && res.code == 1) {
//解密成功返回用户手机:phoneNumber
} else{
//获取用户手机失败
}
})
//解密手机
}
},fail(){
//用户登录过期
wx.showToast({
title: "登陆过期,重新登陆中",
icon: 'loading',
duration: 1500
})
wx.login({
success: function () {
that.data.code = res.code;
that.getPhoneNumber();
}
})
},
});
},
解决方法:
1.要用wx.checkSession检查登录是否过期
2.code的获取必须在点击获取用户信息之前(获取encryptedData等数据),可以在进入页面就获取登录的code,或是登录的时候,将code存为全局变量