持久化access_token - 傻瓜式微信开发教程24 - 耗子原创

安装php redis扩展 - 傻瓜式微信开发教程23 - 耗子原创中我们搞定了环境的搭建,
现在我们可以直接使用redis来缓存access_token了.

我们把配置项分离到`config.php`页面,里面存放了一下微信的字段和redis的连接字段等信息:

<?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', 'weixinshow001_token');
?>

我们新建一个页面`token_get.php`,首先导入config.php,用来读取相关内容.

require_once('config.php');

之后实现`getToken`函数,返回一个数组,
其中有一个`error`字段,如果正确`error`为0,同时附带`msg`字段,
如果`error`不为0,则附带`msg`字段说明错误情况.

function getToken(){
    $mem_key = constant("token_key");
    $redis = new Redis();
    $redis->connect(
        constant("redis_host"),
        constant("redis_port")
    );
    // 读取redis中的缓存的token数据
    // 如果存在直接返回
    $mem_token = $redis->GET($mem_key);
    if($mem_token){
        $r = array(
            'error' => 0,
            'token' => $mem_token
        );
        $redis->close();
        return $r;
    }
    // 调用api获取token
    $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;
    // 将获取到的token缓存入redis
    // 设置过期时间, 这里为了安全,缓存时间比微信指定的时间少10秒
    $redis->SETEX($mem_key, $expires_in - 10, $token);
    $redis->close();
    // 返回获取到的token
    return array(
        'error' => 0,
        'token' => $token
    );
}

当我们需要在其他地方获取token的时候,使用方式如下:

// 引入获取函数
require_once('token_get.php');
// 获取token信息
$token_info = getToken();
if ($token_info['error'] != 0) {
    // 如果token获取错误,对错误进行处理
    exit("get token error\n" . $token_info['msg']);
}
// 获取到了token
$token = $token_info['token'];

调用一次后,我们就可以从后台看到redis缓存的数据了,
下一次就会读取缓存数据,而不会调用api了

持久化access_token - 傻瓜式微信开发教程24 - 耗子原创_第1张图片

更多微信开发教程,请访问http://www.weixin.com/




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