获取凭证即为获取access_token,它是公众号的全局唯一凭证,公众号调用各接口时都需使用access_token。重复获取将导致上次获取的access_token失效。每次获取的token24小时内有效,也就是86400秒,每个公众号每天调用此接口固定为200次。
请求说明
http请求方式: GET
https://api.yixin.im/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
请求参数
参数 | 是否必须 | 描述 |
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户唯一凭证 |
secret | 是 | 第三方用户唯一凭证密钥,既appsecret |
返回说明
{"access_token":"ACCESS_TOKEN","expires_in":86400}
返回参数
参数 | 描述 |
access_token | 获取到的凭证。 |
expires_in | 凭证有效时间,单位:秒 |
异常返回说明
{"errcode":40013,"errmsg":"invalidappid"}
考虑到易信中的accesstoken很重要,在自定义菜单以及很多高级接口中都会频繁使用,我们进行了封装,首次调用将会生成AccessToken并缓存到文件中,在24小时调用将会返回缓存中的AccessToken。
代码封装,具体可以查看YiXinCore.class.php文件
public function checkToken()
{
// 先读取缓存文件;
$file = $this->readFile();
if($file)
{
// 文件有内容
if($file['access_token']) // 保存有access_token内容;
{
$access_time = $file['access_time'];
$now_time = time();
$dif = $now_time - $access_time;
// 是否超期限,重新获取access_token
if($dif >= 86400)
{
$arr = $this->getAccessToken();
if($arr)
{
// 写入缓存文件;
$this->writeFile($arr);
// 返回 access_token;
return $arr['access_token'];
}
else
{
return false;
}
}
else
return $file['access_token']; // 直接返回缓存的 access_token ;
}
else
{
// 重新获取access_token
$arr = $this->getAccessToken();
if($arr)
{
// 写入缓存文件;
$this->writeFile($arr);
// 返回 access_token;
return $arr['access_token'];
}
else return false;
}
}
else
{
// 重新获取access_token
$arr = $this->getAccessToken();
if($arr)
{
// 写入缓存文件;
$this->writeFile($arr);
// 返回 access_token;
return $arr['access_token'];
}
else return false;
}
}
private $f_token = './cache/accesstoken.cache';
public function getAccessToken()
{
$url = 'https://api.yixin.im/cgi-bin/token?grant_type=client_credential';
$url .= '&appid='.APPID.'&secret='.APPSECRET;
$re = file_get_contents($url,false);
$arr = json_decode($re,true);
if($arr['errcode'])
{
Log::wLog('INFO','获取access_token失败,错误码:'.$arr['errcode']);
return 0;
}
else
{
$arr['access_time'] = time();
Log::wLog('INFO','获取access_token成功。');
return $arr;
}
}
public function readFile()
{
$handle = fopen($this->f_token,'r');
Log::wLog('INFO','$handle'.$handle);
if($handle)
{
return unserialize(fread($handle, filesize ($this->f_token)));
}
else return 0;
}
public function writeFile($arr)
{
if(file_put_contents($this->f_token,serialize($arr)))
{
Log::wLog('INFO','写入access_token缓存成功。');
return 1;
}
else
{
Log::wLog('INFO','写入access_token缓存失败。');
return 0;
}
}
利用了文件进行缓存,将数组序列化保存。反序列化读出。
代码调用:
$ak=new YiXinCore();
echo $ak->checkToken();