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


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 相关文章推荐
代码精简的可以实现元素圆角的js函数
Jul 21 Javascript
javascript 运算数的求值顺序
Aug 23 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
JQuery validate插件验证用户注册信息
May 11 Javascript
基于angularJS的表单验证指令介绍
Oct 21 Javascript
简单实现js浮动框
Dec 13 Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 Javascript
利用jQuery异步上传文件的插件用法详解
Jul 19 jQuery
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
JavaScript的Set数据结构详解
Feb 18 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 insert语法详解
2008/06/07 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
探讨php中header的用法详解
2013/06/07 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
php实现用户登陆简单实例
2017/04/04 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
如何用Python徒手写线性回归
2021/01/25 Python
幼儿园国庆节活动方案
2014/02/01 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
文艺演出策划方案
2014/06/07 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Python Django ORM连表正反操作技巧
2021/06/13 Python