使用php连接Google Calendar API获取空数组结果

时间:2016-03-16 07:59:57

标签: php google-calendar-api google-api-php-client service-accounts

我尝试使用PHP和Googles官方PHP客户端库来阅读我的Google日历活动。

我在Google Developers Console中创建了一个service account,它似乎有用,我可以连接到日历,但我得到一个空数组:

  

Google_Service_Calendar_CalendarList对象(   [collection_key:protected] => items [internal_gapi_mappings:protected]   => Array()[etag] => [itemsType:protected] => Google_Service_Calendar_CalendarListEntry [itemsDataType:protected] =>   array [kind] => [nextPageToken] => [nextSyncToken] =>   [modelData:protected] =>数组([error] =>数组([errors] =>数组   ([0] =>数组([domain] => global [reason] =>   insufficientPermissions [message] =>许可不足))   [code] => 403 [message] =>许可不足))   [processed:protected] => Array())

我的代码:

define('APPLICATION_NAME', 'Google Calendar API PHP Quickstart');
session_start();
$client = new Google_Client();
$client->setApplicationName(APPLICATION_NAME);
$client->setAuthConfigFile('client_secret.json');
$client->setAccessType('offline');
$client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
        $client->setAccessToken($_SESSION['access_token']);
        #$client->setUseObjects(true);
        $cal=new Google_Service_Calendar($client);
        $calendarList=$cal->calendarList->listCalendarList();
        while(true) {
                foreach ($calendarList->getItems() as $calendarListEntry) {
                        echo $calendarListEntry;
                }
                $pageToken = $calendarList->getNextPageToken();
                if ($pageToken) {
                        $optParams = array('pageToken' => $pageToken);
                        $calendarList = $service->calendarList->listCalendarList($optParams);
                } else {
                        break;
                }
        }
} else {
        $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google/oauth2callback.php';
        header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}   

任何人都可以告诉我我做错了什么 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在使用服务帐户进行连接。服务帐户拥有自己的Google日历帐户,默认情况下该帐户没有任何日历,默认情况下也无法访问您的Google日历帐户。

以下消息告诉您:

  

许可不足

如果您想授予服务帐户访问您Google日历的权限,则需要使用服务帐户电子邮件地址并与之共享您的Google日历,就像您与其他任何用户共享一样。