2021年4月13日后发布的小程序新版本,最新微信小程序授权获取用户信息(getUserInfo(淘汰) 替换 getUserProfile)后总结
今天花了一天时间,踩坑无数,特此总结
官方宣布2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与< button open-type=“getUserInfo” />获取用户个人信息,以前的代码,获得的用户信息,均为匿名信息。用 “微信用户"代替了用户的呢称,看着用着都难受呀。
4月13日后发布的新版本小程序,开发者调用wx.getUserInfo或< button open-type=“getUserInfo”/>将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。
如仍使用原来方式将会获得红色区域的匿名信息,即一切流程会非常顺畅,使用wx.getUserInfo获得也很顺畅,但是获得都是匿名信息
若开发者调用wx.authorize接口请求scope.userInfo授权,用户侧不会触发授权弹框,直接返回授权成功。即wx.authorize 只会获得假性的授权成功。
若开发者调用wx.getSetting接口请求用户的授权状态,会直接读取到scope.userInfo为true
即wx.getSetting去判断是否已授权获取用户信息也是假性的。
wx.login接口获取的登录凭证可在后台直接换取unionID,openid。开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认。
wx.getUserProfile接口调用,花的时间很长,一开始,
wx.getUserProfile({
desc:'获取你的昵称、头像、地区及性别',
success: (res) => {
console.log('获取用户信息成功', res)
//获取用户信息的各类操作
}
})
没任何反应,最后加上fail:部分,问题出现了
wx.getUserProfile({
desc:'获取你的昵称、头像、地区及性别',
success: (res) => {
console.log('获取用户信息成功', res)
//获取用户信息的各类操作
},
fail: (res) =>{
console.log('获取用户信息失败',res)
wx.showToast({
title: '信息授权失败~',
duration: 1000,
icon: 'error',
mask: true
})
}
})
PC端小程序报错wx.getUserProfile is not a function,值得注意的是新的接口wx.getUserProfile,只能使用catchtap或者bindtap进行调用(可以在wx.showmodel中使用),并不能再onload、onshow等位置直接调用,并且返回参数有所改变
调整 按钮类型后此问题解决
但又出现了新的问题:
问题1. fail can only be invoked by user TAP gesture.
需要用户手动确认才能通过验证:
uni.showModal({
title: '温馨提示',
content: '亲,授权微信登录后才能正常使用小程序功能',
success(res) {
}
}
此问题改来改去,就是一直出这个问题,最后换了个号,试一下,同样的代码,可以用,很时奇怪,查了很多原因,网上有的说版本,有的设置,等试了很多,没用,最后发现,试过其它号,一行行代码对过后,发现,都一样,结果不一样,这才想起重启电脑,可以了
getUserProfile(e) {
console.log(app.ggdata.userbzid)
if (app.ggdata.userbzid > 0) {
// api.myshowm('提示', '您已授权,无需重复操作,如没显示,可退出再重新进入即可。', '确定' ,showCancel: false);
wx.showModal({
title: '提示',
content: '您已授权,无需重复操作,如没显示,可退出再重新进入即可',
showCancel: false
})
return
}
else
{
wx.getUserProfile({
lang:'zh_CN',
desc: '获取你的昵称、头像、地区及性别',
success: res => {
console.log(res);
console.log(1);
wx.login({
success: function (loginres) {
console.log(loginres)
// 下面开始调用注册接口
wx.request({
url: api.apiPath.apireg,
data: {
code: loginres.code,
encrypted_data: res.encryptedData,
iv: res.iv
}, // 设置请求的 参数
header: {
"Content-Type": "json"
},
success: (res) => {
wx.hideLoading();
console.log('注册成功')
}
})
}
})
},
fail: res => {
console.log(2);
console.log(res)
//拒绝授权
wx.showToast({
title: '您拒绝了请求,不能正常使用小程序',
icon: 'error',
duration: 2000
});
return;
}
});
}
},
问题2. fail desc length does not meet the requirements
接口字段有调整:desc
uni.getUserProfile({
desc: '获取你的昵称、头像、地区及性别',
success: res => {
console.log(res);
console.log(1);
}
}
特记:wx.login >>> code >>> 请求接口换取openid >>> openid >>> 自定义请求态 >>> uid
只是获取用户信息的地方发生改变了,获取用户信息必须通过wx.getUserProfile获取
还有一种方式就是将调试基础库调到2.14版本
"libVersion": "2.14",
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/15644836.html