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


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 判断Flash是否加载完成的代码
Apr 12 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
深入浅析JavaScript函数前面的加号和叹号
Jul 09 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
JS实现前端动态分页码代码实例
Jun 02 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与已存在的Java应用程序集成
2006/10/09 PHP
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
php flv视频时间获取函数
2010/06/29 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php分页函数示例代码分享
2014/02/24 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
PHP函数积累总结
2019/03/19 PHP
一些不错的js函数ajax
2008/08/20 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
用实例分析Python中method的参数传递过程
2015/04/02 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
班级活动策划书
2014/02/06 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
初中班主任教育随笔
2015/08/15 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL