最新wx.getUserProfile 踩坑,正确的使用方法!

微信官方团队发布了一个调整通知:《小程序登录、用户信息相关接口调整说明》,公告明确从4月13日起,新发布的小程序不能使用wx.getUserInfo,要用wx.getUserProfile替代

容易踩到的坑:

不能在调用 wx.login 等过程的回调函数中,自动调用 wx.getUserProfile 来触发授权行为,因为 wx.getUserProfile 只能由用户手动触发。否则,系统会抛出异常:error msg: getUserProfile:fail can only be invoked by user TAP gesture

wx.login和wx.getUserProfile正确使用代码:

//wxml
<button bindtap="getUserProfile"> 获取头像昵称 </button>
//getUserProfile 回调里面嵌套wx.login
getUserProfile{
    wx.getUserProfile({
        desc: '用于完善会员资料',
        success: function (userInfoRes) {
            //...

            //调用 wx.login 登录接口
            wx.login({
                success: function (res) {
                    //换取openid & session_key
                    wx.request({
                        url: wx.getStorageSync('domainName') + '/WxOpen/OnLogin',
                        method: 'POST',
                        header: { 'content-type': 'application/x-www-form-urlencoded' },
                        data: {
                            code: res.code
                        },
                        success: function (json) {
                            var result = json.data;
                            if (result.success) {
                                wx.setStorageSync('sessionId', result.sessionId);
                                //校验
                                wx.request({
                                    url: wx.getStorageSync('domainName') + '/WxOpen/CheckWxOpenSignature',
                                    method: 'POST',
                                    header: { 'content-type': 'application/x-www-form-urlencoded' },
                                    data: {
                                        sessionId: result.sessionId,//wx.getStorageSync('sessionId'),
                                        rawData: userInfoRes.rawData,
                                        signature: userInfoRes.signature
                                    },
                                    success: function (json) {
                                        console.log(json.data);
                                    }
                                });

                                //解密数据(建议放到校验success回调函数中,此处仅为演示)
                                wx.request({
                                    url: wx.getStorageSync('domainName') + '/WxOpen/DecodeEncryptedData',
                                    method: 'POST',
                                    header: { 'content-type': 'application/x-www-form-urlencoded' },
                                    data: {
                                        'type': "userInfo",
                                        sessionId: result.sessionId,//wx.getStorageSync('sessionId'),
                                        encryptedData: userInfoRes.encryptedData,
                                        iv: userInfoRes.iv
                                    },
                                    success: function (json) {
                                        console.log('数据解密:', json.data);
                                    }
                                });

                            } else {
                                console.log('储存session失败!', json);
                            }
                        }
                    })
                }
            })
        }
    });
}

版权声明:本文为web_ding原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。