php編寫緩存微信access_token到本地腳本示例
access_token存儲(chǔ)更新
access_token 的存儲(chǔ)至少要保留 512 個(gè)字符空間;
access_token 的有效期目前為 2 個(gè)小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的 access_token 失效,并且每天獲取的頻次有限,所以需要進(jìn)行本地緩存或者緩存到數(shù)據(jù)庫(kù)進(jìn)行使用,而不是每次調(diào)用接口都獲取access_token
獲取access_token并緩存到本地access_token.php文件封裝函數(shù)
<?php
// APPID
$APPID = 'xxx';
// APPSECRET
$APPSECRET = 'xxx';
// 緩存文件路徑
$TOKEN_FILE = 'access_token.php';
// 刷新 Access_Token 的函數(shù)
function refreshAccessToken($appid, $appsecret) {
// 官方接口
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
// 發(fā)起請(qǐng)求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 結(jié)果
$response = curl_exec($ch);
curl_close($ch);
// 解析結(jié)果
$data = json_decode($response, true);
if (isset($data['access_token'])) {
// 返回access_token
return $data['access_token'];
} else {
// 解析失敗
return false;
}
}
// 從緩存文件中獲取 Access_Token 和過(guò)期時(shí)間戳
function getAccessTokenFromCache($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
function updateAccessTokenCache($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);
}
// 獲取當(dāng)前時(shí)間
$current_time = time();
// 從緩存文件中獲取 Access_Token 和過(guò)期時(shí)間戳
$tokenData = getAccessTokenFromCache($TOKEN_FILE);
// 未過(guò)期
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";
}
}
?>總結(jié)
在以上腳本中,加載這個(gè)腳本,會(huì)立刻讀取本地access_token.php文件,如果存在這個(gè)文件,就解析這個(gè)文件的內(nèi)容,讀取里面的access_token和過(guò)期時(shí)間,如果過(guò)期了,就直接調(diào)用請(qǐng)求接口獲取信的access_token并更新文件,如果沒(méi)有過(guò)期,直接使用access_token.php文件里面的access_token作為業(yè)務(wù)需要。
以上就是php編寫緩存微信access_token到本地腳本示例的詳細(xì)內(nèi)容,更多關(guān)于php access_token微信緩存本地腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PHP實(shí)現(xiàn)簡(jiǎn)易圖形計(jì)算器
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)簡(jiǎn)易圖形計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
PHP?Composer自動(dòng)加載使用實(shí)戰(zhàn)
這篇文章主要為大家介紹了PHP?Composer自動(dòng)加載使用實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
yii框架無(wú)限極分類的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了yii框架無(wú)限極分類的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
thinkphp3.x中display方法及show方法的用法實(shí)例
這篇文章主要介紹了thinkphp3.x中display方法及show方法的用法,結(jié)合實(shí)例形式分析了thinkPHP3.x模板的功能、定義、賦值、渲染及輸出等技巧,需要的朋友可以參考下2016-05-05
PHP中把有符號(hào)整型轉(zhuǎn)換為無(wú)符號(hào)整型方法
這篇文章主要介紹了PHP中把有符號(hào)整型轉(zhuǎn)換為無(wú)符號(hào)整型方法,轉(zhuǎn)換的方法很簡(jiǎn)單,本文直接給出轉(zhuǎn)換方法,需要的朋友可以參考下2015-05-05
php版微信開發(fā)之接收消息,自動(dòng)判斷及回復(fù)相應(yīng)消息的方法
這篇文章主要介紹了php版微信開發(fā)之接收消息,自動(dòng)判斷及回復(fù)相應(yīng)消息的方法,涉及基于微信消息處理接口的調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
php實(shí)現(xiàn)paypal 授權(quán)登錄
本文給大家分享的是php實(shí)現(xiàn)的paypal授權(quán)登錄的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-05-05
Laravel中9個(gè)不經(jīng)常用的小技巧匯總
這篇文章主要給大家總結(jié)介紹了關(guān)于Laravel中9個(gè)不經(jīng)常用的小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

