• 0
  • 0

Uniapp 微信登录相关问题

2020-02-12 141 0 admin 所属分类:Hbuilder

APP 第一次登录无法获取unionid

需要调用getUserinfo接口读取unionId(I是大写的),注意区分

uni.login({
    provider: 'weixin',
    success: function(loginRes) {
        console.log("login", JSON.stringify(loginRes));
        uni.getUserInfo({
            complete(res) {
                console.log("getUserInfo", JSON.stringify(res));
                //处理uniapp app登录 第一次获取不到unionId的情况
                if (loginRes.authResult.unionid == undefined && res.errMsg == 'getUserInfo:ok') {
                    //getUserinfo 该字段是大写 
                    loginRes.authResult.unionid = res.userInfo.unionId;
                }
                that.loginWeb('', loginRes);
            },
            fail() {
                uni.hideLoading();
            }
        })
    },
    fail: function(res) {
        console.log(res);
    }
});

微信小程序登录偶尔无法获取session_key,报-41003 错误


通常流程如下

在使用的时候,有一定几率会报用户信息解密错误(41003)。这是因为请求顺序的原因,先去获取encryptedData和iv,再去获取code。这个时候获取到code后,iv可能就已经失效了

解决方法是,在wx.login里面再次调用wx.getUserInfo方法(这个方法在已经获取到用户授权之后使用是没有授权弹框的),使用第二次getUserInfo获取到的encryptedData和iv作为参数调用接口,这个时候就不会报用户信息解密错误了


uni.login({
    provider: 'weixin',
    success: function(loginRes) {
        uni.getUserInfo({
            success(res) {
                console.log('mini success getUserInfo');
                console.log("res: " + JSON.stringify(res));
                that.loginWeb(loginRes.code, res);
            }, fail(res) {
                console.log('mini fail getUserInfo');
                that.loginWeb(loginRes.code, wxUserInfo);
            }
        })
    },
    fail() {
        uni.hideLoading();
    }
});


返回顶部