可扩展性很强。

<?php
namespace LaneWeChat\Core;
/**
* 微信Access_Token的获取与过期检查
* Created by Lane.
* User: lane
* Date: 13-12-29
* Time: 下午5:54
* Mail: lixuan868686@163.com
* Website: http://www.lanecn.com
*
* 使用说明(用sae中kvdb举例):
// 1 首先编写两个方法,一个设置缓存,一个取缓存。(例子中的,_setSaeKvdb()/_getSaeKvdb(),函数名称随意。)
// 2 在[_setCacheAccessToken/_getCacheAccessToken]方法中添加相应的case(上面所编写的方法。)。
// 3 更改常量[CACHE_ACCESSTOKEN_TYPE]的值,你要在第二步骤中使用case后的值。
*
*/
class AccessToken{ /**
* 使用的缓存类型,设置缓存与使用缓存,均要用到次常量。
*/
const CACHE_ACCESSTOKEN_TYPE = 'kvdb'; /**
* 获取微信Access_Token
*/
public static function getAccessToken(){
// 获取缓存access_token,无缓存返回false。
$accessToken = self::_getCacheAccessToken(self::CACHE_ACCESSTOKEN_TYPE); // 判断得到的access_token是否存在,以及是否过期,如过期或者不存在,则重新获取。
if(empty($accessToken['access_token']) || $accessToken['expires_in'] < time()){
$accessToken = self::_getAccessToken();
} // 返回access_token
return $accessToken['access_token'];
} /**
* @descrpition 从微信服务器获取微信ACCESS_TOKEN
* @param string $cacheType 缓存access_token,默认使用sae中的kvdb
* @return Ambigous|bool
*/
private static function _getAccessToken(){
// 从微信服务器获取access_token
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET;
$accessToken = Curl::callWebServer($url, '', 'GET');
if(!isset($accessToken['access_token'])){
return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
} // 缓存 access_token
self::_setCacheAccessToken($accessToken, self::CACHE_ACCESSTOKEN_TYPE); // 返回 access_token
return $accessToken;
} /**
* 缓存access_token
*/
private static function _setCacheAccessToken($data, $cacheType) {
switch ($cacheType) {
case 'kvdb':
// 使用sae中的KVDB缓存access_token
self::_setSaeKvdb($data);
break; // 其他缓存方法,请自行添加 default: break;
}
} /**
* 获取缓存的 access_token
* @param [type] $cacheType 使用的缓存类型
* @return [type] [description]
*/
private static function _getCacheAccessToken($cacheType) {
$data = array();
switch ($cacheType) {
case 'kvdb':
$data = self::_getSaeKvdb();
break; // 其他获取缓存的方法,自行添加。 default: break;
}
return $data;
} /**
* 使用sae中的KVDB进行缓存
* @param [type] $data [description]
*/
private static function _setSaeKvdb($data) {
// 使用KVDB存储会话
$kv = new \SaeKV();
$kv->init('4ywk0l2yzo');
// delete original kvdbs
$kv->delete('access_token');
$kv->delete('expires_in');
// write new kvdb
$kv->add('access_token', $data['access_token']);
$kv->add('expires_in', time() + 7000);
}
/**
* 获取存储在 SAE 中KVDB中的access_token
* @return [type] [description]
*/
private static function _getSaeKvdb() {
// 使用KVDB存储会话
$kv = new \SaeKV();
$kv->init('4ywk0l2yzo');
// get kvdb data
$data['access_token'] = $kv->get('access_token');
$data['expires_in'] = $kv->get('expires_in');
return $data;
}
}

  

php - 微信 - 缓存access_token类。的更多相关文章

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

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

  2. 微信公众号的搭建-第四天(2)-获取并缓存access_token

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

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

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

  4. 微信开发 access_token 数量限制问题

    微信对access_token的请求有数量限制, 如果用户量特别多的话, access_token  可能会不够用 两种方案: 1.  access_token 加入缓存并设置2小时的失效时间,每次从 ...

  5. Android手机清除微信缓存

    方法一: 1.任意找一个微信好友,给他发送网址 http://debugx5.qq.com 2.自己点击这个网址跳转 3.进入后看到下面的页面,通过勾选第二张截图的Cookie和文件缓存来清除微信缓存 ...

  6. thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase

    本节主要介绍缓冲相关的传输类,缓存的作用就是为了提高读写的效率.Thrift在实现缓存传输的时候首先建立一个缓存的基类,然后需要实现缓存功能的类都可以直接从这个基类继承.下面就详细分析这个基类以及一个 ...

  7. 利用Spring.Net技术打造可切换的分布式缓存读写类

    利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...

  8. [Cache] C#操作缓存--CacheHelper缓存帮助类 (转载)

    点击下载 CacheHelper.zip CacheHelper 缓存帮助类 C#怎么操作缓存 怎么设置和取缓存数据,都在这个类里面呢 下面看一下代码吧 /// <summary> /// ...

  9. thrift之TTransport层的内存缓存传输类TMemoryBuffer

    内存缓存是简单的在内存进行读写操作的一种传输,任何时候想在上面写入数据都是放入缓存中,任何时候读操作数据也是来至于缓存.内存缓存的分配使用c语言的malloc类函数,分配的长度是需要长度的两倍,需要考 ...

随机推荐

  1. Unity cg vertex and fragment shaders(一)

    cg片段 Cg程序片段写CGPROGRAM和ENDCG之间 开始时的片段可以作为#pragma语句编译指令 Pass { // ... the usual pass state setup ... C ...

  2. php多图合并

    function mergerImg($imgs) { list($max_width, $max_height) = getimagesize($imgs['dst']); $dests = ima ...

  3. app微信支付服务器端php demo

    class Wxpay { /* 配置参数 */ private $config = array( 'appid' => "wxc92b12277f277355", /*微信 ...

  4. bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp

    题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2369  Solved: 1266[Submi ...

  5. 09-C语言数组

    目录: 一.使用xcode编辑工具 二.数组 三.数组遍历 四.多维数组 回到顶部 一.使用xcode编辑工具 1 打开xcode程序 2 创建一个项目 OSX -> Application - ...

  6. 【转】使用Boost Graph library(一)

    转自:http://shanzhizi.blog.51cto.com/5066308/942970 本文是一篇译文,来自:http://blog.csdn.net/jjqtony/article/de ...

  7. C#调用Matlab生成的dll方法

    其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MC ...

  8. Hat’s Words(字典树)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. IOS_OC_id ,NSObject, id&lt;NSObject&gt;差别

    我们常常会混淆下面三种申明(我是没有留意过):     1. id foo1;     2. NSObject *foo2;     3. id<NSObject> foo3;     第 ...

  10. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自  大学霸 <NGU ...