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

html5| 2018-11-8 22:40| 查看: 52| 评论: 0|原作者: 小程序定制|来自: 微信小程序开发

摘要: 小程序上登录请求微信授权返回的信息有点奇怪,只有openid,没有unionid,-当前Bug的表现:小程序使用微信账号登录时,请求微信授权返回的信息有点奇怪,只有openid,没有unionid;我们现在注册登录全是用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



有劳帮忙看看,急~

微信小程序开发者回复

开发者回复:

麻烦先明确问题


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


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

开发者回复:

我们是按照官方提供文档接入,好像还是不行呢。


程序流程是这样的:


小程序调用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


解密


开发者回复:

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

开发者回复:

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

开发者回复:

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


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


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


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

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

开发者回复:

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


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

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


开发者回复:

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

开发者回复:

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

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

开发者回复:

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


程序流程是这样的:


小程序调用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


解密


开发者回复:

你把顺序弄反了吧?

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

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



开发者回复:

已经找到原因了。


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

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


开发者回复:

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


UnionID获取途径

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


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


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


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


开发者回复:

很奇怪,已经是调用接口 wx.getUserInfo来获取UnionID,部分用户微信登录时候,却获取不到?



开发者回复:

解码了还是没有?

开发者回复:

嗯,还是部分用户获取不到unionid


程序流程是这样的:


小程序调用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


解密


本文整理自网络,如有侵权请联系删除,微信小程序开发 http://html51.com,开发小程序、定制小程序来51小程序网。

鲜花

握手

雷人

路过

鸡蛋
收藏

最新评论

小程序开发问答相关问题

QQ|手机版|51小程序,合作QQ: 2826431922 ( 苏ICP备15027371号 )

Powered by Discuz! X3.2

返回顶部