与微信类似,易信公众平台也需要access_token,且其每日有获取限制,且每次获取的access_token都有其生存时限。所以我们需要将获取的access_token缓存起来,每次使用时再判断其时限。
在yixin.class.php 文件的类 YixinAccess 中添加私有方法 checkToken:
-
-
// 检查access_token是否在有效期内
-
// 如果在,则返回保存的 access_token
-
// 否则从接口获取 access_token 并将其存入缓存文件;
-
private function checkToken()
-
{
-
// 先读取缓存文件;
-
$re = $this->readCache();
-
if($re)
-
{
-
// 文件有内容
-
if($re['access_token']) // 保存有access_token内容;
-
{
-
$expires_in = $re['expires_in'];
-
$access_time = $re['access_time'];
-
$now_time = time();
-
$dif = $now_time - $access_time;
-
// 是否超期限
-
if($dif >= $expires_in)
-
{
-
// 重新获取access_token
-
$aryToken = $this->getAccessToken();
-
if($aryToken)
-
{
-
// 写入缓存文件;
-
$this->writeCache($aryToken);
-
// 返回 access_token;
-
return $aryToken['access_token'];
-
}
-
else return false;
-
}
-
else return $re['access_token']; // 直接返回缓存的 access_token ;
-
-
}
-
else
-
{
-
// 重新获取access_token
-
$aryToken = $this->getAccessToken();
-
if($aryToken)
-
{
-
// 写入缓存文件;
-
$this->writeCache($aryToken);
-
// 返回 access_token;
-
return $aryToken['access_token'];
-
}
-
else return false;
-
}
-
-
}
-
else
-
{
-
// 重新获取access_token
-
$aryToken = $this->getAccessToken();
-
if($aryToken)
-
{
-
// 写入缓存文件;
-
$this->writeCache($aryToken);
-
// 返回 access_token;
-
return $aryToken['access_token'];
-
}
-
else return false;
-
}
-
}
可以看到,在我们的接口中如果需要用到 access_token,则可以通过 $access_token = $this->checkToken() 方式获得。其中用到四个方法如下:
1、以文件形式保存系统日志 log($data):
-
// 记录日志到文本文件;
-
private function log($data)
-
{
-
@$handle = fopen($this->f_logs,'a');
-
if($handle)
-
{
-
// 写入文件
-
fwrite($handle,"=============================================================\r\n");
-
fwrite($handle,'行为:'.$data."\r\n");
-
fwrite($handle,"时间:".date('Y-m-d H:i:s',time())."\r\n");
-
fclose($handle);
-
}
-
}
2、从access_token缓存文件读取 access_token 的方法:
-
// 读取access_token缓存
-
// 成功返回数组否则返回0
-
private function readCache()
-
{
-
@$handle = fopen($this->f_token,'r');
-
if($handle)
-
{
-
return unserialize(fread($handle, filesize ($this->f_token)));
-
}
-
else return 0;
-
}
3、将获取的access_token写入缓存文件的方法:
-
// 写access_token缓存文件
-
// 成功返回1否则返回0
-
private function writeCache($aryToken)
-
{
-
if(@file_put_contents($this->f_token,serialize($aryToken)))
-
{
-
$this->log('写入access_token缓存成功。');
-
return 1;
-
}
-
else
-
{
-
$this->log('写入access_token缓存失败。');
-
return 0;
-
}
-
}
4、从易信接口获取access_token的方法:
-
// 从易信接口获得 access_token
-
// 成功返回数组否则返回0
-
private function getAccessToken()
-
{
-
$url = '';
-
$url .= '&appid='.APPID.'&secret='.SECRET;
-
$re = file_get_contents($url,false);
-
$aryToken = json_decode($re,true);
-
if($aryToken['errcode'])
-
{
-
// 接口返回错误
-
// 记录日志
-
$this->log('获取access_token失败,错误码:'.$aryToken['errcode']);
-
return 0;
-
}
-
else
-
{
-
$aryToken['access_time'] = time();
-
// 记录日志;
-
$this->log('获取access_token成功。');
-
return $aryToken;
-
}
-
}
getAccessToken()方法用到了常量 APPID & SECRET,这个在验证开发者之后易信就会给你了,我们只需在接口文件 echo.php 中定义他们就可以了,例如:
-
<?php
-
require_once('./yixin.class.php');
-
ini_set('date.timezone','Asia/Shanghai'); // 设置本地时区;
-
-
// 定义TOKEN常量;
-
define('TOKEN','yxTest');
-
// 开发者凭据;
-
define('APPID','Your APP_ID');
-
define('SECRET','Your APP_SECRET');
阅读(2403) | 评论(0) | 转发(0) |