总结下工作中对接网页微信登录时,遇到的一些小问题。
开发场景为:系统有微信公众号内嵌H5版本,H5版本包含公众号微信授权登录的一批老用户,网页扫码登录功能需解决老用户数据同步的问题。
1.微信登录功能流程图
以下取自微信开放平台
简要流程:
1.请求code码
按照微信提供的请求方式,配合申请的应用的参数请求code码
2.通过code获取access_token
3.通过access_token调用获取用户信息接口,即可拿到用户信息
2.遇到的问题以及解决方案
问题
用户表中会存储用户的微信openid,即普通用户的标识,对当前开发者账号唯一,新用户扫码登录后,流程正常,老用户登录后,会引发openid不一致的问题,即公众号登录与扫码登录返回的同一个用户的openid不相同的情况,经过查阅微信开发文档发现,返回的用户信息中有一个值unionid:用户统一标识。针对一个微信开放平台账号下的应用,同一用户的unionid是唯一的。并且文档中建议:开发者最好保存用户unionID信息,以便以后在不同应用中进行用户信息互通,故此次问题发生的原因为公众号与网站应用在申请建立时划分为两个应用进行管理,需要用unionid进行唯一识别,而非openid。
解决方案
1.H5应用登录时,原先为保存用户openid作为微信用户标识,修改逻辑,登录后新增保存用户的unionid信息,作为微信登录用户唯一标识
2.另外一种情况,如果用户使用网页扫码登录之前,未使用过H5登录,那么unionid字段为空,那么微信扫码登录逻辑需判断用户unionid为空,所以此处需要更新unionid
3.首次注册的用户使用网页登录时,采用保存用户openid和unionid到redis的方式,携带手机号加密作为key,在绑定手机号时做更新
以上步骤即解决了这个小问题。