对微信公众号中的unionid和openid的浅解~

 

UnionID机制,官方的解释是:

通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通。只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。

此前的OpenID机制,每个微信号对应每个公众号只有唯一的OpenID,所以不同微信公众号之间是不能共享用户的,现在有了UnionID就可以了。

开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
 

OpenID机制

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)

OpenId是根据appId生成的,在一个app中openId是唯一的,也就是说同一用户在不同的APP中openId是不一样的

同一个应用(App、公众号、小程序)的同一个用户有唯一的openid

openid 是针对应用唯一的,unionid 是针对企业唯一的

 

可以经常看到网络上有这样的问题:

https://api.weixin.qq.com/cgi-bin/user/info?access_token=&openid=
我利用这个接口有时候可以获取到用户信息,有时候又获取不到,请问这是哪里的问题?
或者说有没有其他方法可以获取到用户的unionid?  

原因在于

没有关注公众号  这个接口是获取不了用户的信息的;Unionid这个信息,是要把公众号绑定在微信开放平台上之后才有的。没有绑定,即使用户关注了公众号也没用。

请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

unionid 是微信开放平台的——
对于绑定了同一个开放平台的两个服务号 A 和服务号 B,用户 1 关注 A 和 B 会有不同的 openid,但他们的 unionid 的相同的。
也就是说可以用它来确定多个公众号的用户是否是同一个人。当然可以通过公开信息判断,但并不严谨,因为资料都是可以修改的,雷同也是完全可能的。
当然,其实不用 unionid 也是可以实现这个需求的。方法是,每次用户第一次访问公众号页面,让他自动跳转一个固定的公众号(静默授权,记录 openid ),再跳回来。这样的话不需要通过 unionid 也能知道用户在多个公众号是否为同一人。唯一的缺点就是用户的第一次访问页面需要跳转多次。

这里有一篇详细的参考,介绍如何在TP5本地环境下获取微信用户openId与用户信息:https://blog.csdn.net/Especial_/article/details/82382041

微信开放平台

open.weixin.qq.com 微信开放平台,刚开始是为了让开发商,可以支持很多的公众号,而产生的。原因是使用appid和appsecret的方式对于。小程序或公众号的所有者来说太危险,相当于暴露了用户名和秘密。为了安全,出现了开放平台,授权时可以灵活的控制授予哪些权限。开放平台相比appid和appsecret方式还有很多特权。对于开发者是很好的。

官方的说明比较简单,开发过程中会遇到不少的坑。下面说一下注意事项

  • 公众号开发时只有用户关注了公众号,才可以获取到unionid。如果用户不关注或取消关注公众号,是无法获取unionid的。

  • 必须将公众号或小程序绑定到开放平台才可以获取unionid

进入开放平台,点管理中心。可以看到移动应用、网站应用、公众账号、小程序、第三方平台这些菜单。

如果要绑定公众号就,点击公众账号菜单,然后点击绑定公众号,填写公众账号、密码、验证码,点下一步,然后需要管理员扫码。之后就绑定了。

unionid的值不同

第三方开放平台,开发过程中会遇到,同一个用户,在两个公众号下,获取到的unionid不同的情况。这种情况发送的原因是,两个公众号绑定到了不同的开放平台账号造成的。

不管是小程序还是公众号,一个开放平台的是有绑定限制的。比如小程序相同主体:上限50个,绑定次数不限。不同主体:上限5个,本月还可以绑定5次。公众号相同主体:上限50个,绑定次数不限。不同主体:上限5个,本月还可以绑定5次。

所以一般情况下,会让客户自己注册一个开放平台,然后把客户的公众号和小程序绑定上去。

比如客户A注册开放平台是平台A,注册小程序是小程序A,注册公众号是公众号A客户B注册开放平台是平台B,注册小程序是小程序B,注册公众号是公众号B

他们各自绑定各自的开放平台。小程序A公众号A绑定平台A小程序B公众号B绑定平台B

开发过程中会出现同一个微信用户,在公众号A小程序A获取到的unionid是一样的比如都是;公众号B小程序B中获取的unionid也是一样的。但是公众号A公众号B获取的unionid不一样。

造成这样的原因是因为绑定的开放平台不用,每个unionid的产生,其实是用户跟开放平台的唯一对应关系。小程序A公众号A绑定平台A因此他们的unionid一样,公众号A公众号B绑定在不同的开放平台所以取到的unionid不一样。

还有一点要注意,开发公司A的开放平台公司A平台,同一个平台下创建多个第三方平台用于开发,这些第三方平台也会取到相同的unionid。

重要的事情说三遍unionid与绑定的平台有关,unionid与绑定的平台有关,unionid与绑定的平台有关,unionid其实是用户和开放平台账户的对应关系。

有一点值得注意:如果有个开发公司B,在开放平台公司B平台,有公众号A授权的情况下,取到的unionid与公司A平台获取的公众号A的unionid也会一样。这其实也是为了便于微信做大数据 分析,知道一个用户所有行为。

获取openid主要是两个步骤

  1. wx.login()得到code

  2. 通过code以及appid,secret 得到openid

详细解释说明,请参考微信官方文章:https://mp.weixin.qq.com/s?__biz=MzI4MzQ5ODcyMQ==&mid=2247486248&idx=1&sn=6db9bb2e1092e7559f5cd0b1a1cdc4f6&chksm=eb888aa6dcff03b046f90d65a29b381be55e20dc370335c609c75cc34c344c75e376e167545f&xtrack=1&scene=0&subscene=93&clicktime=1601253048&enterid=1601253048&ascene=7&devicetype=android-29&version=3.0.31.2998&nettype=ctnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AXu2PDIUIT5MaNkesx4VYoA%3D&pass_ticket=tAsjpIosFnUML2UhV84CeZM%2BOiRNin0%2BSM%2Bs2TS4n%2FpERfDChlNljy9oflbAvoi5&wx_header=1&platform=win

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值