微信提供API接口, 使用接口的第一步是需要通过以下API获得一个 access token, 这个 token 目前有效期 2个小时.
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
如果在过期之前调用API将会返回同样的 token, 问题是这个API的调用次数每天是有上限的 所以我们需要尽可能的重复利用这个 token. 我们可以把这个 token 存到数据库或者文件中 只要不过期 就可以反复使用.
以下PHP脚本就提供了这样一个功能, 把获取的token和有效期存到文件中 只要不过期就提供缓存的值 这样可以减少调用微信API的次数(减少因调用API所带来的延时).
define('APPID', '您的APPID');
define('APPSECRET', '您的APP SECRET');
define('TOKENFILE', 'token.txt');
define('EXPIRY', '有效期.txt');
date_default_timezone_set('UTC');
function getToken() {
$tokenfile = TOKENFILE;
$expiryfile = EXPIRY;
if (is_file($tokenfile)) {
$token = trim(file_get_contents($tokenfile));
}
if ($token && is_file($expiryfile)) {
$x = (integer)trim(file_get_contents($expiryfile));
if ($x > 0) {
if (time() < $x) { // 这个 token 仍然有效
return $token;
}
}
}
// 无法找到有效的 token 所以就访问微信API获得这个 token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=" . APPSECRET;
$data = trim(file_get_contents($url));
if ($data) {
$data = json_decode($data, true);
if ($data) {
$token = $data['access_token'];
$expiry = time() + (integer)$data['expires_in'];
// 把得到的数据缓存在文件中 以备下次使用
file_put_contents($tokenfile, $token, LOCK_EX);
file_put_contents($expiryfile, $expiry, LOCK_EX);
return $token;
}
}
// 无法获得 例如网络原因
return "";
}
英文: How to Cache WeChat Token via PHP?
Github 代码
上一篇: 微软面试题: 三角形的面积是多少?
下一篇: 如何在海外 在线观看 2016 欧洲杯比赛?
扫描二维码,分享本文到微信朋友圈
不错.