经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
统一微信公众号、小程序、APP的用户信息
来源:cnblogs  作者:林千山  时间:2018/10/9 10:15:53  对本文有异议

?上次接手一个项目需要整合公众号、小程序以及APP的用户,查阅了微信文档以及一些作者的文章,中间踩了不少坑,在此记录一下解决的流程。

要点

?实现统一信息的有以下几点:
?1. 在微信开放平台绑定需要统一信息的应用;
?2. 公众号采用以snsapi_userinfo为scope发起的网页授权,小程序使用wx.getUserInfo(Object object)授权,什么时候授权后面会解释;
?3. 数据库保存unionid。

具体实现

?解释下上面的第二点为什么一定要采用scope=snsapi_userinfo的方式,根据微信文档:微信网页授权使用这种方式可以跳过关注公众号获取该用户的基本信息,前提是用户同意授权,这里的授权只会授权一次,以后就不需要授权了。使用这种方式获取用户信息的时候,必须使用拉取用户信息接口,使用获取用户基本信息(UnionID机制)接口虽然可以拿到用户信息,但是用户未关注是拿不到任何信息的。

微信code获取

?这一步由对应的应用调用微信api获取微信的临时code。注意公众号不同于移动应用,公众号获取code的方式必须采用要点中的第二点方式;因为获取code的接口中包含appid,一般由后台处理加密之后给h5使用,后台处理的时候scope一定要为snsapi_userinfo。

通过code获取用户基本信息

?不同应用调用不同的微信api获取用户信息就行了,所有应用都保证可以获取到unionid,上次就在公众号获取uniond为空踩坑。

公众号、APP处理:

?1. 通过unionid查询数据库;
?2. 如果数据为空,则通过openid查询用户信息(这里是兼容以前没有unionid的用户);
?3. 如果数据仍为空,则新增用户数据,不为空就返回。

小程序处理:

?为什么要单独提出小程序的处理,因为小程序登录时分为两部进行:
?1. 前端:使用wx.login()调用后台登录方法,如果存在用户数据就返回前端;
?2. 后台:不存在用户则保存临时生成的信息到redis,这里我使用uuid生成的用户code,保存的信息为微信返回的sessionKey,这个是不能给前端的;
?3. 前端:使用wx.getUserInfo(Object object)授权,调用后台绑定用户信息的接口(另一个接口),这里注意要对encryptedData进行UTF-8的解码,不然解析不了用户信息,使用微信的解密方法就可以获取到用户基本信息。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号