UnionID
分类:微信 别名:unionid

UnionID机制,官方的解释是:

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

重点是只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。

那么:我有个服务号、订阅号还有小程序呢,想实现它们之间的用户数据互通,该怎么处理?每个号所获取的用户的openid都是不一样的。

UnionID的出现就是解决这个问题的。

所需材料:微信open平台,需要做数据互通的账号。

在将公众号绑定到开放平台之前,获取一个未关注用户的基本信息,以下是微信返回的数据:

{
    "subscribe": 0,
    "openid": "xxx"
}

上图所示,只能获取到用户的关注状态。其他信息我们都获取不了。

把公众号和小程序都绑定上,看看调用接口后,微信会返回什么。

绑定后,分别请求公众号和小程序的userinfo接口。

小程序:

{
    "subscribe": 0,
    "openid": "xxx",
    "unionid": "xxx"
}

公众号:

{
    "subscribe": 1,
    "openid": "xxx",
    "nickname": "Zixu Liao",
    "unionid": "xxx"
    ...
}

多了一个unionID字段,无论用户有没有关注,都会有返回的一个字段,这个unionid数据在小程序和公众号接口返回中都是一致的。

在小程序端,调用wx.login获得code后,向微信服务器索取openid,看看会获取到什么

{
    "session_key": "xxx",
    "openid": "xxx",
    "unionid": "xxx"
}

针对老系统的升级方案其实比较简单,如果要新增小程序的话,可以沿用原来的数据库,新增两个字段,一个用来存储unionid,则另一个用来存储小程序的openid。

需要注意的是「微信官方没有提供unionid to openid 的反查接口」

关闭