快被小程序的unionid机制搞疯了

发布于 7 年前作者 xujie6969 次浏览最后编辑 7 年前来自 ask

先说一下前提:

  同一主体开发了公众号+多个小程序组合,为了避免在多个小程序之间重复注册,使用了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 回复
jie13
jie131 楼6 年前

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

jqian
jqian2 楼6 年前

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

fangjie
fangjie3 楼6 年前

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

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

chao85
chao854 楼6 年前

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

xiuyingjin
xiuyingjin5 楼6 年前

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

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

jingcui
jingcui6 楼6 年前

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

dzhu
dzhu7 楼6 年前

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

ktao
ktao8 楼6 年前

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

lei02
lei029 楼6 年前

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

taoyao
taoyao10 楼5 年前

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