Я пытаюсь получить доступ ко всем календарям организации из учетной записи службы, но календари / события недоступны для просмотра — даже если они были эксплицитно с учетной записью службы.
Я следовал за инструкции по делегированию. и Пример диска для создания экземпляра сервиса (преобразован в службу календаря).
Я был удивлен, что служебная учетная запись не может автоматически иметь доступ к календарям на уровне администратора, но даже явный общий доступ не обеспечивает необходимый доступ.
Если кто-то обнаружит что-то, что я пропустил или неправильно понял, пожалуйста, дайте мне знать. Любая помощь будет оценена.
Майк
set_include_path(get_include_path() . PATH_SEPARATOR . 'google-api-php- client-master/src');
require_once 'google-api-php-client-master/src/Google/autoload.php'; // or wherever autoload.php is located
require_once "google-api-php-client/src/Google/Client.php";
require_once "google-api-php-client/src/Google/Service/Calendar.php";
require_once "google-api-php-client/src/Google/Service/Oauth2.php";
define('CALENDAR_SCOPE', 'https://www.googleapis.com/auth/calendar.readonly');
define('SERVICE_ACCOUNT_EMAIL', '[email protected]');
define('SERVICE_ACCOUNT_PKCS12_FILE_PATH', 'P12_FILE.p12');
function buildService($userEmail) {
$key = file_get_contents(SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_Auth_AssertionCredentials(
SERVICE_ACCOUNT_EMAIL,
array(CALENDAR_SCOPE),
$key);
$auth->sub = $userEmail;
$client = new Google_Client();
$client->setAssertionCredentials($auth);
return new Google_Service_Calendar($client);
}
$v_calendarId_primary = "[email protected]";
$service = buildService($v_calendarId_primary);
$calendarId = 'primary';
$optParams = array(
'maxResults' => 10,
'orderBy' => 'startTime',
'singleEvents' => TRUE,
'timeMin' => date('c'),
);
$results = $service->events->listEvents($v_calendarId_primary, $optParams);
if (count($results->getItems()) == 0) {
print "No upcoming events found.\n<br>";
} else {
print "Upcoming events:\n<br>";
foreach ($results->getItems() as $event) {
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
printf("%s (%s)\n <br>", $event->getSummary(), $start);
}
}
Попробуй и сделай calendar.get на [email protected]. Это обеспечит вам доступ к календарю самостоятельно. Затем дважды проверьте, какие разрешения вы дали сервисной учетной записи. По крайней мере, вам нужно будет увидеть все детали события.
Ваш код выглядит хорошо для меня, я просто не думаю, что у вас есть доступ.
Других решений пока нет …