当前位置: 首页 > news >正文

php缓存accestoken_php微信开发(1):缓存access_token的方法

语言:PHP

access_token一直要用,但每天取的数量有限制。反正2小时才过期。就想缓存一下。

File1: wx_access_token.php

File2: file_cache.php

---------------------------

File1: wx_access_token.php <?php

/*

* wx_access_token.php

*

* get the weixin access token

* */

if (!defined("DOCUMENT_ROOT")) define("DOCUMENT_ROOT", $_SERVER['DOCUMENT_ROOT']);

if (!defined("__HOME__")) define("__HOME__", dirname(DOCUMENT_ROOT));

require_once("file_cache.php");

class WxAccessToken{

public function getToken(){

$wx_access_token_cache_key = 'wx_access_token';

$cache = new FileCache(__HOME__ . '/myfolder/cache_file.txt');

$token = $cache->get($wx_access_token_cache_key);

if (!$token){

$token = $this->getTokenFromWx();

$cache->set($wx_access_token_cache_key, $token, time()+7000);

}

return $token;

}

private function getTokenFromWx(){

$appid = "your appid";

$appsecret = "your app secret";

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

$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);

$output = curl_exec($ch);

curl_close($ch);

$jsoninfo = json_decode($output, true);

return $jsoninfo["access_token"];

}

}

?>

File2: file_cache.php

/*

* file_cache.php

*

* cache objects via json with filesystem

* author: hydon lee

* */

/*

class FileCache

examples:

$cache = new FileCache('../myfolder/cache_file.txt');

$cache->set('username', 'lihd', time()+3600);

$username = $cache->get('username');

echo $username;

*/

class FileCache{

private $cache_file;

private function load(){

if(file_exists($this->cache_file)){

$content = file_get_contents($this->cache_file);

if (strlen($content) > 0){

$data = json_decode($content);

return $data;

}

}

return array();

}

private function save($data){

$content = json_encode($data);

return file_put_contents($this->cache_file, $content);

}

public function __construct($filename) {

$this->cache_file = $filename;

}

public function get($key){

$data = $this->load();

foreach($data as $item){

if ($item->key == $key){

if ($item->expire_time > time()){

return $item->value;

}

break;

}

}

return NULL;

}

public function set($key, $value, $expire_time=NULL){

$data = $this->load();

$obj = NULL;

foreach($data as $item){

if ($item->key == $key){

$obj = $item;

$obj->value = $value;

if ($expire_time != NULL){

$obj->expire_time = $expire_time;

}

break;

}

}

if ($obj == NULL){

$obj = new CacheItem($key, $value, $expire_time);

array_push($data, $obj);

}

return $this->save($data);

}

}

class CacheItem{

public $key;

public $value;

public $expire_time;

public function __construct($key, $value, $expire_time) {

$this->key = $key;

$this->value = $value;

$this->expire_time = $expire_time;

}

}

?>

相关文章:

  • git 更新代码到本地
  • python subprocess使用_python subprocess使用-阿里云开发者社区
  • tomcat日志神器--kibana
  • python计算相同生日概率_用python计算下一个生日前的天数
  • java保证多线程的执行顺序
  • php 文本显示一部分_使用简单,功能全面的 PHP 命令行应用库
  • jzoj4196 二分图计数 解题报告(容斥原理)
  • 华为上半年手机销量_国产手机上半年销量出炉:小米华为所向无敌
  • Python2与Python3区别
  • 计算混响时间的意义_计算你房间的混响时间
  • cordova打开文件_cordova插件之下载文件并打开
  • Fragment切换返回
  • kylin 大数据架构_Kylin对大数据量的多维分析
  • 17-----案例
  • l130 华大低功耗mcu_HC32L110C6PA HC32L110C6UA 华大超低功耗 Cortex-M0+ 32位MCU
  • 2017年终总结、随想
  • bearychat的java client
  • egg(89)--egg之redis的发布和订阅
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java小心机(3)| 浅析finalize()
  • Koa2 之文件上传下载
  • Laravel5.4 Queues队列学习
  • python学习笔记-类对象的信息
  • Rancher-k8s加速安装文档
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 记录一下第一次使用npm
  • 如何设计一个比特币钱包服务
  • 深入浅出webpack学习(1)--核心概念
  • 一道闭包题引发的思考
  • 优化 Vue 项目编译文件大小
  • 在Mac OS X上安装 Ruby运行环境
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​决定德拉瓦州地区版图的关键历史事件
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (NSDate) 时间 (time )比较
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (力扣题库)跳跃游戏II(c++)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)Neo4j下载安装以及初次使用
  • (转)http-server应用
  • (转)创业的注意事项
  • (转)大型网站的系统架构
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @SuppressWarnings注解
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]