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

2022-10-11 11:47:31

微信官方团队发布了一个调整通知:《小程序登录、用户信息相关接口调整说明》,公告明确从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);}}})}})}});}
  • 作者:时光机上敲代码
  • 原文链接:https://blog.csdn.net/web_ding/article/details/117405103
    更新时间:2022-10-11 11:47:31