在前期只做了微信小程序而没有绑定微信开放平台所以用户只存了openid,但是后期我们又要做app了要与小程序共使用同一套用户体系,虽然后来已经将小程序和app绑定在了同一开放平台,但是app用微信授权只能获取到unionid,而小程序在绑定到开放平台之前的老用户是都没有unionid的。所以没有unionid这部分老用户在app端使用微信授权的话没有办法对应到小程序的用户相当于一个新的用户,这显然是不可以的,而且也没有办法使用手机号登录,因为只有少部分认证用户才有手机号,大部分人是没有办法通过手机号登录的。
于是我就想通过openid来换取unionid,如果可以批量换取的话我呢提就解决了,但是此路不通。翻阅各大社区论坛都没有合适的解决方案,官方也没有提供,但我们也不想让一个用户在平台上出现多个账号,只能另想办法。
最终在与同事沟通之后出了以下方案:
1.在小程序端用户重新授权之后获取到unionid同步到数据库。
2.如图:
小程序端授权登录优先使用unionid,次之使用openid做注册登录。
app端用微信授权登录对比unionid,次之使用小程序授权登录。
app端用手机号授权登录对比手机号,次之使用小程序授权登录。
在app端第一步不管选择微信授权登录还是手机号登录,第二步必须安排小程序授权登录。因为这样可以保证即时第一步登录失败了再进行第二步登录是一定成功的。结合数据的话,有openid没有unionid的用户不到三万,这部分用户在小程序内重新授权一次就可以得到unionid,所以没有unionid的用户会越来越少。有unionid的用户约9万,也就是大部分人可以通过微信授权直接登录,无法直接登陆的需要拉起小程序授权根据openid来判断后其是新用户还是老用户。绑定手机号的用户约5000,这5000人可以通过手机号直接登录成功,无法直接登陆的也是需要拉起小程序授权根据openid来判断后其是新用户还是老用户。这样的缺点就是部分用户需要经行两次授权才可以登陆成功,所以要首推微信登录,其次是手机号登录。