如何高效率儲存微信中的 access_token 限制申請2000次/天
阿新 • • 發佈:2019-01-06
如何高效率儲存微信中的 access_token
眾所周知,在微信開發中,獲取
access_token
的介面每天的呼叫次數是有限制的,2000
次應該是。
不過其實這些完全夠用了,除非你不小心寫了個迴圈,在1秒中內用完了。
每個access_token
的生效時間是2小時內
,2小時過後就需要重新申請一下。其實每天只需要申請12次就可以了。
不管你怎麼申請,當前申請了access_token
,以前的就都不能用了。
所以解決辦法就是:
在資料庫中新建一個表token
盛放申請來的access_token
,欄位有三個
access_token #存放access_token
expires #存放毫秒數
update_time #更新時間戳
邏輯是這樣的:(表中只有一條資料)
查詢表中資料
如果有資料,用 時間戳+更新時間 跟 現在時間比較,計算是否已過期:
如果已過期,重新申請,並更新資料庫中資料,並返回access_token
如果沒有過期,直接返回查詢出的access_token
如果沒資料:
申請資料並,插入資料庫,返回access_tooken
/*
---------------------
獲取access_token:
查詢資料庫中是否有資料,
如果有 取出資料
如果已經過期,查詢,更新記錄
如果沒過期,直接返回資料
如果沒有 查詢並新增資料,返回資料
---------------------
*/
function get_token(){
$access_url= 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' .AppID.'&secret='.AppScret;
//AppID AppScret 已經定義為常量
//資料庫引數
$host= "1.1.1.1";
$port = '3306';
$database = "wx";
$user = "mysql";
$passwd = "mysql";
$db = new mysqli($host,$user,$passwd,$database,$port);
$sql = "select * from token"; //查詢wx表資料
$exist = $db->query($sql);
global $access_token;
if($exist->num_rows)
//如果存在資料
{
$row = $exist->fetch_array();
//如果資料已過期
if($row['expires']+$row['update_time']<time()){
$token = json_decode(file_get_contents($access_url));
$sql = "update token set access_token = '{$token->access_token}' where access_token = '{$row['access_token']}'";
$db->query($sql);
$access_token = $token->access_token; //返回更新的token
} else {
$access_token = $row['access_token']; //返回查詢的token
}
}
//如果沒有資料
else {
$token = json_decode(file_get_contents($access_url));
$sql = "insert into token values('{$token->access_token}',{$token->expires_in},".time().")";
$db->query($sql);
$access_token = $token->access_token; //返回新建的token
}
$db->close();
return $access_token; //返回access_token
}