统一微信公众号、小程序、APP的用户信息
上次接手一个项目需要整合公众号、小程序以及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的用户信息的更多相关文章
- PHP 微信公众号/小程序获取openid,用户信息
1.获取code (获得openid的前置条件) 地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redi ...
- 微信 公众号 小程序 授权 unionid 用户信息 实验总结
-*-*-*-*-*-*-*-*-*--*-*-*-1.小程序通过code获取用户openid的接口,如果用户曾经授权并未过期,或者用户关注过同主体的公众号,会带回unionID,但没有用户头像等信息 ...
- .NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?
前言 获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性. 官方的解释:如果开 ...
- TP3.2校验微信公众号||小程序 服务器地址
1.在TP3.2里面,写一个控制器,用来校验微信公众号||小程序的服务器地址 <?php namespace Home\Controller; use Think\Controller; hea ...
- 微信公众号&小程序 -- 获取并解密用户数据(获取openId、unionId)
本文转自https://my.oschina.net/u/3235888/blog/832895 前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc ...
- apipost 调试微信公众号 小程序,秒生成文档工具
1.将已经鉴权的公众号,小程序接口的 header头信息复制进来 2.设置文档展示字段
- PHP原生实现,校验微信公众号||小程序服务器地址
1.原生的.php文件: test.php <?php header('Content-type:text'); define("TOKEN", "weixin& ...
- [python]通过微信公众号“Python程序员”,编写python代码
今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...
- [重要更新]微信小程序登录、用户信息相关接口调整:使用 wx.getUserProfile 取代 wx.getUserInfo
2021年2月24日,微信官方团队发布了一个调整通知:<小程序登录.用户信息相关接口调整说明>,公告明确从4月13日起,所有发布的小程序将无法使用 wx.getUserInfo 接口(JS ...
- ASP.NET微信公众号用于给指定OpenId用户发送红包
ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...
随机推荐
- 全排列函数 nyoj 366(next_permutation()函数)
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.st ...
- 7-14 电话聊天狂人(25 分)(Hash表基本操作)
7-14 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...
- 【扫描线】HDU 5124 lines
http://acm.hdu.edu.cn/showproblem.php?pid=5124 [题意] 在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次 [思路] 最简单 ...
- 2018/2/17 SpringCloud的一个简单小介绍
在学习SpringCloud之前,我以为SpringCloud是与Double一样,只是个单纯的RPC框架.但在今天的学习中,我发现并非如此,事实上,SpringCloud是多个框架的集合,感觉Spr ...
- Remove Element(第一种方法参考别人)
Given an array and a value, remove all instances of that value in place and return the new length. T ...
- MongoDB小结11 - update【save】
save是一个shell函数,调用它,可以在文档不存在时插入,存在时更新,它只有一个参数:文档.如果文档有 _id 这个 键,那么save会调用upsert,否则会调用insert,非常方便.
- 打造Spring Cloud构建微服务架构的最全资料
访问: https://git.oschina.net/didispace/SpringCloud-Learning http://blog.didispace.com/categories/Spri ...
- JAVA OO之 类、对象、包
类 类是具有相同属性和行为的一组对象的集合. public class HomeWork1 { public static void main(String[] args) { MyPhone mp= ...
- [Spring Boot ] Creating the Spring Boot Project : Demo: Creating a REST Controller
In Spring boot, define a REST API endpoint is pretty easy. package com.globomatisc.bike.controllers; ...
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...