可扩展性很强。

<?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_tokenreturn $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_tokenself::_setCacheAccessToken($accessToken, self::CACHE_ACCESSTOKEN_TYPE);// 返回 access_tokenreturn $accessToken;}/*** 缓存access_token*/private static function _setCacheAccessToken($data, $cacheType) {switch ($cacheType) {case 'kvdb':// 使用sae中的KVDB缓存access_tokenself::_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;}
}

  

转载于:https://www.cnblogs.com/KTblog/p/5681143.html

php - 微信 - 缓存access_token类。相关推荐

  1. 微信背单词类小程序,小鸡单词源码下载,打卡微信小程序

    微信背单词类小程序,小鸡单词源码下载,微信小程序开发学习案例,小程序开发教程.一个用来背单词每天打卡的微信小程序,还有词汇测试,包含多种词库后台由腾讯云wafer解决方案. 前段时间开始学做微信小程序 ...

  2. springboot获取企业微信的access_token凭证

    文章目录 前言 一.获取access_token 二.使用步骤 1.引入jar包 2.代码实现 总结 前言 企业微信服务端API开放了丰富的能力接口,开发者可以借助接口能力,实现企业服务及企业微信的集 ...

  3. 缓存处理类(MemoryCache结合文件缓存)

    想提升站点的性能,于是增加了缓存,但是站点不会太大,于是不会到分布式memcached的缓存和redis这个nosql库,于是自己封装了.NET内置的缓存组件 原先使用System.Web.Cachi ...

  4. android 如何在线程缓存实体类

    今天,简单讲讲在线程里把数据缓存起来. 如果在线程里有一些类变量,在run的代码里循环给这些变量赋值,然后缓存在一个list链表里,最后变量链表会发现数据有的不对. 原因很简单,对于基本数据类型,可以 ...

  5. 缓存工具类MyCacheUtil

    MyCacheUtil.java package com.sunrise.jop.common.util;import java.io.File; import java.sql.Timestamp; ...

  6. php 高效缓存类,简单高效的文件缓存php类

    简单高效的文件缓存php类 class FileCache { public $keyPrefix = ''; public $cachePath = ''; public $cacheFileSuf ...

  7. mac shell 清理缓存-如微信mac清理微信缓存

    mac清理微信缓存 mac切换 xxx 所在目录 mac切换 xxx 所在目录 1.目录文件夹如download(访达) mac切换到微信所在目录(后期查看文件是否是待删除文件) 如微信 ~/Libr ...

  8. JAVA-企业微信报警工具类

    企业微信报警工具类,可用于项目内告警信息通知. import com.alibaba.fastjson2.JSON; import org.slf4j.Logger; import org.slf4j ...

  9. 微信小游戏申请注册流程+开发微信小游戏类目需要具备条件

    微信小游戏申请注册流程+开发微信小游戏类目需要具备条件 在这里先讲一下,小程序和小游戏前面的注册流程都是一样的,在注册完毕登录小程序后台后选择类目时需要注意一下,我下面讲解的是已经通过认证的服务号进行 ...

最新文章

  1. 股价相对于转股价溢价的时候,可转债就是折价状态。这就意味着只要正股保持目前的价格,赚钱的概率较高。...
  2. kill bill 杀死比尔盖茨比尔克林顿在人心中的位置..
  3. CS231n课程笔记翻译:图像分类笔记(上)
  4. mac 打开html c python,在Mac系统使用Visual Studio Code运行Python的方法
  5. 天谕手游会长大人与司空望月,谁的人气更高?都是NPC,别比了
  6. Oracle 多行合并一行 方法
  7. 计算机组成原理,计算机系统概论,计算机基本组成
  8. 如何让浮动的元素换行??css
  9. 软件测试基础:测试用例设计
  10. PostgreSQL 锁等待跟踪
  11. 在JavaScript中生成特定范围内的随机整数?
  12. L1-003 个位数统计 (15 point(s))
  13. 谷歌浏览器安装去除网页广告插件
  14. 高级职称计算机考试要求考a级,全国职称计算机考试有哪些级别
  15. 基于Python的手写拼音识别
  16. R语言与临床模型预测——LASSO回归,单因素多因素cox,差异表达分析,Venn图,森林图,列线图,矫正曲线,ROC全套代码及解析——第五部分 批量cox回归分析 本专栏可免费答疑
  17. python可以做回归分析吗_使用python进行回归分析
  18. 微信开发者工具调试H5项目报错:XXXXfail, the permission value is offline verifying解决方案
  19. yolov5的混淆矩阵
  20. 包装设计实战案例教学

热门文章

  1. Linux文件、文件内容搜索大全(find,grep命令)
  2. 蓝桥杯 ADV-105 算法提高 不同单词个数统计
  3. L1-018. 大笨钟-PAT团体程序设计天梯赛GPLT
  4. python打乱数据集_在Keras中利用np.random.shuffle()打乱数据集实例
  5. android 退出功能,android中activity连按两次返回键退出功能
  6. python 连接 oracle 循环,4.使用cx_Oracle连接Oracle(高级篇)
  7. python调用实例做父类_Python super() 调用父类方法, 但是父类中 self 并不是父类的实例而是子类的实例?...
  8. Git for Windows安装和基本设置
  9. java 实现WebService 以及不同的调用方式
  10. java反编译工具jd-gui