Рубрики
Uncategorized

Класс генерации и кэширования и чтения Access_Token, Разработка Wechat/Небольших программ Должна изучить

Автор оригинала: David Wong.

Access_Token-это временные учетные данные для вызова различных интерфейсов Wechat и апплета. Его срок действия составляет 2 часа (7200 секунд). Openid.Для создания Wechat-токена многим интерфейсам необходимо вызвать интерфейс токена доступа, например, для оплаты через Wechat, обмена через Wechat, разработки общедоступных номеров, доступа к openid, доступа к основной информации пользователя, интерфейса групповой отправки и авторизации веб-страницы. N, и может вызываться не более 2000 раз в день.

Поэтому большое количество запросов не может вызывать интерфейс каждый раз, когда инициируется запрос. 2000 запросов быстро исчерпываются, и при исчерпании 2000 запросов новый ключ доступа не используется. Таким образом, access_token не может создаваться каждый раз при инициировании запроса. Если это будет сделано, это приведет к неблагоприятным последствиям. Мы можем кэшировать access_token в локальную или память путем кэширования и вызывать его, извлекая access_token из кэша в проекте.

Поскольку access_token можно свободно вызвать за 2 часа без времени вызова, но срок его действия истекает через 2 часа, поэтому он может запросить access_token только для создания интерфейса и создания нового access_token. В это время новый access_token можно кэшировать в локальную память или память, а затем записать текущую метку времени. Когда access_token необходимо использовать в следующем проекте, сначала определите, когда это уместно. Независимо от того, составляет ли разница между предварительным временем и кэшированным доступом более 2 часов, если она превышает 2 часа, вызовите интерфейс генерации доступа для создания нового доступа и, если время ожидания не истекло, используйте доступ к нему в кэше.

php
// Cache access_token
function getToken(){
    $appid='Fill in your APPID'; //APPID
    $appsecret='Fill in your APPSECRET'; //APPSECRET
    File = file_get_contents ("access_token.json", true); //read the data in access_token.json
    $result = json_decode($file,true);
    // Determine whether access_token is valid or not, and if it is valid, get cached access_token
    // If it expires, the request interface generates a new access_token and caches 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'];
    }
}
 
// Get a new 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'];
}
 
// Initiate a request to get access_token interface
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);
}
 
// Call function
getToken();
 
// Output access_token during the validity of the current cache file
$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
}

Автор: Сайт ТАНКИНГА: http://likeyunba.com