微信小程序调整登录、用户信息相关接口得到的坑
发表时间:2021-4-13
发布人:葵宇科技
浏览次数:160
前提是这样的:
为让程序员更好的加班,平台将进行以下调整:
- 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的 , 这个需要特别注意








