语言: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的方法的更多相关文章

  1. 【微信开发】缓存的asscess_token过期

    开发中有遇到这样一个问题,我们一般会将从微信拿到的寿命2个小时的access_token缓存起来,业务里这个缓存的时间是90分钟, 90分钟之后缓存过期,会重新请求新的access_token使旧的a ...

  2. 夺命雷公狗---微信开发13----获取access_token

    获得Access Token的方法1: 这里可以手动进行修改: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential ...

  3. 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)

    //将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...

  4. 微信开发笔记:公众号获取access_token

    微信开发中,access_token的获取是一种非常常见的功能,通过公众号的appid和appsecret来向微信公众平台请求一个临时通行凭证:access_token.公众平台上的绝大部分操作都会需 ...

  5. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  6. Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token

    获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...

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

    一.使用brew安装php多版本方法 # brew install php56# brew install php70二.安装切换工具 # brew install php-version# sour ...

  8. [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)

    在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...

  9. php - 微信 - 缓存access_token类。

    可扩展性很强. <?php namespace LaneWeChat\Core; /** * 微信Access_Token的获取与过期检查 * Created by Lane. * User: ...

随机推荐

  1. IOS 免受xib自动布局影响

    1.适配苹果手机  iPhone 4 ,4s 一个xib  iPhone 5 5s xib   以后iPhone6一个xib 2.再根据ios6 和 ios7 进行 微调 就是状态栏的那个问题 3.# ...

  2. ios-UIPickerView基本使用

    #import "ViewController.h" @interface ViewController ()<UIPickerViewDataSource,UIPicker ...

  3. 『创意欣赏』30幅逼真的 3D 虚拟现实环境呈现

    又到周末了,给大家分享30幅漂亮的 3D 虚拟现实环境呈现,放松一下.这些创造性的场景都是通过 3D 图形设计软件,结合三维现实环境渲染制作出来的.一起欣赏:) 您可能感兴趣的相关文章 20幅温馨浪漫 ...

  4. 【Shell脚本学习14】Shell echo命令

    echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg 您可以使用echo实现更复杂的输出格式控制. 显示转义字符 echo "\"It ...

  5. 实用技术——Eclipse 常用快捷键

    Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率. 和编辑相关的快捷键 Eclipse中有如下一些和编辑相关的快捷键.  1. [ALT+/]  此快捷键为用户编 ...

  6. React Native学习-measure测量view的宽高值

    measure()测量是根据view标签中的ref属性,使用方法如下: measureWatermarkerImage(){ this.refs.watermarkerImage.measure((a ...

  7. UIBootatrap:是由AngularJS UI团队编写的纯AngularJS实现的Bootstrap组件

    本文为翻译文档.原文是https://angular-ui.github.io/bootstrap/(需要FQ). 准备工作: 依赖关系:这个库中包含一组基于Bootstrap组件和CSS的原生Ang ...

  8. codeforces 675B B. Restoring Painting(暴力枚举)

    题目链接: B. Restoring Painting time limit per test 1 second memory limit per test 256 megabytes input s ...

  9. innerHTML与innerText的PK

    一.innerText属性用来定义对象所要输出的文本,在本例中innerText把对象it中的文本"您喜欢看微微一笑很倾城吗?"变成了"超级喜欢!"(语句it. ...

  10. jQuery无缝循环开源多元素动画轮播jquery.slides插件

    详细内容请点击 初始化插件: 一款基于jQuery无缝轮播图插件,支持图内元素动画,可以自定义动画类型$(".slideInner").slide({slideContainer: ...