使用服务帐户,我尝试在目标用户的日历中插入事件。执行似乎成功但没有发布任何事件。这有点类似于Google Calendar API v3 - Not Creating Event (Server-to-Server Authentication)的问题,除了我使用的是作曲家指令composer require google/apiclient:^2.0
安装的apiclient。因此,使用$client->setAuthConfig
代替Google_Auth_AssertionsCredentials()
。
我已验证目标用户的日历设置为通过服务帐户电子邮件(svcacctabc@xyz.iam.gserviceaccount.com)更改事件,并且存在正确的service-account-credentials.json文件。我还在Stack Overflow和其他地方研究了许多相关条目。测试代码如下,关于我可能缺少的任何想法?
<?php
require_once __DIR__ . '/vendor/autoload.php';
$KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json';
$scopes = array('https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.readonly');
$client = new Google_Client();
$client->setApplicationName("Calendar API Test");
$client->setAuthConfig($KEY_FILE_LOCATION);
$client->setScopes($scopes);
$client->setAccessType('offline');
$service = new Google_Service_Calendar($client);
$calendarId = 'examplecalendaruser@gmail.com';
$event = new Google_Service_Calendar_Event(array(
'summary' => 'Test inserted event',
'description' => 'Test inserted description',
'start' => array(
'dateTime' => '2016-09-02T11:00:00-04:00',
),
'end' => array(
'dateTime' => '2016-09-02T12:00:00-04:00',
),
));
$calendarId = 'primary';
$event = $service->events->insert($calendarId, $event);
echo "\nEvent created: " . $event->htmlLink;
?>
请注意,会创建一个事件链接,但浏览它会导致“此事件不存在”消息(并且用户日历上不会显示任何事件)。