<?php
// APPID
$APPID='xxx';
// APPSECRET
$APPSECRET='xxx';
// 缓存文件路径
$TOKEN_FILE='access_token.php';
// 刷新 Access_Token 的函数
functionrefreshAccessToken($appid,$appsecret) {
// 官方接口
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
// 发起请求
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 结果
$response= curl_exec($ch);
curl_close($ch);
// 解析结果
$data= json_decode($response, true);
if(isset($data['access_token'])) {
// 返回access_token
return$data['access_token'];
}else{
// 解析失败
returnfalse;
}
}
// 从缓存文件中获取 Access_Token 和过期时间戳
functiongetAccessTokenFromCache($tokenFile) {
// 判断缓存文件是否存在
if(file_exists($tokenFile)) {
// 如果缓存文件存在
$tokenData=include($tokenFile);
if($tokenData&&is_array($tokenData) && isset($tokenData['access_token']) && isset($tokenData['expires_at'])) {
// 返回access_token
return$tokenData;
}
}
}
// 更新缓存文件中的 Access_Token
functionupdateAccessTokenCache($tokenFile,$access_token,$expires_in) {
// 提前一分钟刷新
$expires_at= time() +$expires_in- 60;
// 生成缓存文件
$tokenData="<?php\nreturn array('access_token' => '$access_token', 'expires_at' => $expires_at);\n";
file_put_contents($tokenFile,$tokenData);
}
// 获取当前时间
$current_time= time();
// 从缓存文件中获取 Access_Token 和过期时间戳
$tokenData= getAccessTokenFromCache($TOKEN_FILE);
// 未过期
if($tokenData&&$tokenData['expires_at'] >$current_time) {
// 使用缓存的 Access_Token
$access_token=$tokenData['access_token'];
// 输出已缓存的access_token
echo"缓存的Access_Token: $access_token\n";
}else{
// 刷新 Access_Token
$access_token= refreshAccessToken($APPID,$APPSECRET);
// 获取成功
if($access_token) {
// 输出新的access_token
echo"新的Access_Token: $access_token\n";
// 更新缓存文件
updateAccessTokenCache($TOKEN_FILE,$access_token, 7200);
}else{
// 刷新失败
echo"Access_Token刷新失败\n";
}
}
?>
|