1.解析错误 encryptedData、iv、session_key参数中在提交过程中为空或被转义修改
2.在获取授权手机号后使用了wx.login(),导致刷新了用户登录态信息。
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
wx.login(Object object)
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见 小程序登录。
参数
Object res
属性 类型 说明
code string 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid、unionid、session_key 等信息
优化建议:
授权前先全局获取session_key
<button bindgetphonenumber=”getPhoneNumberHandler” openType=”getPhoneNumber” class=”btn active”>微信账号快速登录</button>
Page({
onLoad: function(e) {
this.checkSession();
},
// 获取微信session_key
checkSession: function (callback){
let that = this;
let session_key = that.data.session_key || ”;
if (!isempt(session_key)) {
console.log(‘checkSession has sessionk:’, session_key);
callback && callback(sessionk);
} else {
console.log(‘checkSession no sessionk:’, session_key);
wx.login({
success: (res) => {
requestUtil.get(ymmUtil.U(‘connect_wx’, ‘wxinfo’), { code: res.code }, res => {
that.data.session_key = res.session_key;
that.data.openid = res.openid;
that.data.unionid = res.unionid || ”;
callback && callback(that.data..session_key);
});
}
});
}
},
getPhoneNumberHandler: function(e){
if (e.detail.errMsg == ‘getPhoneNumber:user deny’ || e.detail.errMsg.substring(0, 19) == ‘getPhoneNumber:fail’) {
dg.alert(‘请先授权手机号权限’);
} else {
this.checkSession(function(sessionk){
此处向服务器请求登录流程
});
}
}
})