API API Analytics: неверный запрос – invalid_grant

Я использую API Google Analytics v3. Я объясню поток моего приложения сейчас.

Я использовал эту документацию здесь: https://developers.google.com/accounts/docs/OAuth2WebServer

Во-первых, для пользователя создается URL-адрес OAUTH. URL-адрес выглядит следующим образом:

https://accounts.google.com/o/oauth2/auth? client_id={CLIENT-ID}& redirect_uri={REDIRECT-URL}& state={CUSTOM-NUMBER}& response_type=code& access_type=offline& approval_prompt=force& scope=https://www.googleapis.com/auth/analytics 

Когда пользователь нажимает на ссылку, он аутентифицируется. Впоследствии, с кодом, я получаю токен доступа и обновления.

Я отправляю запрос на https://www.googleapis.com/oauth2/v3/token с параметрами

 code = Code from Analytics grant_type = authorization_code client_secret = CLIENT_SECRET client_id = CLIENT_ID redirect_uri = REDIRECT_URI 

Параметры cURL, которые я отправляю, следующие:

CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded')

И, конечно, почтовые данные создаются с помощью http_build_query, поэтому я могу использовать этот заголовок типа контента.

Затем я получаю все профили пользователя, с этим URL-адресом

https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles

Это работает, и я перечисляю все профили. Затем пользователь выбирает один из профилей, и моя библиотека получает текущие данные для пользователя (просмотры страниц, посещения и т. Д.),

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я хочу обновлять данные каждый день с помощью cron, я получаю сообщение об ошибке:

 'error' => 'invalid_grant', 'error_description' => 'Bad Request' 

Но я понятия не имею, почему?

Я сохранил токен доступа и токен обновления для профилей в моей базе данных. Затем, когда я повторно обрабатываю данные до того, как я сделаю запросы на доступ к данным, я проверю, действительно ли токен. Но даже это не удается.

Я делаю этот запрос здесь

https://accounts.google.com/o/oauth2/tokeninfo?access_token=ya29.BwHqH8NOPVhafk3SnwbqjLZMXub4Q8bemC-8vKVwp-UjRqaIHRXrzEV3WjInhGzl1-phIn7XI4NnDA

Он говорит мне, что токен доступа неверен (что является загадочным, так как я просто аутентифицирован и через 5 секунд токен уже недействителен?

В любом случае, я пытаюсь обновить его с помощью этого запроса

 URL: https://www.googleapis.com/oauth2/v3/token Parameters: client_secret = CLIENT_SECRET client_id = CLIENT_ID refresh_token = REFRESH_TOKEN From my database grant_type = refresh_token cURL Options: CURLOPT_HTTPHEADER = array('Content-Type: application/x-www-form-urlencoded') 

Затем, почтовый запрос с параметрами, созданными с помощью http_build_query

Ответ выглядит так:

 string(67) "{ "error": "invalid_grant", "error_description": "Bad Request" } " 

Но я понятия не имею, почему. Я использую токен доступа и обновляю токен, который у меня есть на 5 минут раньше, и те, которые работали для первого запроса. Почему он не работает через 5 минут с теми же жетонами? И почему я не могу обновить токен?

Related of "API API Analytics: неверный запрос – invalid_grant"

Недопустимый грант обычно имеет две возможные причины.

  1. Часы вашего сервера не синхронизируются с NTP. (Решение: проверьте время сервера, если его неправильно исправить.)
  2. Предел токена обновления превышен. (Решение: ничего, что вы можете сделать, они не могут иметь больше токенов обновления). Приложения могут запрашивать несколько токенов обновления. Например, это полезно в ситуациях, когда пользователь хочет установить приложение на нескольких машинах. В этом случае требуются два токена обновления, по одному для каждой установки. Когда количество токенов обновления превышает предел, старшие токены становятся недействительными. Если приложение пытается использовать недействительный токен обновления, возвращается ответ об ошибке invalid_grant. Предел для каждой уникальной пары клиента OAuth 2.0 и 25 обновленных токенов (обратите внимание, что этот предел может быть изменен). Если приложение продолжает запрашивать токены обновления для одной и той же пары Client / Account, после того, как будет выпущен 26-й токен, первый токен обновления, который был ранее выпущен, станет недействительным. 27-й запрошенный токен обновления приведет к недействительности второго ранее выпущенного токена и так далее.

Вы должны хранить токен Refresh. Ток доступа истекает через час. Здесь идет прогулка, хотя на разных вызовах Google 3-х точечный поток Oauth2 .

Я не мог ничего понять из вашего кода, он выглядел немного запутанным. Но я не мог видеть ничего, что действительно выглядело неправильно, поэтому я предполагаю, что это может быть один из первых двух вопросов.

Я знаю, что этот вопрос устарел, но у меня была эта проблема из-за косой черты ( / ) код иногда имеет и не расшифровывает его правильно при извлечении из URL-адреса перенаправления.

Так что токен, как 4/BGrvsJeuc5BoRRN ... пошел на моем сервере, как 4%2FBGrvsJeuc5BoRRN ...

Проводя это, если кто-то другой будет таким же глупым, как я.