安装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了
更多微信开发教程,请访问http://www.weixin.com/