我知道这个事实,我不是第一个提出问题的人,但我现在已经搜索了几天,我似乎无法找到解决问题的办法。
因此,我需要使用Google帐户设置我的应用程序,并且每当用户完成操作时,应用程序都会向应用程序的Google日历添加事件,而不会打扰用户同意。我需要在代码中完成应用程序帐户的所有身份验证。我已经做了一些搜索,我认为通过服务帐户进行的Google Server to Server通信是最佳选择。 https://developers.google.com/accounts/docs/OAuth2ServiceAccount
问题是我不知道如何设置客户端,获取访问令牌并使用它调用API。到目前为止,我已经使用composer安装了Google API:
{
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.*",
"dlu/dlutwbootstrap": "dev-master",
"google/apiclient": "1.0.*@beta"
}
}
我还从Google Developer Console创建了一个服务帐户,并获得了客户端ID,电子邮件等。所以这就把我们带到了代码:
$client = new \Google_Client();
$clientId = '<MY ID>';
$service_email = '<THE EMAIL>';
$myMail = '<MY OTHER MAIL>';
$keyFile = './data/<NAME OF FILE>';
$client->setClientId($clientId);
$client->setApplicationName('Timesheet');
$key = file_get_contents($keyFile);
$client->setAssertionCredentials(new Google_AssertionCredentials(
$service_email,
array('https://www.googleapis.com/auth/calendar'),
$key));
$client->getRequestToken();
$calendar = new \Google_Service_Calendar($client);
$event = new Event();
$event->setSummary('Appointment');
$event->setLocation('Somewhere');
$start = new EventDateTime();
$start->setDateTime('2014-11-05T10:00:00.000-07:00');
$event->setStart($start);
$end = new EventDateTime();
$end->setDateTime('2014-11-05T10:25:00.000-07:00');
$event->setEnd($end);
$attendee1 = new EventAttendee();
$attendee1->setEmail('<EMAIL ONE>');
$attendee2 = new EventAttendee();
$attendee2->setEmail('<EMAIL TWO>');
$attendees = array($attendee1, $attendee2);
$event->attendees = $attendees;
$createdEvent = $calendar->events->insert('<CALENDAR TO INSERT EVENT INTO>', $event);
如果有人能够指出我所遗漏的内容并引导我正确使用API,我将非常感激。提前谢谢!
致以最诚挚的问候,
的Valentin
答案 0 :(得分:0)
终于找到了答案!错误发生在插入调用中:
$calendar->events->insert('primary', $event);
是正确的代码位。您需要将'primary'
作为第一个参数而不是电子邮件。
希望这有助于某人! :)