我想通过服务帐户在Google日历上创建新活动。我可以正确访问并打印我所有日历的列表。但是,当我想创建一个新事件时,响应为403 Forbidden。
我的代码:
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 = 'XXXXXXXXXXXX@developer.gserviceaccount.com'; 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);
和服务器响应:
(403) Forbidden
有任何想法吗?可能是其他作用域,或允许编辑事件(我不知道在哪里可以配置它,并且已经搜索了,保证)
当然,我的日历是公共日历。
任何帮助都将受到欢迎:)
谢谢!
我解决了,问题不是代码,它工作正常。
问题出在共享我的日历。我不知道的东西。
要允许通过服务帐户编辑日历事件,在Google Api控制台中没有足够的所有步骤,您必须将日历配置(日历配置->共享此日历)的权限授予Google指定的电子邮件帐户Api控制台(通过电子邮件发送)。
如果这是一个企业帐户,则可能会出现问题,那么您将必须与帐户管理员联系。
此处显示的代码可以正常运行,因此希望对您有所帮助,只记得您必须使用475版本的Google Api Client。
您可以在以下链接找到: http : //google-api-php- client.googlecode.com/svn/trunk/src/