UnionID?管理多应用下的用户的好帮手!

383 阅读2分钟

介绍

做过微信服务接入的开发者应该都有见过这个UnionID,那么UnionID到底是做什么的呢?我们先来看下微信官方文档对UnionID的机制说明。

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

解释 我们知道微信应用的一个优势在于,使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决。试想一下使用微信小程序的时候我们还需要再在小程序应用上再注册一个账号吗?在微信的小程序应用里面我们可以自行的编辑我们的用户信息,但是不管怎么修改小程序都知道我们的身份,原因就是因为它的用户表绑定的UnionID和微信开放平台的用户表里面的UnionID是一样的。OpenID在应用中是唯一的,就像是身份证,我们可以利用OpenID通过本接口获取到用户的信息。而这个UnionID像是国籍,不论身份证是什么样的,一个国家签发的终究是同一个国家的公民,走到哪里都不会变。

需求提出

这个时候我们就想,我们明明也开发了很多应用,而且甚至还有官网,这个UnionID微信能弄我们为什么不能弄?当然可以,而且使用UnionID可以大大的便利化我们对同一个平台的子应用的控制。

应用场景

我们开发每个单体应用的时候都要建一个用户表,字段是按照需求设置的。如果要搭建上述服务应当在表中加入union-id字段,同时我们要清楚这个union-id是直接依赖一个我们指定好的应用的用户表里的union-id字段。

UnionID的生成可以使用我们分布式唯一ID的生成策略

  • UUID Java标准类库中已经提供了UUID的API
UUID.randomUUID()
  • SnowFlake雪花算法 引入hutool依赖
1.  <dependency>
1.  <groupId>cn.hutool</groupId>
1.  <artifactId>hutool-captcha</artifactId>
1.  <version>${hutool.version}</version>
1.  </dependency

调用api

IdUtil.createSnowflake(workId, centerId)

这样要是主应用有用户的话,我们在公司旗下产品的其它做绑定的时候就将主应用里面的UnionID给覆盖到该应用的用户表。完成了子应用和主应用的关联。