微信公众号-获取用户信息(网页授权获取)实现步骤


Posted in Javascript onOctober 21, 2016

根据微信公众号开发官方文档:

获取用户信息步骤如下:

1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

1 获取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问

其中:

AppID - 公众号的唯一标识
REDIRECT_URI - 跳转url
SCOPE - 值为snsapi_base(不弹出授权页面,直接跳转,只能获取用户openid) 或snsapi_userinfo (弹 出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
STATE - 开发者可以自定义填写a-zA-Z0-9的参数值

2 通过code换取网页授权access_token

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
state就是上面的STATE参数原样传过来的

实现代码:

<code class="hljs php">$code = I('get.code');
if (empty($code)) {
   //todo 非微信访问
   exit('</code>');
 }else{ //授权后操作 }

在这里我们就可以得到code用作后续的获取access_token。

获取code后,请求以下链接获取access_token:

 https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

appid - 公众号的唯一标识
secret - 密钥
code - 上述所返回的code
grant_type - 值为authorization_code

实现代码:

<code class="hljs bash">$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret');
$str = file_get_contents($url);
$str = json_decode($str, true);
$access_token = $str['access_token'];</code>

这里access_token可以做缓存处理,避免造成频繁获取
实现代码,以TP框架为例:

<code class="hljs php">$access_token = S('access_token');
if (empty($access_token)) {
  $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret');
  $str = file_get_contents($url);
  $str = json_decode($str, true);
  $access_token = $str['access_token'];
  S('access_token', $access_token, 3600);
}</code>

在获取access_token后,也会一并返回openid(用户唯一标识),微信官方文档的解释是:用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

openid是唯一标识微信用户的,如果用户不是第一次登陆,可以在得到openid后查询数据库是否有绑定此openid的用户,之后就无需重新获取用户数据,直接获取的数据库user_id设置session,直接登陆访问

3 第三步忽略,只在需要的时间重新获取access_token而已

4 拉取用户信息(需scope为 snsapi_userinfo)

在数据库无此微信号用户的绑定下,就相当于用户首次访问登陆,则通过第四步来获取用户信息(在用户授权情况下,网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了),然后后台创建user并绑定此微

信用户(通过openid)

请求方法

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

access_token - 上述所获取的access_token
openid - 公众号唯一标识

实现代码:

<code class="hljs php">$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
$str = file_get_contents($url);
$str = json_decode($str, true);
if (empty($str['errcode'])) {
  //创建user并绑定openid
}else{
  //错误处理
}</code>

以上就是微信公众号获取用户信息的具体步骤。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
通用javascript脚本函数库 方便开发
Oct 13 Javascript
javascript 计算两个整数的百分比值
Dec 26 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
Aug 11 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
Jan 09 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
JavaScript实现横向滑出的多级菜单效果
Oct 09 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
React-native桥接Android原生开发详解
Jan 17 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 #Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 #Javascript
Bootstrap如何创建表单
Oct 21 #Javascript
bootstrap table小案例
Oct 21 #Javascript
jquery+Jscex打造游戏力度条
Sep 12 #Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 #Javascript
node.js学习之base64编码解码
Oct 21 #Javascript
You might like
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
python实现ping的方法
2015/07/06 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python多进程读图提取特征存npy
2019/05/21 Python
pytorch 模型可视化的例子
2019/08/17 Python
python反转列表的三种方式解析
2019/11/08 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
python3 实现口罩抽签的功能
2020/03/11 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
大学生学业生涯规划
2014/01/05 职场文书
上课睡觉检讨书
2014/01/28 职场文书
销售总经理岗位职责
2014/03/15 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
优秀教师事迹材料
2014/12/15 职场文书
爱晚亭导游词
2015/02/09 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
防止web项目中的SQL注入
2021/12/06 MySQL