微信小程序调整登录、用户信息相关接口得到的坑
发表时间:2021-4-13
发布人:葵宇科技
浏览次数:120
前提是这样的:
为让程序员更好的加班,平台将进行以下调整:
- 2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过
wx.login
接口获取的登录凭证可直接换取unionID - 2021年4月13日后发布的小程序新版本,无法通过
wx.getUserInfo
与<button open-type="getUserInfo"/>
获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo
与encryptedData
中的用户个人信息),获取加密后的openID
与unionID
数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。
…
坑是这样的:
以前:
wx.getUserInfo
与 <button open-type="getUserInfo"/>
除了可以获取到用户的头像昵称, 还可以获取到 encryptedData
和 iv
这两个是用来解析 openID 、 unionID 的
拿我们的项目来说, 通过 getUserInfo
基本一套就可以带走用户昵称头像及 openID 、 unionID
现在: wx.getUserProfile
虽然也可以获取到encryptedData和iv, 但是从这里是解析不出来 openID 、 unionID 的
也就是说, 指望一键更换的小伙伴们想多了, 如果你原来的逻辑是直接往后端传入 encryptedData
和 iv
然后获取 openID 、 unionID 是行不通的.
所以怎么拿呢? 还得调用一遍 wx.getUserInfo
…
和谐而亲切的官方并没有告诉你 wx.getUserProfile
是拿不到这俩唯一ID的, 不过他们还是细心而体贴的给 wx.getUserProfile
放进去了 encryptedData
和 iv
….
现有解决方案(抛砖引玉), 如果不想大改的情况下:
后端在原有接受 encryptedData
和 iv
的基础上再增加 userInfo
的参数
然后小程序传參的时候是这样:
wx.getUserProfile({
desc: '用于完善会员资料',
success: (res) => {
let userInfo = res.userInfo;
wx.getUserInfo({
success: (res) => {
let wxUserInfo = res;
API.wechatRegister({
userInfo: userInfo, // 用于获取userInfo
encryptedData: wxUserInfo.encryptedData, // 用于解密openID、unionID
iv: wxUserInfo.iv,// 用于解密openID、unionID
})
}
})
}
});
另外, 需要注意的是
wx.getUserProfile
在 2.16.0之前的版本是没有encryptedData和iv的 , 这个需要特别注意