2014-01-30 3 views
2

У меня есть следующая проблема с аутентификацией в Google API:Google API: «invalid_grant», но код не изменился

PHP Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'' in /home/bot/bot/vendor/google/apiclient/src/Google/Auth/OAuth2.php:328

Однако этот вопрос очень странно, потому что тот же код работает на моем местном ПК и перестает работать на сервере. Возможно ли, что это имеет какое-то отношение к серверному времени? У меня синхронизированы мои системные часы, но сервер примерно на 1 минуту назад. Серьезно, у меня кончились идеи, почему это не работает, хотя я вообще не изменил код. Раньше это работало, но внезапно эта проблема возникла.

Что я могу сделать с этим?

<?php 
$client = new Google_Client(); 
$client->setApplicationName('My App'); 
$client->setClientId($clientId); 
$client->setClassConfig(
    'Google_Cache_File', 
    ['directory' => __DIR__.'/res/tmp'] 
); 

$service = new Google_Service_Calendar($client); 

$cred = new Google_Auth_AssertionCredentials(
    $serviceAccountName, 
    // https://www.googleapis.com/auth/calendar 
    [Google_Service_Calendar::CALENDAR], 
    $keyFile 
); 
$client->setAssertionCredentials($cred); 

var_dump($service->calendarList->listCalendarList()); 
+0

Покажите нам область, которую вы запрашиваете –

+0

Я отредактировал мое сообщение с образцом кода. Он работает на моем ПК, и он не работает на сервере (но он использовал). – stil

+0

Я подозреваю это: http://stackoverflow.com/questions/10025698/authentication-on-google-oauth2-keeps-returning-invalid-grant –

ответ

2

Решение было синхронизировано с сервером. Время сервера было всего лишь на 40 секунд меньше, чем на атомные часы, но после отправки билета на мой хостинг-провайдер мне удалось заставить его работать. Проблема ушла. Однако, если кто-то мог бы объяснить, почему OAuth настолько точен в точную дату и время, я был бы благодарен.

Смежные вопросы