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


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删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
js模态对话框使用方法详解
Feb 16 Javascript
如何写好你的JavaScript【推荐】
Mar 02 Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
AngularJS 控制器 controller的详解
Oct 17 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
Oct 16 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
JS使用正则表达式实现常用的表单验证功能分析
Apr 30 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函数utf8转gb2312编码
2006/12/21 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
简单通用的JS滑动门代码
2008/12/19 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python中模块的__all__属性详解
2017/10/26 Python
详解python中list的使用
2019/03/15 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
Python-接口开发入门解析
2019/08/01 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
科室工作的个人自我评价
2013/10/30 职场文书
单位单身证明范本
2014/01/11 职场文书
参赛口号
2014/06/16 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
出国留学英文自荐信
2015/03/25 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书