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