一個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快取和獲取資料微信小程式快取
- 微信小程式之資料快取微信小程式快取
- 快取和併發快取
- 微信開發:清除微信瀏覽器快取瀏覽器快取
- mybatis原始碼學習:一級快取和二級快取分析MyBatis原始碼快取
- 分享幾個微信小程式開發框架和工具微信小程式框架
- 微信小程式根據本地快取圖片路徑,生成縮圖的方法微信小程式快取
- Mybatis的快取——一級快取和原始碼分析MyBatis快取原始碼
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 快取、快取演算法和快取框架簡介快取演算法框架
- 聊聊本地快取和分散式快取快取分散式
- 清理 Conda 快取和 Pip 快取快取
- Android 擼一個快取工具類Android快取
- 淺談快取寫法(一):快取的雪崩和穿透快取穿透
- python讀取和生成excel檔案PythonExcel
- 微信小程式 實現網路圖片本地快取微信小程式快取
- 一文詳解 JuiceFS 讀效能:預讀、預取、快取、FUSE 和物件儲存UI快取物件
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- 快取穿透、快取雪崩和快取擊穿是什麼?快取穿透
- Mybatis 一級快取和引發的問題MyBatis快取
- 淺解強快取和協商快取快取
- 瀏覽器快取和webpack快取配置瀏覽器快取Web
- Hibernate的一級快取Session和二級快取SessionFactory快取Session
- MyBatis中的一級快取和二級快取介紹MyBatis快取
- 開發APP和開發微信小程式的區別?APP微信小程式
- 微信小程式開發深入解讀微信小程式
- http快取策略以及強快取和協商快取淺析HTTP快取
- 開發 web 桌面類程式幾個必須關注的細節Web
- 二次封裝的快取框架wCache(支援快取時間、預設值)--微信小程式封裝快取框架微信小程式
- 現學現賣微信小程式開發(一)微信小程式
- 快取: Memcached和terracotta快取
- 咖啡汪日誌——實際開發中如何避免快取穿透和快取雪崩(程式碼示例實際展示)快取穿透
- Hibernate中一級快取和二級快取使用詳解快取
- 快取和web快取分別是什麼?快取Web
- 對於前端快取的理解(快取機制和快取型別)前端快取型別
- 面試官:快取穿透、快取雪崩和快取擊穿是什麼?面試快取穿透
- 爬蟲爬取微信小程式爬蟲微信小程式
- 微信小程式—— 獲取資料微信小程式