Я хотел бы прочитать Google Docs и Google Таблицы, которыми пользуются пользователи с определенным пользователем (myapp), созданным мной для моего приложения. Я реализовал поток слайдов гибридного сервера Google (автономный доступ), используя сервисы Google от имени этого пользователя, когда он находится в автономном режиме.Как читать содержимое общего листа с API-интерфейсом Google Диска (v3)? authError
Я сохраняю токен обновления в своей базе данных и использую его для обновления токена доступа. С помощью токена доступа я могу запросить API. Например, следующий код правильно возвращает файлы на "MYAPP" диск:
// 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
}
... работает отлично!
Некоторые из файлов, которыми пользуются другие пользователи, являются «myapp».
Теперь я хотел бы получить содержание общего Spreadsheet:
$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";
Этот код дает ошибку:
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 a401 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
Любые идеи?