PHP Data PHP API - Ошибка службы "Неверные учетные данные" - PullRequest
0 голосов
/ 16 января 2019

Я хочу загрузить видео на YouTube через php. Для этого я следовал этому руководству, чтобы получить права (аутентифицироваться), и этому , чтобы загрузить видео.
Аутентификация работает как надо. Пользователь перенаправляется на сайт Google, принимает, что у меня есть право загружать видео YouTube и т. Д., И снова перенаправляется на мой сайт. Там токен доступа сохраняется.
Но если я хочу загрузить видео, я получаю эту ошибку:

Произошла ошибка службы: {"error": {"errors": [{"domain": "global", "reason": "authError", "message": "Неверные учетные данные", "locationType": " header "," location ":" Authorization "}]," code ": 401," message ":" Invalid Credentials "}}

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

Вот мой код с сайта, который перенаправляет пользователя в Google:

$OAUTH2_CLIENT_ID = "Not on Stackoverflow (but here is a code)";
$OAUTH2_CLIENT_SECRET = "Also not on Stackoverflow";

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("my site(actual link)");
$client->setAccessType('offline');        // offline access
$client->setIncludeGrantedScopes(true);   // incremental auth

$auth_url = $client->createAuthUrl();
echo '<a href="' . htmlspecialchars($auth_url) . '">Allow posting on YouTube (click)</a>';

Вот мой код с сайта, на который перенаправлен пользователь из Google:

$OAUTH2_CLIENT_ID = "Not on Stackoverflow (but here is a code)";
$OAUTH2_CLIENT_SECRET = "Also not on Stackoverflow";

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("my site (actual link)");
$client->setAccessType('offline');        // offline access
$client->setIncludeGrantedScopes(true);   // incremental auth

$client->authenticate($_GET['code']);
$access_token = $client->getAccessToken();
//Acces token is being saved

А вот код загрузки (который не работает):

$OAUTH2_CLIENT_ID = "--";
$OAUTH2_CLIENT_SECRET = "--";

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->addScope("https://www.googleapis.com/auth/youtube.upload");
$client->addScope("https://www.googleapis.com/auth/youtube");
$client->setRedirectUri("https://www.socialme.online/YoutubeFT.php");
$client->setAccessType('offline');        // offline access
$client->setIncludeGrantedScopes(true);   // incremental auth

$client->setAccessToken($access_token);
$youtube = new Google_Service_YouTube($client);



try {
    $snippet = new Google_Service_YouTube_VideoSnippet();
    $snippet->setTitle($Titel);
    $snippet->setDescription($Beschreibung);
    $snippet->setTags(array("tag1", "tag2"));
    $snippet->setCategoryId("22");

    $status = new Google_Service_YouTube_VideoStatus();
    $status->privacyStatus = "public";

    $video = new Google_Service_YouTube_Video();
    $video->setSnippet($snippet);
    $video->setStatus($status);

    $chunkSizeBytes = 1048576;
    $client->setDefer(true);
    $insertRequest = $youtube->videos->insert("status,snippet", $video);

    $media = new Google_Http_MediaFileUpload(
        $client,
        $insertRequest,
        'video/'.$extension,
        null,
        true,
        $chunkSizeBytes
    );
    $media->setFileSize(filesize($new_path));
    // Read the media file and upload it chunk by chunk.
    $status = false;
    $handle = fopen($new_path, "rb");
    while (!$status && !feof($handle)) {
        $chunk = fread($handle, $chunkSizeBytes);
        $status = $media->nextChunk($chunk);
    }

    fclose($handle);
    $client->setDefer(false);
} catch (Google_Service_Exception $e) {
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
}

echo $htmlBody;

Я не знаю, что вызывает эту ошибку, тем более что большая часть кода взята из официальных документов Google. URL в redirect_uri действителен и совпадает с URL-адресом, авторизованным в консоли Google. Ссылка на видео тоже действительна.
Спасибо за помощь.

...