收藏
回答

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

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug unionid机制 微信iOS客户端 6.7.1 2.2.0

先说一下前提:

  同一主体开发了公众号+多个小程序组合,为了避免在多个小程序之间重复注册,使用了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能用弹窗授权噢”,每天都要解释,开发到底是要用呢还是不用呢?




最后一次编辑于  2018-08-03
回答关注问题邀请回答
收藏

23 个回答

  • A凸凸_精彩依旧
    A凸凸_精彩依旧
    2018-08-06

    不算麻烦吧,我写好了

    2018-08-06
    有用
    回复
  • Nicholas
    Nicholas
    2018-08-06

    unionId主要是还好吧  主要是后端的工作  懂得怎么区分就好了

    2018-08-06
    有用
    回复
  • 铅笔Naruto
    铅笔Naruto
    2018-08-06

    6

    2018-08-06
    有用
    回复
  • 2018-08-06

    这个应该是微信业务扩展加上以前没有想到的这个所埋下的坑吧

    2018-08-06
    有用
    回复
  • 空白
    空白
    2018-08-06

    话说

    我的理解是这样的   wx.login  这个用来获取    sessionKey       然后用按钮调起   getUserInfo的授权   授权之后  解密拿到unionid

    我目前所有unionid都用这种方法来获取    就不用考虑 用户有没有关注过微信公众号或小程序了


    2018-08-06
    有用
    回复
  • 郭宇
    郭宇
    2018-08-06

    就是,自己的平台的unionid都拿不到,搞笑

    2018-08-06
    有用
    回复
  • 陆志均
    陆志均
    2018-08-05

    小程序就不应该搞那么复杂,关注过的直接登录,没关注的绑定账户,wx.getUserInfo?不存在的

    2018-08-05
    有用
    回复 1
    • Bob
      Bob
      2018-08-06

      首先。小程序没有“关注”这个概念;其次,小程序要跟公众号、app以及ERP等其他系统打通,需要做关联。并不是每个小程序都是文章展示类轻量化操作

      2018-08-06
      回复
  • 王焯
    王焯
    2018-08-05

    我们都是不管unionid有时有,有时无,统统按获取不取处理,让后台去获取。本身,你前端获取unionid有什么用,不还是要后台查数据库时用的吗?

    2018-08-05
    有用
    回复 4
    • 龙虾狂魔
      龙虾狂魔
      2018-08-05

      调皮!后端能获取到unionid还要我们这么费劲干嘛,关键就是他们获取不到,unionid在getUserInfo返回的加密数据里。。。。

      2018-08-05
      回复
    • 2018-08-06回复龙虾狂魔

      unionid 也可以在 wx.login 获取吧

      2018-08-06
      回复
    • Bob
      Bob
      2018-08-06回复

      不一定,需要满足文档上说的3个条件。会造成有的用户wx.login获取得到unionid,有的没有。要做额外的判断与处理机制

      2018-08-06
      回复
    • 王焯
      王焯
      2018-08-08

      汗。是你没搞清楚楼主的问题吧。unionid有时能通过wx.getUserInfo直接获得,有时不能,不能直接获得的时候才需要用到加密数据,这时必须让后台去获得。

      2018-08-08
      回复
  • 子夜
    子夜
    2018-08-04

    嗯,玩的时候特别恶心

    2018-08-04
    有用
    回复
  • 2018-08-03

    session_key 是自己的服务器 和微信服务器进行通信的秘钥,然后自己还要生成一个秘钥和微信小程序保持通信  具体用法我找了好久啊  文档啊啊啊啊啊啊啊啊啊

    2018-08-03
    有用
    回复

正在加载...

登录 后发表内容