Google_Auth_Exception: ошибка при получении токена доступа OAuth2, сообщение: «invalid_request»

Я пытаюсь получить токен доступа, используя последнюю версию google-api-php-client (взгляните на этот https://github.com/google/google-api-php-client), и я следую этому официальному документу: https://developers.google.com/api-client-library/php/guide/aaa_oauth2_web

Единственная разница в том, что я бы хотел использовать сервис Google_Service_Plus вместо Google_Service_Urlshortener.

В основном я делаю следующие шаги:

  • Я инициализирую клиент Google $client, указав идентификатор клиента, секрет клиента, ключ разработчика, области действия и URI перенаправления (который указывает на мой локальный хост Ubuntu 12.04 — PHP 5.3.10).
  • Я инициализирую службу Google Plus $plus с помощью клиента Google $client.
  • Я перенаправляю пользователя на URL-адрес авторизации, используя $client->createAuthUrl().
  • Пользователь может увидеть страницу согласия и принять ее.
  • Я получаю код авторизации $_GET['code'] для обмена токенами.
  • Затем на странице обратного вызова я пытаюсь выполнить $client->authenticate($_GET['code']);, но сервер Google возвращает HTTP 400, и я получаю сообщение Google_Auth_Exception: Error fetching OAuth2 access token, message: 'invalid_request'.

Здесь поток прерывается.
Что не так?

Любая помощь будет оценена.

Заранее спасибо,
Никколо.


person Niccolò    schedule 09.01.2014    source источник


Ответы (2)


Я создал файл oauth2callback.php и столкнулся с этой проблемой. Проблема исчезла, когда я правильно настроил свой Google_Client. Сначала я устанавливал только clientId и secret. Как только я установил redirectUri, мой код начал работать. Я не думал, что мне нужно установить redirectUri, так как я знаю, что перенаправление уже произошло (я был на странице перенаправления). Я подумал, что этот ответ может помочь другим, столкнувшимся с подобной проблемой.

person Gavin Palmer    schedule 24.07.2014
comment
Это была именно моя проблема. Поскольку я использую server-side-flow, для redirectUri нужно было установить значение postmessage. Тогда, вуаля! - person CJ Thompson; 21.08.2014
comment
Что означает postmessage? @CJThompson - person briankip; 19.10.2015

Как только я установил файл конфигурации JSON для $client, у меня это сработало.

Пример:$client->setAuthConfigFile(__dir__.'/../conf/client_secrets.json');

person Fabien Thetis    schedule 09.02.2015
comment
В моем случае я забыл установить секрет клиента. - person TomoMiha; 11.03.2021