Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Edit Google calendar events from Google service account: 403

I want to create new event at google calendar from Service Account. I can access correctly and print a list all my calendars. But when I want to create a new event the response is 403 Forbidden.

My code:

require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_CalendarService.php';

session_start();

const CLIENT_ID = 'XXXXXXXXXX.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = '[email protected]';

const KEY_FILE = 'google_src/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-privatekey.p12';

$client = new Google_Client();
$client->setApplicationName("APP_NAME");

if (isset($_SESSION['token'])) {
 $client->setAccessToken($_SESSION['token']);
}

$key = file_get_contents(KEY_FILE);
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
  SERVICE_ACCOUNT_NAME,
  'https://www.google.com/calendar/feeds/MY_CALENDAR_ID/private/full/',
  $key)
);

$client->setClientId(CLIENT_ID);
$cal = new Google_CalendarService($client);
$event = new Google_Event();
$event->setSummary('Bon dia pel matí!');
$event->setLocation('Somewhere');
$start = new Google_EventDateTime();
$start->setDateTime('2012-08-06T10:00:00.000-07:00');
$event->setStart($start);
$end = new Google_EventDateTime();
$end->setDateTime('2012-09-06T10:25:00.000-07:00');
$event->setEnd($end);

$createdEvent = $cal->events->insert(CALENDAR_NAME, $event);

And server response:

(403) Forbidden

Any ideas? Maybe other scope, or allow edit events (I dont know where I can configure this and I have searched it, promise)

Of course, my calendar is a public calendar.

Any help will be welcome :)

Thanks!

like image 874
eMarine Avatar asked Aug 08 '12 10:08

eMarine


1 Answers

I solved it, and the issue was not code, It works fine.

The problem was sharing my calendar. Something that I don't knew.

To allow edit your calendar events from service account, do not have enough with all steps you do in the Google Api Console, you have to give permission from your calendar configuration (Calendar configuration -> Share this calendar) to the email account specified into Google Api Console (email adress).

This can be a problem if it's a business account, then you will have to contact the account administrator.

The code shown here works correctly, so I hope it helps someone, just remember that you must use 475 version of the Google Api Client.

You can find at this link: http://google-api-php-client.googlecode.com/svn/trunk/src/

like image 59
eMarine Avatar answered Sep 20 '22 23:09

eMarine