微信开发unionid详解

unionid概况

微信开发过程中,经常会遇到,一个企业有多个小程序和公众号,在不同的小程序和公众号中,会有不同的openid。如果想要确定是同一个人,就需要用到unionid机制。

官方关于unionid的说明是这样的

公众号文档的描述

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

小程序文档的描述

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

开放平台

提到unionid就不得不提微信开放平台了。

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

注意事项

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

  1. 公众号开发时只有用户关注了公众号,才可以获取到unionid

如果用户不关注或取消关注公众号,是无法获取unionid的。

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

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

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

小程序的流程也差不多。

  1. 一个公众号或小程序只能绑定一个开放平台

这与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