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
<?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;
}
}
?>
php微信开发(1):缓存access_token的方法的更多相关文章
- 【微信开发】缓存的asscess_token过期
开发中有遇到这样一个问题,我们一般会将从微信拿到的寿命2个小时的access_token缓存起来,业务里这个缓存的时间是90分钟, 90分钟之后缓存过期,会重新请求新的access_token使旧的a ...
- 夺命雷公狗---微信开发13----获取access_token
获得Access Token的方法1: 这里可以手动进行修改: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential ...
- 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)
//将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...
- 微信开发笔记:公众号获取access_token
微信开发中,access_token的获取是一种非常常见的功能,通过公众号的appid和appsecret来向微信公众平台请求一个临时通行凭证:access_token.公众平台上的绝大部分操作都会需 ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token
获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...
- PHP定时任务获取微信access_token的方法
一.使用brew安装php多版本方法 # brew install php56# brew install php70二.安装切换工具 # brew install php-version# sour ...
- [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)
在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...
- php - 微信 - 缓存access_token类。
可扩展性很强. <?php namespace LaneWeChat\Core; /** * 微信Access_Token的获取与过期检查 * Created by Lane. * User: ...
随机推荐
- 【Android 界面效果32】ImageView中XML属性src和background的区别
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸. src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对sr ...
- linux_机器信息查询
查看系统版本:[root@css-management ~]# lsb_release -aLSB Version: :core-4.0-amd64:core-4.0-noarch:graphics- ...
- ASP.NET FormsAuthentication跨站点登录时绝对地址返回的问题
关键字:FormsAuthentication, loginUrl, ReturnUrl, AbsoluteUri 在ASP.NET应用程序中,FormsAuthentication几乎是标配,但Fo ...
- Java程序员必备的 15框开发工具
15款Java程序员必备的开发工具 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于Java,有两种截然不同 ...
- noi 97 积木游戏
思路:黑书的例题 #include<map> #include<set> #include<cmath> #include<queue> #includ ...
- freeCodeCamp:Missing letters
从传递进来的字母序列中找到缺失的字母并返回它. 如果所有字母都在序列中,返回 undefined. function fearNotLetter(str) { var arr = str.split( ...
- CSS图片翻转例子
dfdfdfdfdf <!DOCTYPE html> <html> <head> <meta charset=" ...
- UI设计之PS界面初始化设置
一.PS界面初始化 1.新建设置 web设计的基础标准:宽度为1920px,高度自定义,分辨率72px,背景模式RGB 8位.(提示:可以“存为预设”以便以后直接调用) 注意:背景内容为透明!!! ...
- Javascript之日历
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <ti ...
- cmd 命令收集
window类 1.命令打开系统设置页面 1.control keymgr.dll 打开凭据管理器 2.gpedit.msc 打开管理面板 3.mspaint--------画图板 4.msts ...