У меня проблема с маркерами обновления, которые возвращает Google. Я думаю, что они истекают через несколько дней. Документация говорит, что они не делают, если пользователь не делает это вручную.
Вот что я делаю:
Я предлагаю пользователю авторизовать мое приложение с помощью Google_Client
$client = new Google_Client();
$client->setClientId(GOOGLE_CLIENT_ID);
$client->setClientSecret(GOOGLE_CLIENT_SECRET);
$client->setRedirectUri(GOOGLE_REDIRECT_URI);
$client->setScopes(array(GOOGLE_SCOPE_A,'https://www.googleapis.com/auth/userinfo.email'));
$client->setApplicationName(GOOGLE_APPLICATION_NAME);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
Я храню токен обновления в базе данных, используя
$refreshToken = $client->getRefreshToken();
У меня есть cURL, который запускается каждый день и извлекает некоторые данные из аналитики, затем он подключается с использованием следующего кода:
$client = new Google_Client();
$client->setClientId(GOOGLE_CLIENT_ID);
$client->setClientSecret(GOOGLE_CLIENT_SECRET);
$client->refreshToken($refreshToken);
$client->isAccessTokenExpired() //this returns false;
Все отлично работает первые 15-30 дней. После этого похоже, что токен обновления больше не работает.
$client->isAccessTokenExpired() //this returns true;
и когда я пытаюсь получить данные из аналитики, я получаю исключение Google_Service_Exception с кодом: 401 и сообщением: «Требуется вход в систему»
Затем я предлагаю пользователю снова авторизовать мое приложение, обновить токен обновления, добавив новый в базу данных, и все будет работать, как ожидается, в течение следующих 15-30 дней, пока вышеописанная проблема не возникнет снова.
Кто-нибудь знает, почему это происходит и как я могу предотвратить это?
Спасибо.
Задача ещё не решена.
Других решений пока нет …