使用memcached缓存access_token - 傻瓜式微信开发教程25 - 耗子原创

之前我们是使用redis来缓存access_token的,
但是实际上SAE是不支持redis的,
这次我们学习使用memcached来缓存access_token.
我们可以使用一个php网页来查看php环境是否支持memcached,
当然SAE是支持的,自建的服务器就需要自动安装memcached插件了.
查看php是否支持的方法是,新建一个info.php页面,然后写入:

<?php
  phpinfo();
?>

上传到服务器,用浏览器访问这个页面就可以了,我们会看到类似下面的页面.
使用memcached缓存access_token - 傻瓜式微信开发教程25 - 耗子原创_第1张图片 

我们以SAE服务器为例,介绍使用memcached缓存access_token.
1. 在SAE中激活Memcache服务,主要是因为这个是按时间消耗云豆的.

a. 进入你的新浪云平台,选择要设置的应用,进入管理页面
b. 选择服务管理下的Memcache这个链接,点击一下c. 进入Memcache这个页面,选择“点此初始化MC”这个按钮,更具自己网站的需求设置缓存的容量,当你输入的时候会提示你该设置下要消耗多少云豆,建议大家认真设置,如果设置不合理,导致云豆的巨大浪费,或者没有发挥到Memcache的真正作用。


使用memcached缓存access_token - 傻瓜式微信开发教程25 - 耗子原创_第2张图片 

其实和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缓存情况.
使用memcached缓存access_token - 傻瓜式微信开发教程25 - 耗子原创_第3张图片

更多微信开发教程,请访问微信开发者社区

你可能感兴趣的:(微信开发教程,微信开发者社区,公众号开发,微信开发者平台)