Вопрос по oauth-2.0, google-analytics-api, access-token – Обновить токен для Google Api Php Client
Я использую клиент Google API для доступа к Google Analytics. Я хочу получить доступ к данным в автономном режиме, поэтому мне нужен токен обновления. Как мне получить refresh_token?
Этот комментарий - то, что спасло мой день ^^^ Во время локальной разработки я не мог найти токен обновления нигде, и все, что мне нужно было сделать, это отозвать приложение и повторить попытку.
SaltedBlowfish
Примечание. Если ваш ответ от getAccessToken не содержит токена обновления, даже если вы делаете это так же, как в смарт-кодах & apos; пример кода, который может понадобиться для повторного аннулирования доступа к вашему приложению и запуска аутентификации (как пользователя), потому что Google запоминает более ранние попытки, и если вы не давали "офлайн" доступ раньше, вы не получите его позже автоматически. - & GT;security.google.com/settings/security/permissions
BlaM
2
ответа
Для PHP SDK Google Client v2:
php composer.phar require google/apiclient:^2.0
Вы можете попробовать PHP-код для обновления accessToken следующим образом:
<?php
require_once __DIR__ . '/vendor/autoload.php';
define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json');
define('SCOPES', implode(' ', array(
Google_Service_Analytics::ANALYTICS_READONLY)
));
$client = new Google_Client();
$client->setApplicationName('YOUR APPLICATION NAME');
$client->setScopes(SCOPES);
$client->setAuthConfig(CLIENT_SECRET_PATH);
$client->setAccessType('offline');
// Input AccessToken from such as session or database
$accessToken = json_decode('YOUR CURRENT ACEESS TOKEN');
$client->setAccessToken($accessToken);
// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
// Get RefreshToken as json which can be reused
$refreshToken = json_encode($client->getAccessToken());
}
Offline access issue
Кроме того, если вы хотите сохранить существующее поведение в ваших серверных приложениях, вам необходимо установитьapproval_prompt
вforce
в противном случае вы можете получить значение NULL, возвращаемое из getRefreshToken (), который в документе Google не упоминается:
$client->setApprovalPrompt('force');
Referring Upcoming changes to OAuth 2.0 endpoint
попробуйте использовать следующий код:
<?php
require_once 'apiClient.php';
const REDIRECT_URL = 'INSERT YOUR REDIRECT URL HERE';
const CLIENT_ID = 'INSERT YOUR CLIENT ID HERE';
const CLIENT_SECRET = 'INSERT YOUR CLIENT SECRET';
const ANALYTICS_SCOPE = 'https://www.googleapis.com/auth/analytics.readonly';
// Build a new client object to work with authorization.
$client = new apiClient();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setRedirectUri(REDIRECT_URL);
$client->setScopes(array(ANALYTICS_SCOPE));
$client->setAccessType('offline');
$auth = $client->authenticate();
if ($client->getAccessToken()) {
$token = $client->getAccessToken();
$authObj = json_decode($token);
$refreshToken = $authObj->refresh_token;
}
?>
Похожие вопросы
Этот комментарий - то, что спасло мой день ^^^ Во время локальной разработки я не мог найти токен обновления нигде, и все, что мне нужно было сделать, это отозвать приложение и повторить попытку.
Примечание. Если ваш ответ от getAccessToken не содержит токена обновления, даже если вы делаете это так же, как в смарт-кодах & apos; пример кода, который может понадобиться для повторного аннулирования доступа к вашему приложению и запуска аутентификации (как пользователя), потому что Google запоминает более ранние попытки, и если вы не давали "офлайн" доступ раньше, вы не получите его позже автоматически. - & GT;<a href="https://security.google.com/settings/security/permissions" rel="nofollow noreferrer">security.google.com/settings/security/permissions</a>