一個Accecc_Token生成和快取和讀取類,微信/小程式開發必須學
Access_Token是呼叫微信和小程式各種介面的臨時憑證,有效期2小時(7200秒),很多介面都需要呼叫access_token介面生成一個access_token的,例如微信支付,微信分享,公眾號的開發,獲取openid,獲取使用者的基本資訊,群發介面,還有網頁授權等各類介面都是需要access_token的,而且每天最多隻能呼叫2000次。
所以,量大的請求,不能每次發起請求都呼叫一次介面,2000次很快就請求完了,2000次用完了就沒有新的access_token用了,所以不能每發起一次請求都生成一個access_token的,如果這樣做,就造成不良後果。我們可以通過快取的方法,把access_token快取到本地或者記憶體中,在專案中取快取中的access_token來呼叫。
因為一個access_token在2小時內都可以隨便呼叫,沒有呼叫次數的,而2小時後過期了,只能請求access_token生成介面,生成新的access_token,這時候新的access_token,我們可以快取到本地或者記憶體,然後記錄當前的時間戳,等到下次專案中需要用access_token的時候,先判斷當前時間和快取的access_token的時間差是否超過2小時,如果超過了,就呼叫access_token生成介面生成新的access_token,如果沒有超時,那就使用快取中的access_token。
<?php
//快取access_token
function getToken(){
$appid='填寫你的APPID';//APPID
$appsecret='填寫你的APPSECRET';//APPSECRET
$file = file_get_contents("access_token.json",true);//讀取access_token.json裡面的資料
$result = json_decode($file,true);
//判斷access_token是否在有效期內,如果在有效期則獲取快取的access_token
//如果過期了則請求介面生成新的access_token並且快取access_token.json
if (time() > $result['expires']){
$data = array();
$data['access_token'] = getNewToken($appid,$appsecret);
$data['expires']=time()+7000;
$jsonStr = json_encode($data);
$fp = fopen("access_token.json", "w");
fwrite($fp, $jsonStr);
fclose($fp);
return $data['access_token'];
}else{
return $result['access_token'];
}
}
//獲取新的access_token
function getNewToken($appid,$appsecret){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$access_token_Arr = https_request($url);
return $access_token_Arr['access_token'];
}
//向獲取access_token介面發起請求
function https_request ($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$out = curl_exec($ch);
curl_close($ch);
return json_decode($out,true);
}
//呼叫函式
getToken();
//輸出當前快取檔案有效期內的access_token
$jsondata = file_get_contents('access_token.json');
$access_token_data = json_decode($jsondata);
echo $access_token_data->access_token;
?>
生成的本地快取檔案為
access_token.json
格式如下
{
"access_token":"16_tTsgZ08Mf13NHsO8XT19faWwQVXKuBzLs3wElIyzGWMkcFLrSCBCKpXRd8dKuPC-A32fSJPIwKx4smzOgraV8U-2qzic6UIchBqk_LqmLPwDmPj4luOf6YQor0GotWOBg1bPsB29KzZy0ChFGCVfAIACYR",
"expires":1544866066
}
作者:TANKING
網站:http://likeyunba.com
相關文章
- 淺談微信小程式用setStorage和getStorage快取和獲取資料微信小程式快取
- 微信開發:清除微信瀏覽器快取瀏覽器快取
- 分享幾個微信小程式開發框架和工具微信小程式框架
- 微信小程式根據本地快取圖片路徑,生成縮圖的方法微信小程式快取
- 微信小程式 實現網路圖片本地快取微信小程式快取
- 爬蟲爬取微信小程式爬蟲微信小程式
- 微信小程式獲取openid,unionid微信小程式
- 微信小程式—— 獲取資料微信小程式
- uniapp微信小程式獲取定位APP微信小程式
- 開發APP和開發微信小程式的區別?APP微信小程式
- mybatis原始碼學習:一級快取和二級快取分析MyBatis原始碼快取
- 微信小程式獲取當前位置微信小程式
- Android 擼一個快取工具類Android快取
- 清理 Conda 快取和 Pip 快取快取
- 微信小程式開發框架和工具庫推薦微信小程式框架
- 微信Access Token 快取方法快取
- Mybatis的快取——一級快取和原始碼分析MyBatis快取原始碼
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- TP5自動生成APP和微信小程式APP微信小程式
- 微信小程式學習:雲開發微信小程式
- 快速學會開發微信小程式微信小程式
- 微信開發之小程式獲取手機號授權登入
- 微信小程式開發-canves 圖片壓縮 獲取base64微信小程式
- Redis 的高效能快取機制的三類問題:快取擊穿、快取雪崩 和 快取穿透Redis快取穿透
- 獲取微信小程式頁面路徑微信小程式
- java微信小程式獲取ACCESS_TOKENJava微信小程式
- 基於微信開發的一款工具類小程式。
- 聊聊本地快取和分散式快取快取分散式
- 對比學習Vue和微信小程式Vue微信小程式
- 淺談快取寫法(一):快取的雪崩和穿透快取穿透
- 一鍵生成釋出百度小程式、微信小程式、支付寶和今日頭條小程式微信小程式
- 一文詳解 JuiceFS 讀效能:預讀、預取、快取、FUSE 和物件儲存UI快取物件
- 微信小程式開發微信小程式
- 微信小程式 獲取微信暱稱頭像 獲取openid 封裝請求post微信小程式封裝
- 微信清除快取資料方法快取
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- 微信小程式開發03-這是一個元件微信小程式元件
- 開發微信小程式的個人感想微信小程式