前言
由于一些开发者的滥用,为了优化用户体验,微信官方在获取用户信息上,提供了新的API「wx.getUserProfile」,接下来作者将带你解读官方公告(传送门:
小程序登录、用户信息相关接口调整说明),进一步提升“面向公告编程”能力。
常见问题
-
1、线上版本是不是一定要接入新的 API 才能正常使用?
并不是哦,如果你的小程序是在 2021 年 4 月 13 日后发布的才需要接入,此前发布的线上版本仍不受影响。
-
2、wx.getUserProfile 从 2.10.4 基础库开始支持,那么 2.10.4 以下基础库不就使用不了这个 API 了吗?
并不是哦,2.10.4 以下基础库仍然可以通过调用原有 API「wx.getUserInfo」获取用户信息及进行解密。
-
3、为什么开发版和体验版调用 wx.getUserInfo 都不返回用户信息了?
wx.getUserInfo 开发版和体验版已对齐匿名表现(返回如下图结果),因此开发者可在 2021 年 4 月 13 日前在开发版或者体验版中,适配新的登录授权流程。
-
4、wx.getSetting 无法获取用户信息的授权(即 scope.userInfo )?
从 2021 年 4 月 13 日开始,无论是通过 wx.authorize 请求授权还是 wx.getSetting 获取授权状态,都将直接返回 true。【PS:由于 wx.getUserProfile 每次调用时都需要用户弹窗授权,因此将无法获取用户授权状态】
-
5、wx.getUserProfile 为什么只能获取到 userInfo 信息,却获取不到 rawData、signature、encryptedData、iv 等信息呢?
据悉,这几天会灰度 2.10.4 ~ 2.16.0 之间支持获取 rawData、signature、encryptedData、iv 等加密信息,具体以官方通知 / 文档为准
新的 API 对基础库有一定的要求,除了参数 userInfo 的值需要 2.10.4 及以上基础库支持获取之外,其它参数也需要 2.16.0 及以上基础库才支持获取。【PS:目前基础库在 2.10.4 ~ 2.16.0 之间将无法获取 rawData、signature、encryptedData、iv 等信息,具体以官方通知为准】
-
6、PC 端微信暂不支持新的 API「wx.getUserProfile」应该怎么处理?
可以通过以下方式兼容。【PS:暂不推荐使用 wx.canIUse(“getUserProfile”) 做兼容判断,后续可使用该方式进行判断】
if (wx.getUserProfile) { console.log("支持 wx.getUserProfile") } else { console.log("不支持 wx.getUserProfile") }
-
7、开发者工具或真机提示 wx.getUserProfile is not a function 错误信息,应该怎么处理?
① 确认开发者工具为 1.05.2103022 及以上版本,并且调试基础库为 2.10.4 及以上。
② 确认手机微信为 7.0.9 以上版本,且基础库为 2.10.4 及以上。
③ 如果工具内基础库已设置为 2.10.4 及以上,仍报同样的错误信息,可尝试调高工具基础库直至支持此 API 【PS:一切以真机为准!】
-
8、wx.getUserProfile 获取 encryptedData 及 iv 参数后进行解密,无法获取到 openid 等信息?
原来调用 wx.getUserInfo 后进行解密可以获取到 openId 等信息如图 1 所示,但是新的 wx.getUserProfile 将无法直接获取到此类用户标识,返回的信息如图 2 所示。
-
9、解密用户信息将不会返回 openId 及 unionId 这类信息,应该怎么解决处理?
新的登录流程有变化!开发者通过 wx.login 获取到用户登录凭证 (code),调用微信登录接口(auth.code2Session)将直接返回 openId、unionId(请先确认已在开放平台绑定该小程序,绑定流程:登录 微信开放平台 — 管理中心 — 小程序 — 绑定小程序)
-
10、wx.getUserProfile 跟 wx.login 无法同时调用,报 getUserProfile:fail can only be invoked by user TAP gesture 错误信息?
请勿在 wx.login 的 success 回调中调用 wx.getUserProfile。
解决方式: 先使用checkSession
进行登录态检查;提前调用wx.login
再调用wx.getUserProfile
,完成授权登录流程。
先拖更
-
据悉:wx.getUserProfile 计划从基础库版本 2.6.6 开始支持
-
有疑问欢迎在下方留言或者发社区私信
文档已更新:第5条更正。
那请问这个解密流程要了干啥?验证数据?用户基础信息和openid、unionID都可以获取到
先调用 wx.getUserProfile 之后在 success 回调中调用 wx.login 完成授权登录流程。 得到的code老是解密不对,第二次授权下就又好了
getUserProfile(e) { wx.getSetting({ success(res) { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称 wx.getUserProfile({ desc: '用于获取用户个人信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 success: function (detail) { wx.login({ success: ress => { var code = ress.code; //登录凭证 console.log(">>>>>>>>>>code:", code) console.log("encryptedData:", detail.encryptedData) console.log("iv:", detail.iv) wx.request({ url: api.getUnionId, //自己的服务接口地址 method: 'post', header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { encryptedData: detail.encryptedData, iv: detail.iv, code: code, }, success: (res) => { console.log("res:", res.data) if (res.data.code == 'C00000') { util.setToken(res.data.msg); util.setStorageSync("userInfo", res.data.obj); wx.redirectTo({ url: '/pages/breakpage/breakpage', }) } }, fail: function () { console.log('系统错误') } }) } }); } }); } } }) },
请问wx.getSetting不能用,要用什么替代?我这点击没反应,去掉wx.getSetting后会提示unionid为空
如第9条所说的,wx.login(code) + auth.code2Session 将直接返回 openId、unionId(已在开放平台绑定的小程序)
因为wx.getUserProfile需要每次弹框要求授权才能获取用户信息,所以将无法真正意义上去获取到用户授权状态。
wx.getSetting去获取用户授权状态是不准确的,均会返回true。
老是改来改去,真的麻了
先拖更
据悉:wx.getUserProfile 计划从基础库版本 2.6.6 开始支持
意思是正式版本的还没有支持,现在还是得使用getuserInfo?
请问不支持wx.getUserProfile的话, pc微信要怎么完成授权呢?
您好,请问,用户主动触发wx.getUserProFile,返回的却是匿名信息,要怎么处理
getUserProfile(e) {
wx.getUserProfile({
desc: '用于完善会员资料',
success: (res) => {
wx.setStorageSync('userinfo', res.userInfo)
this.setData({
userInfo: res.userInfo,
hasUserInfo: false
})
}
})
},