unionid概况
微信开发过程中,经常会遇到,一个企业有多个小程序和公众号,在不同的小程序和公众号中,会有不同的openid。如果想要确定是同一个人,就需要用到unionid机制。
官方关于unionid的说明是这样的
公众号文档的描述
开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
小程序文档的描述
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。
开放平台
提到unionid就不得不提微信开放平台了。
https://open.weixin.qq.com 微信开放平台,刚开始是为了让开发商,可以支持很多的公众号,而产生的。原因是使用appid和appsecret的方式对于。小程序或公众号的所有者来说太危险,相当于暴露了用户名和秘密。为了安全,出现了开放平台,授权时可以灵活的控制授予哪些权限。开放平台相比appid和appsecret方式还有很多特权。对于开发者是很好的。
注意事项
官方的说明比较简单,开发过程中会遇到不少的坑。下面说一下注意事项
- 公众号开发时只有用户关注了公众号,才可以获取到unionid
如果用户不关注或取消关注公众号,是无法获取unionid的。
- 必须将公众号或小程序绑定到开放平台才可以获取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也会一样。这其实也是为了便于微信做大数据 分析,知道一个用户所有行为。
参考资料
https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html