一个Accecc_Token生成和缓存和读取类,微信/小程序开发必须学
Access_Token是调用微信和小程序各种接口的临时凭证,有效期2小时(7200秒),很多接口都需要调用access_token接口生成一个access_token的,例如微信支付,微信分享,公众号的开发,获取openid,获取用户的基本信息,群发接口,还有网页授权等各类接口都是需要access_token的,而且每天最多只能调用2000次。
所以,量大的请求,不能每次发起请求都调用一次接口,2000次很快就请求完了,2000次用完了就没有新的access_token用了,所以不能每发起一次请求都生成一个access_token的,如果这样做,就造成不良后果。我们可以通过缓存的方法,把access_token缓存到本地或者内存中,在项目中取缓存中的access_token来调用。
因为一个access_token在2小时内都可以随便调用,没有调用次数的,而2小时后过期了,只能请求access_token生成接口,生成新的access_token,这时候新的access_token,我们可以缓存到本地或者内存,然后记录当前的时间戳,等到下次项目中需要用access_token的时候,先判断当前时间和缓存的access_token的时间差是否超过2小时,如果超过了,就调用access_token生成接口生成新的access_token,如果没有超时,那就使用缓存中的access_token。
<?php
//缓存access_token
function getToken(){
$appid='填写你的APPID';//APPID
$appsecret='填写你的APPSECRET';//APPSECRET
$file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
$result = json_decode($file,true);
//判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
//如果过期了则请求接口生成新的access_token并且缓存access_token.json
if (time() > $result['expires']){
$data = array();
$data['access_token'] = getNewToken($appid,$appsecret);
$data['expires']=time()+7000;
$jsonStr = json_encode($data);
$fp = fopen("access_token.json", "w");
fwrite($fp, $jsonStr);
fclose($fp);
return $data['access_token'];
}else{
return $result['access_token'];
}
}
//获取新的access_token
function getNewToken($appid,$appsecret){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$access_token_Arr = https_request($url);
return $access_token_Arr['access_token'];
}
//向获取access_token接口发起请求
function https_request ($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$out = curl_exec($ch);
curl_close($ch);
return json_decode($out,true);
}
//调用函数
getToken();
//输出当前缓存文件有效期内的access_token
$jsondata = file_get_contents('access_token.json');
$access_token_data = json_decode($jsondata);
echo $access_token_data->access_token;
?>
生成的本地缓存文件为
access_token.json
格式如下
{
"access_token":"16_tTsgZ08Mf13NHsO8XT19faWwQVXKuBzLs3wElIyzGWMkcFLrSCBCKpXRd8dKuPC-A32fSJPIwKx4smzOgraV8U-2qzic6UIchBqk_LqmLPwDmPj4luOf6YQor0GotWOBg1bPsB29KzZy0ChFGCVfAIACYR",
"expires":1544866066
}
作者:TANKING
网站:http://likeyunba.com