0

Ich möchte Google Docs und Google Tabellen lesen, die von Benutzern mit einem bestimmten Benutzer (myapp) geteilt werden, den ich für meine Anwendung erstellt habe. Ich habe den Google-Hybrid-Server-Slide-Flow (Offline-Zugriff) implementiert und nutze Google-Dienste im Auftrag dieses Nutzers, wenn er offline ist.Wie lese ich Inhalte eines geteilten Blattes mit Google Drive API (v3)? authError

Ich speichere das Aktualisierungstoken in meiner Datenbank und verwende es, um das Zugriffstoken zu aktualisieren. Mit dem Zugriffstoken kann ich die API abfragen. Zum Beispiel gibt der folgende Code korrekt die Dateien auf dem "myapp" drive:

// Get the API client 

$client = new Google_Client(); 
$client->setClientId($this->clientId); 
$client->setClientSecret($this->clientSecret); 
$client->setAccessType('offline'); 
... 
$client->addScope([ 
    'https://spreadsheets.google.com/feeds', 
    'https://docs.google.com/feeds', 
    Google_Service_Drive::DRIVE 
]); 

// Construct the service object 

$service = new Google_Service_Drive($client); 
$params = array(
    'pageSize' => 10, 
    'fields' => "nextPageToken, files(id, name)" 
); 
$results = $service->files->listFiles($params); 

foreach ($results->getFiles() as $file) { 
    printf("%s (%s)\n", $file->getName()); // OK 
} 

... funktioniert gut!

Einige Dateien werden von anderen Benutzern für "myapp" freigegeben.

Nun möchte Ich mag Inhalt einer gemeinsamen Kalkulationstabelle erhalten:

$fileId = "1GRTldB2...."; 
$result = $service->files->get($fileId, [ 
    'fields' => 'name,md5Checksum,size,createdTime,modifiedTime,ownedByMe,properties,shared,sharedWithMeTime,webContentLink,webViewLink' 
]); 

$url = $result['webViewLink']; 
//$url = 'https://www.googleapis.com/drive/v3/files/'.$fileId.'?alt=media'; 

$method = 'GET'; 
$headers = ["Authorization" => "Bearer $accessToken", "GData-Version" => "3.0"]; 
$httpClient = new GuzzleHttp\Client(['headers' => $headers]); 

$resp = $httpClient->request($method, $url); 
$body = $resp->getBody()->getContents(); 
$code = $resp->getStatusCode(); 
$reason = $resp->getReasonPhrase(); 
echo "$code : $reason\n\n"; 
echo "$body\n"; 

Dieser Code gibt einen Fehler:

Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message ' in C:\wamp\www\core\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 107 (!) GuzzleHttp\Exception\ClientException: Client error: GET https://www.googleapis.com/drive/v3/files/1GRTldB2KDFGmFZgFST28-MaHKs7y7eqelbzDpdxuJBg?alt=media resulted in a 401 Unauthorized response: { "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials" (truncated...) in C:\wamp\www\core\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 107

authError/InvalidCredentials

Irgendwelche Ideen?

Antwort

0

Wird das Shared-Sheet ... mit dem "Nutzer" geteilt, den Sie auf der Google API verwenden? Sie wissen, wenn Sie rechts auf das eigentliche Dokument klicken und sagen "Share ..."