小程序上登录请求微信授权返回的信息有点奇怪,只有openid,没有unionid
发布于 5 年前 作者 jie31 1463 次浏览 来自 问答

- 当前 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

有劳帮忙看看,急~

4 回复

麻烦先明确问题

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

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

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

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

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

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

UnionID获取途径

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

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

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

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

回到顶部