相信很多小伙伴之前用的接口是uni.getUserInfo来获取微信用户信息,但自4月13日起这个接口的返回参数不变,但开发者获取的userInfo为匿名信息。
(详情:小程序接口调整说明)
本人觉得这个更改虽然让接口的功能更加专注,但官方没有实现向下兼容,导致很多开发者需要费点心重新修改。
新版接口自那时起就新增uni.getUserProfile来获取用户信息,这让用户多了一个手动授权的步骤。
弹窗授权截图↓
一、uni.getUserProfile的必要参数
使用前我们先来看看这个接口需要哪些参数
重点留意的就是 desc 和 success 这两个重要参数,千万不要忘了加 desc!!!
在success回调函数中就可以写我们的ajax请求向后端传送加密信息和code和用户信息等内容
示例代码如↓
uni.getUserProfile({
desc:'获取微信用户的昵称与头像',
success:function(resp){
let nickName = resp.userInfo.nickName;
let avatarUrl = resp.userInfo.avatarUrl;
//console.log(nickName);
//console.log(avatarUrl);
let data={
nickname:nickName,
photo:avatarUrl
};
uni.request({
"url": url,
"method": "POST",
"header": {
token: uni.getStorageSync('token')
},
"data": data,
success: function(resp) {
}
});
}
})
二、uni.login和uni.getUserProfile的调用顺序
在实际开发的过程中,很多同学会选择在uni.login中包裹uni.getUserProfile,来保证获取code和获取的encryptedData顺序,从而避免解密失败
但实际上在调用uni.login获取code后,再调用uni.getUserProfile,可能会失败,触发fail函数,error msg: ''getUserProfile:fail can only be invoked by user TAP gesture"。所以正确的调用顺序是先调用uni.getUserProfile在其中包裹uni.login
示例代码如↓
uni.getUserProfile({
desc:'获取微信用户的昵称与头像',
success:function(resp){
uni.login({
success:function(res){
let code = res.code;
//console.log(res.code);
let nickName = resp.userInfo.nickName;
let avatarUrl = resp.userInfo.avatarUrl;
//console.log(nickName);
//console.log(avatarUrl);
let data={
code:code,
nickname:nickName,
photo:avatarUrl,
registerCode:that.registerCode
};
uni.request({
"url": url,
"method": "POST",
"header": {
token: uni.getStorageSync('token')
},
"data": data,
success: function(resp) {
}
});
},
fail:function(){
console.log("fail use getUserProfile");
}
})
}
})
三、方法更新
上面的方法我看到有同学留言说用不了,我试过还是能用的,为了适配大多数同学,我这里再给出一个方法来获取,不再嵌套使用,还是正常先调用 uni.login 再调用 uni.getUserProfile 方法。但这里需要注意!在微信开发者工具中测试时需要以真机调试才能获取用户资料!!
uni.login({
provider: 'weixin',
success: function(resp) {
let code = resp.code;
that.code=code
}
});
uni.getUserProfile({
desc: '获取用户信息',
success: function(resp) {
let nickName = resp.userInfo.nickName;
let avatarUrl = resp.userInfo.avatarUrl;
// console.log(nickName);
// console.log(avatarUrl);
let data = {
code: that.code,
nickname: nickName,
photo: avatarUrl,
registerCode: that.registerCode
};
uni.request({
"url": url,
"method": "POST",
"header": {
token: uni.getStorageSync('token')
},
"data": data,
success: function(resp) {
}
});
}
});
本次分享到此结束,有问题的欢迎评论区留言!