连接 Google 日历 API 使用 php 得到空数组结果
Connect Google Calendar API get empty array result with php
我正在尝试使用 PHP 和 Google 的官方 PHP 客户端库读取我的 Google 日历事件。
我在 Google Developers Console 中创建了一个 service account
,它似乎有效,我可以连接到日历,但我得到一个空数组:
Google_Service_Calendar_CalendarList Object (
[collection_key:protected] => items [internal_gapi_mappings:protected]
=> Array ( ) [etag] => [itemsType:protected] => Google_Service_Calendar_CalendarListEntry [itemsDataType:protected] =>
array [kind] => [nextPageToken] => [nextSyncToken] =>
[modelData:protected] => Array ( [error] => Array ( [errors] => Array
( [0] => Array ( [domain] => global [reason] =>
insufficientPermissions [message] => Insufficient Permission ) )
[code] => 403 [message] => Insufficient Permission ) )
[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));
}
谁能告诉我我做错了什么
在此先感谢您的帮助。
您正在连接服务帐户。服务帐户有自己的 Google 日历帐户,默认情况下没有任何日历,并且默认情况下无法访问您的 Google 日历帐户。
这就是以下消息告诉您的内容:
Insufficient Permission
如果您想授予服务帐户访问您的 Google 日历的权限,您将需要获取服务帐户电子邮件地址并与其共享您的 Google 日历,就像您与任何人共享它一样其他用户。
我正在尝试使用 PHP 和 Google 的官方 PHP 客户端库读取我的 Google 日历事件。
我在 Google Developers Console 中创建了一个 service account
,它似乎有效,我可以连接到日历,但我得到一个空数组:
Google_Service_Calendar_CalendarList Object ( [collection_key:protected] => items [internal_gapi_mappings:protected] => Array ( ) [etag] => [itemsType:protected] => Google_Service_Calendar_CalendarListEntry [itemsDataType:protected] => array [kind] => [nextPageToken] => [nextSyncToken] => [modelData:protected] => Array ( [error] => Array ( [errors] => Array ( [0] => Array ( [domain] => global [reason] => insufficientPermissions [message] => Insufficient Permission ) ) [code] => 403 [message] => Insufficient Permission ) ) [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));
}
谁能告诉我我做错了什么 在此先感谢您的帮助。
您正在连接服务帐户。服务帐户有自己的 Google 日历帐户,默认情况下没有任何日历,并且默认情况下无法访问您的 Google 日历帐户。
这就是以下消息告诉您的内容:
Insufficient Permission
如果您想授予服务帐户访问您的 Google 日历的权限,您将需要获取服务帐户电子邮件地址并与其共享您的 Google 日历,就像您与任何人共享它一样其他用户。