微信小程序登陆接口一些变化
文章目录
最近帮别人搞微信小程序的时候发现微信小程序接口已经变化.然后顺便更新了下我博客的小程序.
起因
今天早上迭代小程序时候发现了通过小程序登陆自己博客,登陆后自己的名字永远显示'微信用户',头像也是一个灰色的,城市,国家这些信息都是没有的.
原因
微信在2021年4月13号对小程序接口做了变更,如果是4月13号之前发行的版本不受影响.
之后的版本受影响.
哪怕你小程序回退到4月13号之前发布的版本也没用.
小程序端调整
原来
是一次用户登陆授权即可,登陆后,只需要判断用户是否授权(scope.userInfo)即可.
然后可以无限次静默调用wx.getUserInfo获取用户(加密的)信息.
现在
因为接口变更wx.getUserInfo已经不再弹出授权信息,默认授权,而且不返回微信名字之类的信息.
此接口基本上废了.
小程序推出了新接口wx.getUserProfile代替.用法有变化.
1,完全无法静默调用.
2,无法通过onLaunch这种自动的页面函数中调用.
3,只能通过tap手势点击某个图片或者按钮之类的才能触发.
4,或许可以用wx.showToast之类的弹出提示中触发(不确定,极有可能不行).
调整点
1,删除授权信息获取判断关于scope.userInfo的.
原因有两点:
第一是接口变化,现在每次调用wx.getUserProfile获取用户信息都会弹出授权窗口,你无法静默方式获取用户信息了.
第二就是你无论如何获取scope.userInfo都只会返回True.
2,对原登陆代码进行改造,兼容
官方参考--> https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html
3,注意点,wx.login和wx.getUserProfile有前后顺序.要先调用wx.login获取code先.
4,然后就是自己也要在小程序上缓存用户登陆的头像,用户的微信名字,避免下次还要授权.
WEB服务器端调整
此部分调整要看之前的逻辑.如果是依赖unionID的,服务器端可能就需要调整.
比如我博客就是完全靠unionID判断用户的.所以需要调整.
原来
因为原来unionId会在两个地方出现,一个是code换取session_key的时候,还有解密用户数据的时候.
现在
unionId相关
unionId还是会在code换取session_key的时候出现.
但是解密用户数据分两种情况.
1,微信用户是老微信版本:
不支持wx.getUserProfile接口,这样会解密出unionId(也就是上面上面那个图说的,没有用户名字,头像之类的)
2,通过wx.getUserProfile接口返回的情况:
这种情况解密的用户数据是不包括unionId的.只能通过code换取session_key的时候拿到unionId.
比较悲剧,我原来恰恰是通过解密用户数据获取unionId情况.
所以相关逻辑代码都要改.
原来我只是缓存了code以及对应的session_key,现在也要缓存对应的unionId或者openId了.
数据库都要加字段.
更新用户数据相关
更新用户数据也要考虑用户是老接口(wx.getUserInfo)还是新接口(wx.getUserProfile)的情况.
如果是老接口不更新用户新登陆的数据.
//适配新版的微信小程序,防止用户没有资料传入的情况下,更新用户数据
if ( ($rrs['nickName'] == '微信用户') && ($rrs['city'] =='') && ($rrs['province'] =='')
&& ($rrs['country'] =='') ){
}else{
$allow_field = array('nickName','openId','gender','language','city','province','country','avatarUrl');
User::update($vrrs, ['unionId' => $unionid],$allow_field);
}
参考
https://viencoding.com/article/300
https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801