Привет и извините за мой плохой английский. Я добавляю на сайт OAuth 2.0 с клиентом google api php и благодарит Карла за instructions , как получить доступ к листам с клиентом google api php. Мой код: index.php:Проверка или получение доступа к листу с помощью токена (или идентификатора пользователя) для содержимого содержимого экспорта. Google api php client libary
<?php
define('ROOT',$_SERVER['DOCUMENT_ROOT']);
require_once ROOT.'/lib/google-api-php-client/vendor/autoload.php';
include_once ROOT.'/lib/google-api-php-client/examples/templates/base.php';
$client = new Google_Client();
putenv("GOOGLE_APPLICATION_CREDENTIALS=service-account-credentials.json");
if ($credentials_file = checkServiceAccountCredentialsFile()) {
// set the location manually
$client->setAuthConfig($credentials_file);
} elseif (getenv('GOOGLE_APPLICATION_CREDENTIALS')) {
// use the application default credentials
$client->useApplicationDefaultCredentials();
} else {
echo missingServiceAccountDetailsWarning();
exit;
}
$client->setApplicationName(APPLICATION_NAME);
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setAuthConfigFile('client_secrets.json');
$client->setScopes(['https://www.googleapis.com/auth/drive','https://spreadsheets.google.com/feeds']);
if (isset($_SESSION['access_token']) && $_SESSION['access_token'])
{
$fileId = 'FILE_ID_HERE';
$tokenArray = $client->fetchAccessTokenWithAssertion();
$accessToken = $tokenArray["access_token"];
$service = new Google_Service_Drive($client);
$results = $service->files->get($fileId);
$url = "https://spreadsheets.google.com/feeds/list/$fileId/od6/private/full";
$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";
}
else
{
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
oauth2callback.php:
<?php
define('ROOT',$_SERVER['DOCUMENT_ROOT']);
require_once ROOT.'/lib/google-api-php-client/vendor/autoload.php';
session_start();
$client = new Google_Client();
$client->setApplicationName(APPLICATION_NAME);
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setAuthConfigFile('client_secrets.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
if (!isset($_GET['code'])) {
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
Если я вхожу:
$ FILEID = 'FILE_ID_HERE'; // ПРАВИЛО для листа в Google Docs таблицы: доступ только с приглашением
Затем я получаю сообщение об ошибке: Неустранимая ошибка: исключить исключение «Google_Service_Exception» с message "{" error ": {" errors ": [{" domain ":" global "," reason ":" notFound "," message ":" Файл не найден: [FILE_ID_HERE]. "," locationType ":" параметр "," location ":" fileId "}] .....
Но, я зарегистрировался (аккаунт Google) с пользователем, который пригласил его для просмотра этого документа!
И если я вхожу:
$ FILEID = 'FILE_ID_HERE'; /// ПРАВИЛО для листа в Google Docs таблицы: доступ для всех, у кого есть ссылка
Все в порядке, и я получаю: 200 : OK все данные документа
Вопрос. Как получить доступ к листу, если я зарегистрировался (учетная запись Google) с пользователем, который пригласил его для просмотра этого документа. Что я делаю неправильно? Где я ошибаюсь? И не очень важно. Экспорт в csv