前提是这样的:
为让程序员更好的加班,平台将进行以下调整:

  1. 2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID
  2. 2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfoencryptedData中的用户个人信息),获取加密后的openIDunionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。

坑是这样的:

以前: wx.getUserInfo<button open-type="getUserInfo"/> 除了可以获取到用户的头像昵称, 还可以获取到encryptedDataiv
这两个是用来解析openIDunionID
拿我们的项目来说, 通过getUserInfo基本一套就可以带走用户昵称头像及openIDunionID

现在: wx.getUserProfile 虽然也可以获取到encryptedData和iv, 但是从这里是解析不出来openIDunionID
也就是说, 指望一键更换的小伙伴们想多了, 如果你原来的逻辑是直接往后端传入encryptedDataiv然后获取openIDunionID是行不通的.
所以怎么拿呢? 还得调用一遍wx.getUserInfo

和谐而亲切的官方并没有告诉你wx.getUserProfile是拿不到这俩唯一ID的, 不过他们还是细心而体贴的给wx.getUserProfile放进去了encryptedDataiv….

现有解决方案(抛砖引玉), 如果不想大改的情况下:
后端在原有接受encryptedDataiv的基础上再增加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.getUserProfile2.16.0之前的版本是没有encryptedData和iv的, 这个需要特别注意