Я не использовал этот пакет раньше, я использую 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
}
?>
person
Mohammed Radwan
schedule
27.11.2014