Я не использовал этот пакет раньше, я использую google-api-php-client, но в любом случае эта ошибка возникает, если вы не устанавливаете токен обновления.
Вы должны знать, что вам нужно иметь токен доступа ТОЛЬКО один раз. Вам также необходимо установить тип доступа в автономном режиме, который предоставит вам токен обновления, который вы будете использовать для автоматического получения нового токена доступа, не получая новый код каждый раз, когда истекает срок действия токена доступа.
В консоли Google я создал идентификатор клиента для веб-приложения. Убедитесь, что вы настроили URI переадресации на свою веб-страницу, где вы получите код, и извлечете токен доступа с помощью этого кода.
Вот пример кода с использованием google-api-php-client, я надеюсь, что это поможет:
Вам необходимо запустить следующий код только один раз, и получать и хранить маркер доступа.
<?php
require_once('google-api-php-client-master/src/Google/Client.php');
session_start();
$client = new Google_Client();
$client->setApplicationName('APP_NAME');
$client->setClientId(YOUR_CLIENT_ID);
$client->setClientSecret('YOUR_CLIENT_SECRET');
$client->setRedirectUri('YOUR_REDIRECT_URI');
$client->setDeveloperKey('YOUR_DEV_KEY');
$client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly'));
$client->setAccessType("offline");
// Step 1: Create an auth url
if (isset($_GET['ref']) && $_GET['ref'] == "1") {
$authUrl = $client->createAuthUrl();
return Redirect::to($authUrl);
}
// Step 2: The user accepted your access now you need to exchange it.
if (isset($_GET['code'])) {
$client->authenticate($_SESSION['code']); //Authenticate the client
$token = $client->getAccessToken(); //Get the access token
var_dump($token); //Store the token in your DB or config file
die();
}
?>
После получения токена доступа из кода выше (который должен содержать маркер обновления), хранить его в БД или конфигурационный файл.
Теперь следующий код должен проверить подлинность клиента и обновить маркер доступа, когда он истекает через функции getAccessToken
<?php
require_once('google-api-php-client-master/src/Google/Client.php');
require_once('google-api-php-client-master/src/Google/Service/Analytics.php');
$client = new Google_Client();
$client->setApplicationName('APP_NAME');
$client->setClientId(YOUR_CLIENT_ID);
$client->setClientSecret('YOUR_CLIENT_SECRET');
$client->setRedirectUri('YOUR_REDIRECT_URI');
$client->setDeveloperKey('YOUR_DEV_KEY');
$client->setScopes(array('https://www.googleapis.com/auth/analytics.readonly'));
$client->setAccessType("offline"); //Make sure the access type is offline to get a refresh token
$config = CoreConfig::find(1); //Getting the first record from the config table
$client->setAccessToken($config->google_access_token); //Retrieve the access token that you stored and set it to the client object
//Check this the token is expired
if($client->isAccessTokenExpired()) {
$token = json_decode($config->google_access_token, true); //Get the token stored, and convert JSON to array
$client->refreshToken($token['refresh_token']); //Set the refresh token
$newtoken = $client->getAccessToken(); //Call the getAccessToken() function to get a new access token for you
$config->update(array('google_access_token' => $newtoken)); //Store the new token in your DB
}
if ($client->getAccessToken()) {
$analytics = new Google_Service_Analytics($client);
//Do something with the $analytics object
}
?>
Попробуйте [upstream version] (https://github.com/thujohn/analytics-l4) пакета - вам может быть повезло больше. – luciddreamz
@ luciddreamz У меня уже есть последняя версия. :/ – omarsafwany