之前我们是使用redis来缓存access_token的,
但是实际上SAE是不支持redis的,
这次我们学习使用memcached来缓存access_token.
我们可以使用一个php网页来查看php环境是否支持memcached,
当然SAE是支持的,自建的服务器就需要自动安装memcached插件了.
查看php是否支持的方法是,新建一个info.php页面,然后写入:
<?php phpinfo(); ?>
上传到服务器,用浏览器访问这个页面就可以了,我们会看到类似下面的页面.
我们以SAE服务器为例,介绍使用memcached缓存access_token.
1. 在SAE中激活Memcache服务,主要是因为这个是按时间消耗云豆的.
a. 进入你的新浪云平台,选择要设置的应用,进入管理页面 b. 选择服务管理下的Memcache这个链接,点击一下c. 进入Memcache这个页面,选择“点此初始化MC”这个按钮,更具自己网站的需求设置缓存的容量,当你输入的时候会提示你该设置下要消耗多少云豆,建议大家认真设置,如果设置不合理,导致云豆的巨大浪费,或者没有发挥到Memcache的真正作用。
其实和redis缓存的流程是一样的,
我们修改一下同时兼容redis和memcached.
接下来我们修改一下之前用到的`token_get.php`页面.
<?php require_once('config.php'); function getToken(){ $redis = NULL; $mem = NULL; $mem_token = NULL; $mem_key = constant("token_key"); if(class_exists("Redis")){ $redis = new Redis(); $redis->connect( constant("redis_host"), constant("redis_port") ); $mem_token = $redis->GET($mem_key); } else{ $mem = memcache_init(); $mem_token = $mem->get($mem_key); } if($mem_token){ if($redis){ $redis->close(); } if($mem){ $mem->close(); } $r = array( 'error' => 0, 'token' => $mem_token ); return $r; } $appid = constant("appid"); $appsecret = constant("appsecret"); $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; // 构建http请求并执行 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response=curl_exec($ch); curl_close($ch); $back_info = json_decode($response); if(!isset($back_info->access_token)){ return array( 'error' => -1, 'msg' => $response ); } $token = $back_info->access_token; $expires_in = $back_info->expires_in; if($redis){ $redis->SETEX($mem_key, $expires_in - 10, $token); $redis->close(); } if($mem){ $mem->set($mem_key, $token, 0, $expires_in - 10); $mem->close(); } return array( 'error' => 0, 'token' => $token ); } ?>
我们注意到这里使用了config.php文件,
里面存放的是我们一写自己的信息,请根据自己的实际情况更改
<?php // weixin define('token', 'xxx'); define('aeskey', 'xxx'); define('appid', 'xxx'); define('appsecret', 'xxx'); define('debug', true); // redis define('redis_host', '127.0.0.1'); define('redis_port', 6379); define('token_key', 'xxx_token'); ?>
我们可以通过SAE的memcached后台,查看acccess_token缓存情况.
更多微信开发教程,请访问微信开发者社区