Я пытаюсь использовать 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-адресую следующее:
$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, как указано в их документации. Я просто получаю остальные три элемента ответа.
Вот некоторые вопросы, подобные этому: Получить токен обновления Google APIсказали использовать Approval_prompt=force, но это тоже не работает и полностью противоречит цели иметь access_type=offline.
Есть идеи, почему я получу правильный ответ с 3 из 4 пунктов ответа?