快被小程序的unionid机制搞疯了
发布于 5 年前 作者 xujie 6756 次浏览 来自 问答

先说一下前提:

  同一主体开发了公众号+多个小程序组合,为了避免在多个小程序之间重复注册,使用了unionid机制进行会员数据关联。

在直接调用wx.getUserInfo的时候一切正常,只是默认要弹出请求授权窗口,拒绝授权的使用openSetting再次请求授权

好了,后来说wx.getUserInfo将要作废,建议使用button按钮获取userInfo信息授权。于是我们把默认的wx.getUserInfo改成了默认wx.login,那么问题来了,wx.login根据unionid机制,部分会返回unionid,部分用户不返回unionid(用户仅操作当前小程序并未关注或者操作过同主体下其他小程序)

https://developers.weixin.qq.com/miniprogram/dev/api/unionID.html

然后我们要再判断如果wx.login接口没有返回unionid字段,跳转到一个单独的授权页面,点击<button open-type=“getUserInfo” 的按钮授权获取用户信息。

然后我们再根据获取的unionid字段匹配数据库会员资料,未注册再次跳转到单独的注册页面,进行手机号码验证注册

问题1:wx.login接口返回 unionid规则复杂,难以理解

Why?为什么要有这么奇葩的规则?同主体小程序绑定到了开放平台,进行了认证。为什么要这么奇怪的规则,增加接口复杂性。经常会误解为都会返回unionid字段,一般开发用的测试号由于都操作过同主体其他小程序都会返回unionid

问题2:点击<button open-type=“getUserInfo” 按钮回调,e.detail.userInfo 已经包含了用户昵称、头像、地区、性别等信息,唯独不返回openid,unionid字段,需要用e.detail.iv  + code  去服务器解密获取。难道openid,unionid字段比用户昵称、头像等信息更隐私吗?为何要如此大费周章才能给openid,unionid字段

问题3:wx.getUserInfo作废能给具体时间吗?开发工具、体验版都已经弹窗不建议用了,但是正式版又可以使用。开发天天要被问“我看到被人家的xxx能用弹窗授权噢”,每天都要解释,开发到底是要用呢还是不用呢?

10 回复

为了处理getUserInfo的问题,增加了几百行代码

这个机制的设计者肯定不用自己写代码的

第一个和第二个问题,老话题了,unionid机制简直是奇葩。

第三个问题,官方的回答是线上版本不受影响,但是这句话我又有个疑问,线上已经在运行的版本不受影响我可以理解,但是这些人都不用更新代码了吗?还是说更新了线上一样可以正常使用,只是你没办法在本地调试,相当于在开发环节就不让你用这个功能迫使你放弃?

拿openid和unionid做关联,就不用老是调用授权,还有就是觉得 只要用户授权允许以后,调用wx.login都能拿到unionid才是科学的做法

我们团队在开发这的时候也感觉很麻烦。

后来的做法是先wx.login(), 如果有unionId就直接过,如果没有就出授权弹窗,后端处理成功后就有unionid了

希望简单一点,只要绑定了开放平台,就返回unionId

这不都后台的事么。。。。前台就判断下权限而已,又没啥的

wx.getUserInfo接口线上规则没有变更  线下也是有办法解决调试问题的   增加一个专门的授权页  测试的时候先扫授权二维码  再扫其它的  就可以直接调用wx.getUserInfo    逃。。

正常啊,腾讯的unionid就是皮~

关于wx.getUserInfo的问题也是千百遍的解释,真是醉了,感觉文档里的东西没一点权威性

回到顶部