PHP定时任务获取微信access_token的方法


Posted in PHP onOctober 10, 2016

本文实例讲述了PHP定时任务获取微信access_token的方法。分享给大家供大家参考,具体如下:

微信access_token在开发时会变的好像是几分种不一样了,这里我们来介绍关于PHP定时任务获取微信access_token的方法。

最近开发微信公众平台,公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据,开发时需要进行妥善保存。 access_token有效期为7200秒 ,重复获取将导致上次获取的access_token失效。

由于微信对获取access_token的api调用次数做了限制,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。

那么有什么好的解决access_token存储和刷新的办法呢? 我的办法是:计划任务定时刷新获取access_token,然后将access_token保存到服务器本地,保存方式可以是文件、数据库或缓存中。

下面我使用PHP来获取access_token,并保存到本地文件中。建立一个access.php,代码如下:

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppID."&secret=".AppSecret;
$result = http_request($url);
//生成文件,保存token
$dir = __DIR__; //真实路径,crontab命令的php执行在cli模式下,不能正确识别相对路径,所以使用__DIR__
$filename = $dir."/access_token.php";
create_file($filename, $result);
function http_request($url,$data = null){
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  if (!empty($data)){
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  }
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($curl);
  curl_close($curl);
  return $output;
}
//生成文件
function create_file($filename, $content){
  $fp = fopen($filename, "w");
  fwrite($fp, "" . $content);
  fclose($fp);
}

以上代码中AppID和AppSecret这两个常量是由微信公众平台提供,可以登录到微信公众平台的基本配置里获取。获取到的access_token被保存到文件access_token.php中,注意这个文件内容不要被用户访问到。

接下来,我们设置定时任务,我们以Linux的CentOS为例,使用crontab设置计划任务。

5 * * * * /usr/local/bin/php -f /home/web/access.php >> /dev/null 2>&1

以上命令设置了每隔1小时,即每小时的第05分钟执行access.php。

这样,我们就可以保证access_token的正常获取和使用,不用频繁的去刷新微信服务器了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php+ajax实现的点击浏览量加1
Apr 16 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
Yii数据库缓存实例分析
Mar 29 PHP
PHP session 会话处理函数
Jun 06 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 #PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 #PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 #PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 #PHP
PHP对象链式操作实现原理分析
Oct 09 #PHP
SAE实时日志接口SDK用法示例
Oct 09 #PHP
对PHP依赖注入的理解实例分析
Oct 09 #PHP
You might like
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php中pcntl_fork创建子进程的方法实例
2019/03/14 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
简单的三步vuex入门
2018/05/20 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
Python实现屏幕截图的两种方式
2018/02/05 Python
Django开发中的日志输出的方法
2018/07/02 Python
Win8下python3.5.1安装教程
2020/07/29 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python如何实现邮件功能
2020/05/27 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
2015年女职工工作总结
2015/05/15 职场文书
不同意离婚上诉状
2015/05/23 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
pandas中pd.groupby()的用法详解
2022/06/16 Python