Ярлык обновления API Google API не отправляется

Я пытаюсь использовать API данных Google YouTube с PHP на основе документации Google здесь: https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token . Моя проблема возникает при аутентификации с помощью OAuth. Я использую следующий URL-адрес авторизации, который идентичен тому, который, как говорят документы, использовать, за исключением моего перенаправления uri и ключа приложения, очевидно.

$this->authorizationUrl = 'https://accounts.google.com/o/oauth2/auth?'; $this->authorizationUrl .= 'client_id=' . $this->applicationKey . '&'; $this->authorizationUrl .= 'redirect_uri=' . $this->redirect_uri . '/account.php?action=youtube_oauth&'; $this->authorizationUrl .= 'scope=https://gdata.youtube.com&'; $this->authorizationUrl .= 'response_type=code&'; $this->authorizationUrl .= 'access_type=offline'; 

Затем, как говорят доки, я прочел следующее:

 $curl_options = Array( CURLOPT_POSTFIELDS => Array( 'code' => $code, 'client_id' => $this->applicationKey, 'client_secret' => $this->applicationSecret, 'redirect_uri' => $this->redirect_uri . '/account.php?action=youtube_oauth', 'grant_type' => 'authorization_code' ), CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => 'https://accounts.google.com/o/oauth2/token' ); 

Тем не менее, мой ответ никогда не дает мне refresh_token, как и в их документации. Я просто получаю другие три элемента ответа.

Некоторые вопросы, такие как этот: Get refresh token google api сказали использовать assert_prompt = force, но это не работает и полностью побеждает цель access_type = offline.

Любые идеи относительно того, почему я получаю действительный ответ с 3 из 4 элементов ответа?

Из автономной части доступа к документам OAuth2.0:

Когда ваше приложение получает токен обновления, важно сохранить этот токен обновления для будущего использования. Если ваше приложение потеряет токен обновления, ему необходимо будет повторно запросить пользователя для получения согласия до получения другого токена обновления. Если вам необходимо повторно запросить пользователя для получения согласия, approval_prompt параметр authorized_prompt в запрос кода авторизации и установите значение для force .

Таким образом, когда вы уже предоставили доступ, последующие запросы для параметра grant_type authorization_code не вернут refresh_token , даже если access_type был offline в строке запроса на странице согласия.

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

Ура,

PS Это изменение было объявлено и в блоге .

Вы можете попробовать игровую площадку google oauth2 (https://code.google.com/oauthplayground/) и посмотреть, какие различия существуют между вашими параметрами и там.