语言:PHP

access_token一直要用,但每天取的数量有限制。反正2小时才过期。就想缓存一下。

File1: wx_access_token.php

File2: file_cache.php

---------------------------

File1: wx_access_token.php

  1. <?php
  2. /*
  3. * wx_access_token.php
  4. *
  5. * get the weixin access token
  6. * */
  7. if (!defined("DOCUMENT_ROOT")) define("DOCUMENT_ROOT", $_SERVER['DOCUMENT_ROOT']);
  8. if (!defined("__HOME__")) define("__HOME__", dirname(DOCUMENT_ROOT));
  9.  
  10. require_once("file_cache.php");
  11.  
  12. class WxAccessToken{
  13. public function getToken(){
  14. $wx_access_token_cache_key = 'wx_access_token';
  15.  
  16. $cache = new FileCache(__HOME__ . '/myfolder/cache_file.txt');
  17. $token = $cache->get($wx_access_token_cache_key);
  18.  
  19. if (!$token){
  20. $token = $this->getTokenFromWx();
  21. $cache->set($wx_access_token_cache_key, $token, time()+7000);
  22. }
  23.  
  24. return $token;
  25. }
  26.  
  27. private function getTokenFromWx(){
  28. $appid = "your appid";
  29. $appsecret = "your app secret";
  30. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
  31. $ch = curl_init();
  32. curl_setopt($ch, CURLOPT_URL, $url);
  33. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  34. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  35. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  36. $output = curl_exec($ch);
  37. curl_close($ch);
  38.  
  39. $jsoninfo = json_decode($output, true);
  40.  
  41. return $jsoninfo["access_token"];
  42. }
  43. }
  44. ?>

File2: file_cache.php

  1. <?php
  2. /*
  3. * file_cache.php
  4. *
  5. * cache objects via json with filesystem
  6. * author: hydon lee
  7. * */
  8.  
  9. /*
  10. class FileCache
  11.  
  12. examples:
  13. $cache = new FileCache('../myfolder/cache_file.txt');
  14. $cache->set('username', 'lihd', time()+3600);
  15. $username = $cache->get('username');
  16. echo $username;
  17. */
  18. class FileCache{
  19. private $cache_file;
  20.  
  21. private function load(){
  22. if(file_exists($this->cache_file)){
  23. $content = file_get_contents($this->cache_file);
  24.  
  25. if (strlen($content) > 0){
  26. $data = json_decode($content);
  27.  
  28. return $data;
  29. }
  30. }
  31.  
  32. return array();
  33. }
  34.  
  35. private function save($data){
  36. $content = json_encode($data);
  37. return file_put_contents($this->cache_file, $content);
  38. }
  39.  
  40. public function __construct($filename) {
  41. $this->cache_file = $filename;
  42. }
  43.  
  44. public function get($key){
  45. $data = $this->load();
  46.  
  47. foreach($data as $item){
  48. if ($item->key == $key){
  49. if ($item->expire_time > time()){
  50. return $item->value;
  51. }
  52.  
  53. break;
  54. }
  55. }
  56.  
  57. return NULL;
  58. }
  59.  
  60. public function set($key, $value, $expire_time=NULL){
  61. $data = $this->load();
  62.  
  63. $obj = NULL;
  64. foreach($data as $item){
  65. if ($item->key == $key){
  66. $obj = $item;
  67.  
  68. $obj->value = $value;
  69. if ($expire_time != NULL){
  70. $obj->expire_time = $expire_time;
  71. }
  72.  
  73. break;
  74. }
  75. }
  76.  
  77. if ($obj == NULL){
  78. $obj = new CacheItem($key, $value, $expire_time);
  79. array_push($data, $obj);
  80. }
  81.  
  82. return $this->save($data);
  83. }
  84. }
  85.  
  86. class CacheItem{
  87. public $key;
  88. public $value;
  89. public $expire_time;
  90.  
  91. public function __construct($key, $value, $expire_time) {
  92. $this->key = $key;
  93. $this->value = $value;
  94. $this->expire_time = $expire_time;
  95. }
  96. }
  97. ?>

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. MySQL(23):事务的隔离级别出现问题之 脏读

    1. 脏读 所谓的脏读就是指一个事务读取了另一个事务未提取的数据. 试想一下:a账户要给b账户100元购买商品,如果a账户开启一个事务,执行下面的update语句做了如下转账的工作: update a ...

  2. 关于Django中的表单验证

    ModelForm 和 普通的Form 都可以做表单验证 对于ModelForm如果只是想验证其中一部分model中的field,可以指定:内部类Meta的fields元素: fields = ('x ...

  3. iOS菜鸟总结1

    我从第一次接触OC,我觉得想要学好就必须有提前的知识的储备(比如c,java).这样就可更好了解面向对象的这一思想.学起来就不是很吃力了,本来OC就是比较难学的语言.工欲善其事,必先利其器,Xcode ...

  4. open source e-business software - prestashop

    https://www.prestashop.com/en/system-requirements

  5. 【WinAPI】User32.dll注释

    #region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备 ...

  6. Java跳出循环-break和continue语句

    在实际编程中,有时需要在条件语句匹配的时候跳出循环.在Java里,由break和continue语句控制. “break”语句 “break”语句用来结束循环,即不再执行后边的所有循环. 示例:计算1 ...

  7. 在ios7系统下,scrollView下移20像素

    从设备图库返回到scrollView时,scrollView会下移20像素,解决办法:self.edgesForExtendedLayout = UIRectEdgeNone; 如果加入此代码导致其他 ...

  8. jsonString转NSDictionary

    NSData *webData = [ \": {\"name\": \"Jerry\",\"age\": \"12\& ...

  9. Swiper之滑块3

    上章Swiper滑块2.Swiper滑块1都是手动的,这章我们来自动的! 其实只是加了Swiper的speed(滑动速度即slider自动滑动开始到结束的时间)属性而已(∩_∩),单位是ms < ...

  10. 研究validation插件到现在的感受

    1.比较累 2.看了几十个页面参考是有的,要抓住问题的实质,实质在于要改插件代码.因为它本身不提供这个方法. 3.对了,还没有描述这个问题,问题就是再次验证时,成功的样式不消失.解决方法如下: 修改了 ...