收藏
回答

小程序上登录请求微信授权返回的信息有点奇怪,只有openid,没有unionid

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小程序 Bug iOS iOS 12 iphone 6 6.7.3

- 当前 Bug 的表现:


小程序使用微信账号登录时,请求微信授权返回的信息有点奇怪,只有openid,没有unionid;

我们现在注册登录全是用unionid的,就报错了;

非常的诡异。


小程序上已经是调用接口 wx.getUserInfo来获取UnionID,但是部分用户微信登录时候,却获取不到?




如下面异常信息没有unionid


object(stdClass)#25 (2) {

  ["session_key"]=>

  string(24) "9J6u+ywvbQQTggJfTlPi8g=="

  ["openid"]=>

  string(28) "osgEB5e2_RrNU4N4f5e8xcTREN8s"

}



- 预期表现


object(stdClass)#24 (3) {

  ["session_key"]=>

  string(24) "EoRkGVV54XoB5+s5Kguo0A=="

  ["openid"]=>

  string(28) "osgEB5SEojaE9yGB8bE83wOmBObQ"

  ["unionid"]=>

  string(28) "o3BP7w4kci7rYCN5qAo7SXUVQfIc"

}



因为目前官网PC端、移动APP和小程序都是绑定在同一个微信开放平台账号下的,使用微信登录,考虑小程序登录账号统一性使用unionid来登录,但是出现如上异常,导致部分用户的微信账号无法登录小程序。





以下是官方文档说明:


小程序绑定微信开放平台帐号后,可与帐号下的其他移动应用、网站应用及公众号打通,通过UnionID机制满足在多个应用和公众号之间统一用户帐号的需求。

UnionID机制说明

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

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



有劳帮忙看看,急~

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

4 个回答

  • Band
    Band
    2018-10-23

    麻烦先明确问题


    是wx.getUserInfo的加密包解密后发现没有unionid?


    还是jscode2session接口,以code调用的时候没有返回unionid?

    2018-10-23
    有用
    回复 1
  • 彭凡
    彭凡
    2018-10-23

    满足3条件的一些新创建的账户(可疑账户), 在login时也拿不到unionid.

    2018-10-23
    有用
    回复 4
    • 未知驱动
      未知驱动
      2018-10-24

      你也遇到这种情况吗?最终解决了没?

      2018-10-24
      回复
    • 彭凡
      彭凡
      2018-10-24回复未知驱动

      最终没解决. 麻烦帮忙反馈反馈.


      我遇到的问题是在满足条件3的情况下:   <<如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login+ code2Session 获取到该用户 UnionID>>


      wx.login + code2session没有获取到部分微信号的unionid.     目前测试出来的是新手机号创建的账号, 存在这个问题. 其它的账号没问题.


      同时, 如果我拿找个可疑新号去关注公众号, 即条件2, wx.login + code2session就可以拿到unionid了. 但是PM不同意关注公众号.

      也不太想需要多点击一次授权走条件1, wx.getUserInfo拿unionid.

      2018-10-24
      回复
    • 未知驱动
      未知驱动
      2018-10-26回复彭凡

      我们终于解决了,找到原因了。


      个别情况是用户返回不了unionID,然后解密时也遇到失败的情况,目前做了些兼容处理就可以了

      还一些我们程序内部的问题,比如获取微信用户头像上传的问题,有些用户根本就没头像,所以就失败了


      2018-10-26
      回复
    • Ru Chu.🤒
      Ru Chu.🤒
      2018-11-08回复未知驱动

      楼主 , 我这边遇到的是同样的问题 , 我没调用getUserInfo这个方法 , 但是我小程序绑定了开放平台 , 也关注过改平台下的公众号  但是通过 wx.login + code2session还是拿不到用户的 unionid , 为什么?

      2018-11-08
      回复
  • Stranger
    Stranger
    2018-10-23

    wx.getUserInfo 方法指定 withCredentials 参数,然后再解密应该就有unionid了

    https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html

    2018-10-23
    有用
    回复 3
    • 未知驱动
      未知驱动
      2018-10-24

      感谢,按照这个试了,还是不行呢,真是很奇葩问题


      程序流程是这样的:


      小程序调用wx.getUserInfo接口,获得iv、signature、encryptedData

      后端获取上面三个值后,调用jscode2session获取session_key

      最后使用iv、session_key来解密encryptedData


      encryptedData是在第一步wx.getUserInfo接口获得的

      jscode2session只是为了获取session_key

      https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95


      解密


      2018-10-24
      回复
    • Stranger
      Stranger
      2018-10-24回复未知驱动

      你把顺序弄反了吧?

      1. 先调用jscode2session获取session_key,保存在后台。

      2. 然后再调用wx.getUserInfo 得到加密的数据传输到后台解密。



      2018-10-24
      回复
    • 未知驱动
      未知驱动
      2018-10-26回复Stranger

      已经找到原因了。


      个别情况是用户返回不了unionID,然后解密时也遇到失败的情况,目前做了些兼容处理就可以了

      还一些我们程序内部的问题,比如获取微信用户头像上传的问题,有些用户根本就没头像,所以就失败了


      2018-10-26
      回复
  • 403
    403
    2018-10-21

    用户不符合2,3点吧,那就只能用第一种方式拿unionid


    UnionID获取途径

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


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


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


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


    2018-10-21
    有用
    回复 3
登录 后发表内容