上次接手一个项目需要整合公众号、小程序以及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的解码,不然解析不了用户信息,使用微信的解密方法就可以获取到用户基本信息。

统一微信公众号、小程序、APP的用户信息的更多相关文章

  1. PHP 微信公众号/小程序获取openid,用户信息

    1.获取code (获得openid的前置条件) 地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redi ...

  2. 微信 公众号 小程序 授权 unionid 用户信息 实验总结

    -*-*-*-*-*-*-*-*-*--*-*-*-1.小程序通过code获取用户openid的接口,如果用户曾经授权并未过期,或者用户关注过同主体的公众号,会带回unionID,但没有用户头像等信息 ...

  3. .NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?

    前言 获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性. 官方的解释:如果开 ...

  4. TP3.2校验微信公众号||小程序 服务器地址

    1.在TP3.2里面,写一个控制器,用来校验微信公众号||小程序的服务器地址 <?php namespace Home\Controller; use Think\Controller; hea ...

  5. 微信公众号&小程序 -- 获取并解密用户数据(获取openId、unionId)

    本文转自https://my.oschina.net/u/3235888/blog/832895 前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc ...

  6. apipost 调试微信公众号 小程序,秒生成文档工具

    1.将已经鉴权的公众号,小程序接口的 header头信息复制进来 2.设置文档展示字段

  7. PHP原生实现,校验微信公众号||小程序服务器地址

    1.原生的.php文件:  test.php <?php header('Content-type:text'); define("TOKEN", "weixin& ...

  8. [python]通过微信公众号“Python程序员”,编写python代码

    今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...

  9. [重要更新]微信小程序登录、用户信息相关接口调整:使用 wx.getUserProfile 取代 wx.getUserInfo

    2021年2月24日,微信官方团队发布了一个调整通知:<小程序登录.用户信息相关接口调整说明>,公告明确从4月13日起,所有发布的小程序将无法使用 wx.getUserInfo 接口(JS ...

  10. ASP.NET微信公众号用于给指定OpenId用户发送红包

    ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...

随机推荐

  1. 全文搜索(A-3)-用户建模

    用户模型可以分为静态模型.动态模型.混合推荐用户模型. 静态模型往往通过显式方式收集用户偏好信息: 动态模型通过隐式方式收集用户偏好信息: 基于内容的用户系统的推荐模型: 关键字匹配,空间向量模型 协 ...

  2. mvc 下 使用kindeditor 配置信息

    先去下载: http://code.google.com/p/kindeditor/downloads/list引用: LitJSON.dll文件<script src="~/kind ...

  3. [HDU2196]Computer(DP)

    传送门 题意 给出一棵树,求离每个节点最远的点的距离 思路 对于我这种菜鸡,真是难啊. 每个点的距离它最远的点,除了在它子树中的,还有在它子树之外的,所以这几个状态都得表示出来. 我们能够很简单的求出 ...

  4. bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组

    [bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...

  5. Reactor Cooling(无源汇有上下界网络流)

    194. Reactor Cooling time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard o ...

  6. 新装mvn建第一个项目报错org.apache.maven.plugins:maven-resources-plugin:2.6

    1.第一次创建mvn项目会报maven-resources-plugin-2.6.jar错,原因是mvn无法自动下载这个jar包,多次删除这个目录下的C:\Users\Administrator\.m ...

  7. htmlspecialschars与htmlentities的区别

    根据php手册,htmlentities与htmlspecialchars功能几乎是一模一样.唯一的差别就是,对于无效的代码单元序列(通俗讲就是不认识的编码)是否进行编码.htmlentities会进 ...

  8. Oracle锁表数据查询及解决方法

    首先:查询数据那些表被锁定1. SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name, ...

  9. Microsoft Office 2016 for win10 全版本下载+注册激活_Office教程学习网

    Microsoft Office 2016 for win10 全版本下载+注册激活_Office教程学习网 http://pan.baidu.com/s/1qWxdvT6

  10. HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水

    简单dp #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...