Я программирую приложение для извлечения файлов с Google Диска (в моей собственной учетной записи диска).
Я создал учетную запись службы Google, чтобы избежать процесса OAuth, потому что я использую собственную учетную запись Google Диска.
Затем я привел этот пример кода из Google:
function buildService() { $SERVICE_ACCOUNT_EMAIL = 'xxxx@developer.gserviceaccount.com'; $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxx-privatekey.p12'; $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH); $auth = new Google_AssertionCredentials( $SERVICE_ACCOUNT_EMAIL, array('https://www.googleapis.com/auth/drive'), $key); $client = new Google_Client(); $client->setUseObjects(true); $client->setAssertionCredentials($auth); return new Google_DriveService($client); } function retrieveAllFiles($service) { $result = array(); $pageToken = NULL; do { try { $parameters = array(); if ($pageToken) { $parameters['pageToken'] = $pageToken; } $files = $service->files->listFiles($parameters); $result = array_merge($result, $files->getItems()); $pageToken = $files->getNextPageToken(); } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); $pageToken = NULL; } } while ($pageToken); return $result; } $service = buildService(); $allFiles = retrieveAllFiles($service); print_r($allFiles);
Он возвращает пустой массив, когда у меня есть файлы и папки:
Array ( )
В конфигурации электронная почта и закрытый ключ в порядке, предоставляемые самим Google; что я делаю неправильно?
Попробуйте изменить код, например https://developers.google.com/drive/delegation :
function buildService($userEmail) { $SERVICE_ACCOUNT_EMAIL = 'xxxx@developer.gserviceaccount.com'; $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxx-privatekey.p12'; $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH); $auth = new Google_AssertionCredentials( $SERVICE_ACCOUNT_EMAIL, array('https://www.googleapis.com/auth/drive'), $key); $auth->sub = $userEmail; $client = new Google_Client(); $client->setUseObjects(true); $client->setAssertionCredentials($auth); return new Google_DriveService($client); } //... function retrieveAllFiles($service) $service = buildService("some@mail"); $allFiles = retrieveAllFiles($service); print_r($allFiles);