微信小程序又双叒叕改重要接口了!

lxf2023-05-06 00:58:27

微信官方在2021年2月24号发布了一篇小程序登录、用户信息相关接口调整的通知,规定在2021年4月28日24时停止wx.getUserInfo接口获取用户信息的能力。

通知调整了什么?

这个通知主要调整的内容有三块:

1. 放开wx.login获取unionid的能力:

只要开发者将小程序绑定在开放平台上,那么开发者调用这个接口就能获取到用户的unionid。这样就避免了开发者需要调用wx.getUserInfo接口让用户授权来获取用户unionid的问题。也为下面一个调整扫清了障碍。

2. 停掉wx.getUserInfo接口获取用户信息的能力:

可能微信官方也意识到了wx.getUserInfo这个接口的问题,这个接口的设计其实并不合理,为啥呢?因为这一个接口干了两个事情:第一是获取用户信息(就是头像昵称等),第二呢,这个接口还承担了获取用户unionid的功能。这就导致开发者为了打通多个小程序、公众号、移动应用等的数据,而调用wx.getUserInfo接口。开发者事实上的需求只是获取用户unionid(这本应该是登录接口给出的信息),而不是用户头像信息,也就是说这个接口事实上被滥用了。

3.使用wx.getUserProfile接口获取用户信息:

如上面所说,由于意识到wx.getUserInfo接口设计不合理,微信就将这个接口废除了,用wx.getUserProfile取代之,新接口的功能很明确:获取用户信息。

怎么看待这个调整?

在我看来,这次的调整其实彻底划清楚了小程序登录与授权的界限。关于小程序登录与授权请参考这两篇文章:小程序登录、小程序授权。 首先unionid完全由wx.login接口获取,没有再跟用户头像等信息搅合在一起,登录的功能归了登录;授权头像由getUserProfile接口获取,授权的功能归了授权的接口。这样就贯彻了一个接口只做一件事情的原则。因此,从设计的角度来说,这次的调整是完全合理的。 当然,这个调整过程也比较迅猛,很多开发者对此都颇有怨言,也许官方能有更合适的做法吧。

新开发的小程序该怎么做?

通知的最后部分有这样一段最佳实践:

调整后,开发者如需获取用户身份标识符只需要调用wx.login接口即可。 开发者若需要在界面中展示用户的头像昵称信息,可以通过组件进行渲染,该组件无需用户确认,可以在界面中直接展示。 在部分场景(如社交类小程序)中,开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认,请开发者妥善处理调用接口的时机,避免过度弹出弹窗骚扰用户。

这段话其实写得很清楚了,对于不需要用到其他用户信息的小程序,完全不必调用接口去获取用户信息,直接使用开放数据即可展示自身头像性别,参考这篇官方文档。 如果确实需要其他用户的用户信息,比如做一个评论功能,可能需要展示所有评论人的信息,像这种就必须在用户评论前通过wx.getUserProfile接口来获取其用户信息了。

代码如何修改?

对于已经上线的代码该如何修改呢? 首先需要检查小程序客户端所有用到wx.getUserInfo接口的地方,将这个接口替换成wx.getUserProfile。同时检查下小程序服务端代码,看看是否用到了wx.getUserInfo解密后unionid字段,若有,则需要做好兼容(因为wx.getUserProfile不会返回unionid)。如果还要做得更细致些,那么还需要处理微信版本的兼容问题,具体请参见官方文档。

参考项目

具体实现可以参考我的商城小程序项目。

项目体验地址:体验

代码:代码

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!