2016-07-27 6 views
11

erstellt werden. Ich versuche, Ordner mit Google Drive API zu erstellen. Ich bin in der Lage, Datei-ID am Ende zu bekommen. aber ich bin nicht in der lage zu meinem ordner in google drive. es scheint ein Berechtigungsproblem?Ich kann die Dateien und Ordner nicht sehen, die über API in meinem Google Drive mit php

$scopes = array(
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata','https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata','https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly','https://www.googleapis.com/auth/drive.photos.readonly' 
); 
$creds = new Google_Auth_AssertionCredentials(
    $serviceAccountName, 
    $scopes, 
    file_get_contents($keyFile) 
); 
$client = new Google_Client(); 
$client->setApplicationName($appName); 
$client->setClientId($clientId); 
$client->setAssertionCredentials($creds); 
$service = new Google_Service_Drive($client); 
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices', 
    'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 

    'mimeType' => 'application/vnd.google-apps.folder')); 
$file = $service->files->create($fileMetadata, array()); 

printf("File ID: %s\n", $file->id); 

Antwort

2

Mayrop Antwort ist teilweise richtig.

Die Dateien, die wie [email protected] auf die API-Konto E-Mail (etwas gehören geschaffen.

Sie benötigen die Erlaubnis Inhaber dieses Kontos zu geben, wie

$newPermission = new Google_Service_Drive_Permission(); 
$value="email id"; 
$type="user"; 
$role="writer"; 
    $newPermission->setValue($value); 
    $newPermission->setType($type); 
    $newPermission->setRole($role); 
try { 
    $res= $service->permissions->insert($fileId, $newPermission); 
    print_r($res); 
    } catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
    } 

Sie diesen Ordner in Gemeinschaft mit mir. Sie können auch manuell in das Laufwerk hinzuzufügen.

Sie können auch deaktivieren Benachrichtigung per E-Mail zu senden mit

$service->permissions->insert($fileId, $newPermission,array('sendNotificationEmails'=>false)); 

Hoffe, das wird für Sie arbeiten.

0

Ja, es scheint Berechtigungen Problem. Versuchen

'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1),

Entfernen

von

$fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => 'Invoices', 'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 'mimeType' => 'application/vnd.google-apps.folder'));

3

Die Dateien, die (so etwas wie [email protected] gehören zu der API-Konto E-Mail erstellt werden Wenn Sie auf das Laufwerk URL:. https://docs.google.com/document/d/{ID}, Sie Es wird eine Seite mit der Berechtigung "Zugriff verweigert" angezeigt.

Die E-Mail des Dienstkontos bezieht sich nicht auf Ihre Benutzer-E-Mail .

Um mit Ihrem Benutzer Dateien zu erstellen, müssen Sie eine Autorisierung für OAauth-Token erstellen.

  1. erstellen die OAuth-Anmeldeinformationen nach den Schritten "Schritt 1: auf dem Drive API Turn" auf this page

  2. Ihren Skript ändern, indem Sie das Beispiel auf this page, können Sie haben:


use Google_Client; 
use Google_Service_Drive; 
use Google_Service_Drive_DriveFile; 

... 

$file = 'root/to/your/credentials.json'; 

$client = new Google_Client(); 
$client->setScopes([ 
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata', 
    'https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata', 
    'https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly', 
    'https://www.googleapis.com/auth/drive.photos.readonly' 
]); 

$client->setAuthConfig($file); 
$authUrl = $client->createAuthUrl(); 

printf("Open the following link in your browser:\n%s\n", $authUrl); 

// You will need to open this url 
print 'Enter verification code: '; 
$authCode = trim(fgets(STDIN)); 

$accessToken = $client->authenticate($authCode); 

file_put_contents($credentialsPath, $accessToken); 
printf("Credentials saved to %s\n", $credentialsPath); 

$client->setAccessToken(json_decode($accessToken, true)); 

$service = new Google_Service_Drive($client); 

$metadata = new Google_Service_Drive_DriveFile([ 
    'name' => 'testing drive', 
    'mimeType' => "application/vnd.google-apps.document" 
]); 
$file = $service->files->create($metadata, []); 
print_r($file); 

Die Datei sollte sich in Ihrem Drive Home-Verzeichnis befinden.

Übrigens, ich schlage vor, Sie versuchen, die neue Version google/apiclient:2.0.2 (die noch auf Beta ist, funktioniert aber in Ordnung).

Verwandte Themen