收藏
回答

小程序登陆后,wx.getUserInfo()无法获得unionId

问题模块 框架类型 问题类型 操作时间 AppID
管理后台 小程序 Bug 2018-11-21 wxd60bb7c4162ea6bc

- 当前 Bug 的表现(可附上截图)

如标题所述,getUserInfo() encryptedData解密后没有unionid

微信公众平台的小程序账号已绑定了公众号,微信开放平台也帮定了同一公众号


- 预期表现

在上述情况下,调用API时能获得unionId


- 复现路径

使用我们的APPID调登陆接口成功后再调wx.getUserInfo(),查看结果是否不包含unionId内容


- 提供一个最简复现 Demo

如下是调用该接口返回的解密后的结果(屏蔽了一些敏感信息):

{

  "openId": "oJEEZ******gDasmAHXrE_7****U",

  "nickName": "Waikit",

  "gender": 1,

  "language": "zh_CN",

  "city": "Shenzhen",

  "province": "Guangdong",

  "country": "China",

  "avatarUrl": "https://wx.qlogo.cn/mmopen/vi_**/iaRAVC3t5Ts2xzMHtjv2Oiag3ehLiaYvDQw07aP57TFqKK5W8IFNiaR6QAQicwSicDa1agjx5WIscUrqS3a3Nv3QBtibA/***",

  "watermark": {

    "timestamp": 1542780768,

    "appid": "wxd60bb7*****ea6bc"

  }

}


最后一次编辑于  2018-11-21  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • Link
    Link
    2018-11-23

    如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

    绑定了开发者帐号的小程序,可以通过下面 4 种途径获取 UnionID。

    1. 调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

    2. 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

    3. 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

    4. 小程序端调用云函数时,当满足 UnionID 获取条件时可在云函数中通过 cloud.getWXContext 获取 UnionID


    参考文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

    2018-11-23
    赞同 1
    回复 2
    • kingofswing
      kingofswing
      07-19
      搭车请教:在看到Link贴的4种途径之前,我曾经用第2、3种方法获取到unionId,但不知道这是由于该微信用户已经关注了同主体的服务号之缘故()
      07-19
      回复
    • kingofswing
      kingofswing
      07-19
      我采用的方法是app.js里就调用 wx.login,返回code,再在后台调用laravel相关框架和JWT,返回accessToken,然后在index首页上方,设置按钮,用户点击授权后,将已经存放于本地的accesstoken和getUserinfo得到的iv encrypteddata发送到服务器,服务器从accesstoken parse到用户user(前面wx.login时已经保存了session-key 和openid),接着,就session-key+iv+encrypteddata,解密得到unionid。请教一个网络异步的问题:app.js还在提供登录中时,此时index也的允许授权按钮可以点了,这样一点,就可能拿不到accesstoken,因为app.js wx.login由于网络质量差,延时比较长。请问怎么才能保证在app.js wx.login后,才让index的获取用户授权按钮显示出来?
      07-19
      回复
  • 社区技术运营专员-白柿子
    社区技术运营专员-白柿子
    2018-11-21

    提供下openid,微信号以及appid

    2018-11-21
    赞同
    回复 10
    • 社区技术运营专员-娇华
      社区技术运营专员-娇华
      2018-11-21回复Waikit


      appid:wxd60bb7c4162ea6bc  这个appid还没有绑定开发者账号

      2018-11-21
      回复
    • Waikit
      Waikit
      2018-11-21回复社区技术运营专员-娇华


      可是这个appid我们已经绑定了5个开发者账号了

      2018-11-21
      回复
    • 广禄
      广禄
      2018-11-22回复Waikit

      老哥 你这不叫绑定开发者账号啊

      2018-11-22
      回复
    • 李俊杰
      李俊杰
      2018-11-23回复社区技术运营专员-娇华

      openid:ocXb_0AJa-qDoAUtGAYWyl1XTocU

      appid:wxa4ae8522b2603033

      你好,我们这个用户也获取不到UnionID

      2018-11-23
      回复
    • 社区技术运营专员-娇华
      社区技术运营专员-娇华
      2018-11-23回复李俊杰

      反馈收到,我们这边看下

      2018-11-23
      1
      回复
    查看更多(5)
  • 人互人😊🔣📉😯🎁测试
    人互人😊🔣📉😯🎁测试
    2018-11-22

    原因可能是:你没有先授权个人信息, 头像这个权限。调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

    2018-11-22
    赞同
    回复 1
    • 人互人😊🔣📉😯🎁测试
      人互人😊🔣📉😯🎁测试
      2018-11-22

      如果你使用wx.getUserInfo这个方法,那么请一定保证你已经授权个人信息这个去权限,不然一定获取不到

      2018-11-22
      回复