可扩展性很强。

<?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;
}
}

  

最新文章

  1. CSS总结1
  2. Java Hour 53 HQL
  3. onMeasure 出现java.lang.NullPointerException
  4. Redux中的重要概念
  5. JavaScript null 和 undefined
  6. dedecms搜索提示"关键字不能小于2个字节!"
  7. 诡异错误一: ValueError: embedded null character
  8. Redis之Set
  9. C++闭包: Lambda Functions in C++11
  10. mac port 清理
  11. window.localStorage的用法
  12. MatLab数字图像处理实战(赵小川)-sift原理
  13. (网页)the server responded with a status of 403 (Forbidden)
  14. MyBatis 别名标签 &amp; sql的复用
  15. oracle函数验证时间格式并返回
  16. WebDriverAPI(3)
  17. package.json安装依赖的箭头?
  18. python2.7无法安装python-ldap、django-auth-ldap
  19. 汇编语言、与C语言、实现--汉诺塔--
  20. BZOJ3782 上学路线 【dp + Lucas + CRT】

热门文章

  1. 不直接用NSLog
  2. CV_EXPORTS定义及作用
  3. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
  4. PHP解析和生成xml(DOMDocument版)
  5. 【转】C#实现MD5加密
  6. phplib系统开发经验总结
  7. IOS FoundationKit (NSString) 知识汇总
  8. django 实现指定文件合并成压缩文件下载
  9. 转:基于node的web开发框架Express入门
  10. 从51跳新唐cortex学习3——细说新唐两种定时器