关于微信开发时候的UnionId问题

什么是unionId?

微信为了将同一个公司/实体的不同应用里的同一个用户关联起来。(好绕)

为什么要有unionId这个东西?

定义的很清楚,因为账户系统需要知道从公司的各个微信应用中(小程序、网页、APP)进来的用户是同一个。便于账号管理,否则可能会出现同一个人由于使用不同的应用造成多个账号的问题。对用户来说,最好是无感的。

实际情况中,很常见的一种情况:先有公众号,网页开发,一段时间,然后上线小程序或者APP。这时候就必须将原有的网页授权信息补充unionid,因为原来可能是没有的。可以通过微信API批量地获取「已关注公众号」用户的unionId并更新到系统里。

但是,之前的授权信息可能是单次授权,用户并没有关注公众号,那么对于这部分用户,是无法通过微信的API获得unionId的。

这时候,就需要在系统逻辑中兼容这种情况,即下次这些用户登录时候,如果unionId没有,就要顺便将unionId更新上。但是,如果这些人通过小程序或者APP进来呢?因为之前的账户信息没有unionId,所以小程序登录后无法通过unionId关联到之前的账号(而之前的账号有可能是有资产的,比如余额、积分、券)。

一种解决办法是:检查所有没有unionId,也没有关注公众号的用户,将信息删除掉。这样下次这部分用户直接就有unionId,重建账号。缺点是:如果用户账号里有资产,这样就不合适了。:-p

另一种解决办法:账号体系强制关联手机号码(前提是从系统建立之初就是这个规则),这样就可能通过手机号进行一次关联,如果关联到,则将新的小程序或者APP指向手机号码指向的用户。缺点:前提可能并不存在 – 毕竟没有必要强制做手机号码关联这件事。

没有其他解决办法了。

这种问题的产生原因就非常蛋疼。