ZF2中的Google Calendar V3服务帐户使用情况

时间:2014-11-06 08:12:03

标签: php zend-framework2 google-calendar-api google-api-php-client

我知道这个事实,我不是第一个提出问题的人,但我现在已经搜索了几天,我似乎无法找到解决问题的办法。 因此,我需要使用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

1 个答案:

答案 0 :(得分:0)

终于找到了答案!错误发生在插入调用中:

$calendar->events->insert('primary', $event);是正确的代码位。您需要将'primary'作为第一个参数而不是电子邮件。

希望这有助于某人! :)