У меня возникли проблемы с добавлением событий в Календарь Google. Я могу перечислить события, но когда я пытаюсь добавить событие, я получаю запрещенную ошибку 403. Я могу добавлять события к первичному, но когда я попробую другой, в этом случае тот, у кого есть mnetion, я столкнулся с Запрещенной ошибкой 403. Вот код, который у меня есть:
require_once 'vendor/autoload.php'; define('APPLICATION_NAME', 'Calendar'); define('CREDENTIALS_PATH', 'credentials/calendar.json'); define('SECRET_PATH', 'secret.json'); define('SCOPES', implode(' ', array(Google_Service_Calendar::CALENDAR))); function getClient() { $client = new Google_Client(); $client->setApplicationName(APPLICATION_NAME); $client->setScopes(SCOPES); $client->setAuthConfigFile(SECRET_PATH); $client->setAccessType('offline'); $credentials_path = CREDENTIALS_PATH; if (file_exists($credentials_path)) { $access_token = file_get_contents($credentials_path); } else { // $auth_url = $client->createAuthUrl(); // printf("Open the following link in your browser:\n%s\n", $auth_url); // print 'Enter verification code: '; // $auth_code = trim(fgets(STDIN)); // $access_token = $client->authenticate($auth_code); // if (!file_exists(dirname($credentials_path))) { // mkdir(dirname($credentials_path), 0700, true); // } // file_put_contents($credentials_path, $access_token); // printf("Credentials saved to %s\n", $credentials_path); } $client->setAccessToken($access_token); if ($client->isAccessTokenExpired()) { $client->refreshToken($client->getRefreshToken()); file_put_contents($credentials_path, $client->getAccessToken()); } return $client; } $client = getClient(); $service = new Google_Service_Calendar($client); $event = new Google_Service_Calendar_Event(); $event->setSummary('Appointment'); $event->setLocation('Somewhere'); $start = new Google_Service_Calendar_EventDateTime(); $start->setDateTime('2015-04-14T10:00:00.000-07:00'); $event->setStart($start); $end = new Google_Service_Calendar_EventDateTime(); $end->setDateTime('2015-04-15T10:25:00.000-07:00'); $event->setEnd($end); $attendee1 = new Google_Service_Calendar_EventAttendee(); $attendee1->setEmail('leah@leahdawn.com'); $attendees = array($attendee1); $event->attendees = $attendees; $createdEvent = $service->events->insert('leah@leahdawn.com', $event); echo $createdEvent->getId();
В частности, ошибка: «Ошибка при вызове POST https://www.googleapis.com/calendar/v3/calendars/leah%40leahdawn.com/events : (403) Запрещено.
Любая помощь будет оценена!
Первый параметр Events: insert – это идентификатор календаря, а 'leah@leahdawn.com'
может быть действительным идентификатором календаря. Вы даже можете увидеть этот календарь, если владелец поделился им с вами. Это не означает, что владелец указанного календаря дал вам разрешение на добавление событий в календарь.
Я предлагаю вам запустить CalendarList: get
$calendarListEntry = $service->calendarList->get('calendarId'); echo $calendarListEntry->getSummary();
Это даст вам информацию об этом календаре, если у вас есть доступ.
{ "kind": "calendar#calendarListEntry", "etag": "\"1412244000929000\"", "id": "xxxxx@gmail.com", "summary": "xxxxx@gmail.com", "timeZone": "Europe/Copenhagen", "colorId": "15", "backgroundColor": "#9fc6e7", "foregroundColor": "#000000", "selected": true, "accessRole": "reader", "defaultReminders": [ ] }
Здесь нужно искать "accessRole": "reader",
если у вас нет доступа к тому, чтобы делать больше, чем читать календарь, на который вам не разрешено добавлять события.
Обновление: CalendarList: Список
попробуйте перейти на страницу списка календаря в нижней строке, попробуйте меня. Он также покажет вам, к какому календару вы имеете доступ.