1. 前言

微信小程序近期发布公告修改了小程序登录和获取用户信息的机制。这对小程序开发者是一个很重要的消息,所以无论后端还是前端都要做出相关业务流程调整。你不改还不行,这个是强制性的。新年刚过就来活了,已经有苦逼码农吐槽,要修改 72 个小程序,58 处逻辑了。接下来胖哥解读一下这个公告,帮你快速进入状态。

2. 公告详情

为优化用户的使用体验,微信小程序平台将进行以下调整:

  1. 2021 年 2 月 23 日起,通过​​wx.login​​接口获取的登录凭证可直接换取​​unionID​
  2. 2021 年 4 月 13 日后发布新版本的小程序,无法通过​​wx.getUserInfo​​与​​<button open-type="getUserInfo"/>​​获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括​​userInfo​​与​​encryptedData​​中的用户个人信息),获取加密后的​​openID​​与​​unionID​​数据的能力不做调整。
  3. 新增​​getUserProfile​​接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile 接口文档》

请使用​​wx.getUserInfo​​​接口或​​<button open-type="getUserInfo"/>​​的开发者尽快适配。


开发者工具预计将于2021 年 3 月 3 日后在 nightly 版开始支持,此前开发者可通过真机调试进行适配。

3. 解读

3.1 可以直接获取 unionID

在旧版本中,​​wx.login​​​接口获取的登录凭证若需换取​​unionID​​需满足以下条件:

  1. 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号
  2. 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用

2 月 23 日后这两个条件都不需要了,开发者调用​​wx.login​​​获取的登录凭证可以直接换取​​unionID​​,极大方便了我们来判断用户是否是同一个人,实现数据互联互通。


3.2 getUserInfo 废了

​wx.getUserInfo​​​和​​<button open-type="getUserInfo"/>​都将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的 openID、unionID 数据的能力不做调整。也就是说该接口获取的用户信息都是匿名的,不能用于处理涉及真实个人信息的业务场景了,所以这个接口基本废了。

紧急!微信小程序登录接口重大变化,前后端来活了。_openid新旧接口流程对比

3.3 新的用户信息接口

若开发者需要获取用户的个人信息(头像、昵称、性别与地区),可以通过wx.getUserProfile接口进行获取,该接口从基础库 2.10.4 版本开始支持,该接口只返回用户个人信息,不包含用户身份标识符。开发者每次通过该接口获取用户个人信息均需用户确认,请开发者妥善保管用户快速填写的头像昵称,避免重复弹窗。

这就需要在后端增加一个判断用户是否在后台保存了相关信息的判断接口,来决定是否要弹窗授权。


4. 总结

调整后,开发者如需获取用户身份标识符只需要调用​​wx.login​​​接口即可。开发者若需要在界面中展示用户的头像昵称信息,可以通过​​<open-data>​​​组件进行直接渲染,不需要用户确认也不需要调用 Api,可以在界面中直接展示。如果需要获取用户信息可调用​​wx.getUserProfile​​接口,但是开发者每次通过该接口均需用户确认,需要自行制定策略避免过度弹出弹窗骚扰用户,影响用户体验。看完这个赶紧看看有没有涉及到你的开发任务,合理排期避免手忙脚乱。我是:码农小胖哥,多多关注,为你带来最实用的编程资讯。


紧急!微信小程序登录接口重大变化,前后端来活了。_编程语言_02

紧急!微信小程序登录接口重大变化,前后端来活了。_接口_03