详解微信开发者文档——5 access_token管理
写在前面的话:前几篇博客详细讲解了如何获取用户发送的消息并进行回复,这里的回复是一种被动的回复,而被动回复的方式便是通过echo返回信息给微信服务器的POST请求,因此,其实我们并没有算的上调用了微信的接口,从这一篇文章开始,才算是真正的调用微信接口开端,就从access_token讲起。
======正文开始========
每时每刻都有许多用户来调用微信接口,那么我们想要请求微信接口,如何知道是哪一个用户来请求的呢?也就是说需要一个唯一的凭证来唯一的标明一个公众号,这个信息便是APPID和APPSECRET。这个信息可以在微信公众号后台读取到,其中APPID直接能够看到,而如果想要看到APPSECRET,需要管理员的手机扫描二维码才能够看到。这两个信息唯一的表明了一个公众号,由此也可见,这两个信息对于一个微信公众号来说,是非常敏感的信息。对于每次微信接口的调用,我们本可以使用APPID和APPSECRET,但是正因为它的敏感性,我们并没有直接通过它,而是通过一个叫做access_token的信息来调用微信接口,而access_token则是通过APPID和APPSECRET来获取的。下面详细讲解一下access_token管理的一些内容。
一、获取access_token
获取access_token方法很简单,只需要向如下接口发送GET请求即可
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
其中APPID和APPSECRET填写自己公众号的相应内容即可,当向微信服务器发送完成GET请求后,微信服务器会给回复,回复内容的格式为json格式(注意,不是xml格式),内容如下:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
其中access_token一项就是我们所需要的值了,通过过这个值就能够去调用其他微信接口了;
expires_in是过期时间,一般为2个小时,所以说我们获取到的access_token并不是永久有效的,而是仅仅有2个小时的有效期,当然了,这个内容以后微信可能还会调整。关于这一项注意重点强调一下:你可能会问,为什么要考虑它的有效期呢?每次我都重新调用GET请求获取access_token不就行了?答案是不可以的,有以下几个原因:
(1)每次获取到的access_token值是不一样的,这样就有可能导致影响业务
(2)最主要的一点:微信对于调用access_token获取接口是有次数限制的。
至于如何管理access_token,在第二部分讲解。
前面是正常情况下,当GET请求失败的话,返回的信息如下:
{"errcode":40013,"errmsg":"invalid appid"}
我们从中无法获取到access_token,而通过具体的errmsg可以判断错误的原因为:appid填写的错误。
二、通过中继服务器获取access_token
虽然通过第一步我们已经获取到了access_token,但是每次使用access_token的时候,并不能通过调用接口的方式进行获取,原因前面讲了,具体实施的话,可以通过一个中继服务器,定时去获取access_token,而我们的业务逻辑所需要的access_token,是从中继服务器中获取,而不是每次都请求微信接口获取。
三、源码示例讲解
下面通过代码实例进行讲解,之前我们的代码都是写在wechat.php之中,下面我们建立一个新的文件进行演示,叫做geAccessToken.php。
1、设置access_token请求参数:
$appid="wx85871939f72432432";
$secret="4026e323bfcb11ed35ea41a92ffsfdsgdsge";
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
这里的appid和secret填写自己的信息。
2、通过curl获取json数据
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
$data=json_decode($result,true);
其中result中保存的就是GET请求收到的json数据,通过json_decode将json数据转化为数组;注意:需要在php中开启curl.
3、取得access_token数据
var_dump($data['access_token']);
这里直接打印的access_token值。
4.中继服务器设置
通过前面代码就能够获取access_token了,实际项目中,可以将获取的access_token插入数据库表中,而获取的方法可以通过cron每隔1个小时获取一次。
实际业务中,需要access_token就可以直接从数据库表中读取了,这里就不贴代码了。
至此,access_token管理的方法就讲完了。
(完)
附源代码:
<?php
$appid="wx85871939f7f9b647";
$secret="4026e323bfcb11ed35ea41a924bc36f6";
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
$data=json_decode($result,true);
var_dump($data['access_token']);
?>
(完)
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 本文为原创文章,欢迎转载,后续本博客会不断更新,因此请保留该文档信息。
- 本文地址:http://www.cnblogs.com/wuguanglei/p/4398043.html
详解微信开发者文档——5 access_token管理的更多相关文章
- 详解在Word文档中常见的各种公式编辑问题
正常情况下,我们在安装完成MathType之后会直接加载在Word文档中,Word文档中的MathType比较复杂,新手操作遇到麻烦也是常有的事,今天就来给大家详解下Word文档中常见的MathTyp ...
- 微信JS-SDK文档
微信JS SDK 调用详解 微信JS SDK 调用详解... 1 概述... 2 使用说明... 2 接口调用说明... 4 基础接口... 4 判断当前客户端版本是否支持指定JS接口... 5 ...
- layuiAdmin pro v1.x 【单页版】开发者文档
layuiAdmin std v1.x [iframe版]开发者文档 题外 该文档适用于 layuiAdmin 专业版(单页面),阅读之前请务必确认是否与你使用的版本对应. 熟练掌握 layuiAdm ...
- layuiAdmin std v1.x 【iframe版】开发者文档
layuiAdmin pro v1.x [单页版]开发者文档 layuiAdmin.std(iframe 版) 是完全基于 layui 架构而成的通用型后台管理模板系统,采用传统的 iframe 多页 ...
- TestNG详解-深度好文
转自: https://blog.csdn.net/lykangjia/article/details/56485295 TestNG详解-深度好文 2017年02月22日 14:51:52 阅读数: ...
- developers.google.com上的开发者文档如何切换显示语言
一个小的tip,搜索到developers.google.com上的开发者文档,有些被翻译了的会自动显示中本版,如果想看英文版,可以在当前url后面加?hl=en,就会变成英文版.估计是根据地区直接推 ...
- 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】
swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...
- Typora+PicGo+cos图床打造开发者文档神器
一.Typora简介 markdown简单.高效的语法,被每一个开发者所喜爱.Typora又是一款简约.强悍的实时渲染markdown编辑器.本文将介绍Typora搭配PicGo与腾讯cos对象存储( ...
- 详解微信小程序开发(项目从零开始)
一.序 微信小程序,估计大家都不陌生,现在应用场景特别多.今天就系统的介绍一下小程序开发.注意,这里只从项目代码上做解析,不涉及小程序如何申请.打包.发布的东西.(这些跟着微信官方文档的流程走就好). ...
随机推荐
- 【.net 深呼吸】序列化中的“引用保留”
假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
- [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...
- 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~
一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置
在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...
- SQL 约束
先用设计器创建约束.再用代码创建约束.数据库约束是为了保证数据的完整性(正确性)而实现的一套机制见文件Employee.sql非空约束(选择复选框)主键约束(PK) primary key const ...
- linux基础命令
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- Unity C#最佳实践(上)
本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...
- 基于AngularJs的上传控件-angular-file-upload
今天跟大家分享的是一个依赖于angular的上传控件. 前段时间做项目遇到一个需求是上传文件,大概需要实现的样式是这样子的,见下图: 需要同时上传两个文件.并且规定文件格式和文件大小.因为前端框架使用 ...