微信的access_token的获取次数是是限制的,不知道我写的代码是不是正确的
//获取微信access_token
function get_access_token(){
$appid = C("APPID");
$appSecret = C("APPSECRET");
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appSecret";
$where = array(
"appid" =>$appid,
"appsecret" =>$appSecret,
);
$res = M("as")->field('expire,accesssecret,timestamp')->where($where)->select();
if(!$res){//当as表里没有数据的时候
dump("!res");
$return = json_decode(curl($url));
$data['appid'] = $appid;
$data['appsecret'] = $appSecret;
$data['expire'] = $return->expires_in;
$data['accesssecret'] = $return->access_token;
$data['timestamp'] = time();
M("as")->add($data);
$token = $data['accesssecret'];
}else if($res[0]['expire']+$res[0]['timestamp']-30 < time()){//当时间过期的时候
dump("time out");
$return = json_decode(curl($url));
$data['expire'] = $return->expires_in;
$data['accesssecret'] = $return->access_token;
$data['timestamp'] = time();
M("as")->where("appid='".$appid."'")->save($data);
$token = $data['accesssecret'];
}else{
$token = $res[0]['accesssecret'];
}
return $token;
}
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
关于AccessToken
1.每天请求次数为2000次;
2.每个Access_Token有效期为2小时;
存储方案:
NoSQL方案 > 数据库 > 文件管理使用session加过期时间
文档上好像说了吧,这个东西你要保存到你本地的数据库的
你做query的时候,先到本地数据库查找,
没有合适的就query weixin api,使用获得的结果,并且把结果保存到数据库中
下次使用的时候也先query数据库
官方sdk有标准示例。把值存到文件,包括过期时间。每次用的时候比对时间,过期就去取,然后存。反之直接用。
我的方案是写一个JSON文件存储到服务器上,
用数据库存过,原理一样,但是觉得这样操作简单一些。
我的习惯是三层去获取token
首先读取缓存(如memcache、redis或文件缓存都行)
如果缓存读取失败,就读取数据库(并写入缓存。下次就直接读取缓存了)
最后通过微信API接口获取,获取后写入到数据库,并写入到缓存
每小时更新一次,用的时候直接取这个