Обновленный Google API не получает диск с формой списка файлов.Google_Service_Exception (Err 400) - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь подключить свое веб-приложение к Google Drive, используя Google Drive API V2 и клиентскую библиотеку Google PHP ("google/apiclient": "^2.0").

Мое приложение отлично работает в течение первого часа.Я могу получать файлы, загружать файлы и т. Д., Но через 1 час (когда срок действия маркера доступа истекает и его необходимо обновить), последующие операции получения / загрузки приводят к Google_Service_Exception (Err 400):

Ваш клиент имеетвыдан неверный или недопустимый запрос.

enter image description here

Я успешно получил токены доступа и обновления:

{
 "access_token":"**********",
 "expires_in":3600,
 "refresh_token":"1/********",
 "scope":"https://www.googleapis.com/auth/drive",
 "token_type":"Bearer",
 "created":1539085127
}

У меня естьпопытался обновить токен следующим образом:

if ($client->isAccessTokenExpired()) {
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
}

И таким образом:

if ($client->isAccessTokenExpired()) {
    $client->refreshToken($client->getRefreshToken());
}

Как правильно сохранить полученные учетные данные более часа?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете попытаться получить список файлов с помощью curl.

, если вы хотите получить все файлы с Google Drive.

Используйте этот URL в curl:

https://www.googleapis.com/drive/v2/files

Или, если вы хотите получить файл из определенной папки.

Используйте этоURL в скручиваемости:

https://www.googleapis.com/drive/v2/files?q='".$yourDriveFolderId."'+in+parents

Документация Google Диска

0 голосов
/ 10 октября 2018

Похоже, что-то не так с настройкой вашего клиента.Попробуйте это

function getOauth2Client() {
    try {

        $client = buildClient();

        // Set the refresh token on the client. 
        if (isset($_SESSION['refresh_token']) && $_SESSION['refresh_token']) {
            $client->refreshToken($_SESSION['refresh_token']);
        }

        // If the user has already authorized this app then get an access token
        // else redirect to ask the user to authorize access to Google Analytics.
        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {

            // Set the access token on the client.
            $client->setAccessToken($_SESSION['access_token']);                 

            // Refresh the access token if it's expired.
            if ($client->isAccessTokenExpired()) {              
                $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
                $client->setAccessToken($client->getAccessToken()); 
                $_SESSION['access_token'] = $client->getAccessToken();              
            }           
            return $client; 
        } else {
            // We do not have access request access.
            header('Location: ' . filter_var( $client->getRedirectUri(), FILTER_SANITIZE_URL));
        }
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

Ripped from Oauth2Authentication.php также может помочь oauth2callback.php

...