我在使用Google提供的PHP库读取日历事件时遇到麻烦。我要阅读的日历未公开共享,但是我想在服务器应用程序上阅读它们。
拥有日历的帐户与我的帐户分开(我将其称为API帐户),尽管与我共享了日历。
根据未在Google上公开共享的日历详细信息:
任何人都可以:什么也看不见
您可以:仅查看忙/闲(隐藏详细信息)。
API帐户和我的帐户都具有带有P12密钥的OAuth2.0服务帐户。
我遵循了位于http://www.daimto.com/google_service_account_php/的指南,该指南帮助我弄清楚了身份验证过程。我设法读取了公开共享的日历,而在任何一个帐户上都没有任何问题。这是我的代码:
// Start the Google client
$client = new Google_Client();
$client->setClientId({{client_id from google}});
$client->setApplicationName("Project Name");
$client->setClientSecret({{client_secret from google}});
$key = file_get_contents({{key_file_location on my server}});
$cred = new Google_Auth_AssertionCredentials(
$Email_address,
// Scopes that we will be using
array(
"https://www.googleapis.com/auth/calendar"
),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
// Use Google Calendar API plugin
$service = new Google_Service_Calendar($client);
$optParams = array(
'singleEvents'=> true,
'timeMin'=>date(DateTime::ATOM),
'timeMax' => date(DateTime::ATOM, time()+(3 * 24 * 60 * 60))
);
$results = $service->events->listEvents(
'{{Calendar ID from Google Calendar Settings}}',
$optParams
);
但是,当尝试将代码用于未公开共享的日历时,在任何一个帐户上都出现以下错误:
致命错误:未捕获的异常“ Google_Service_Exception”消息“调用GET时出错https://www.googleapis.com/calendar/v3/calendars{{CalendarID}} :( 404)找不到...
[当我尝试var_dump($client->getAuth())
时,我注意到有一个值可能表明身份验证不起作用:["authenticated":"Google_Client":private]=> bool(false)
。这既在帐户上发生,也发生在公共共享日历和公共不共享日历上。
我可以将Google API Explorer与我的帐户一起使用,以在未公开共享的日历上显示JSON数据。 Google PHP API或Google帐户设置中缺少什么可以让我做我想做的事吗?
谢谢您的时间。
由于我无权访问API帐户设置,并且Google Calendar API的错误描述性不是很高,所以花了一些时间才弄清楚。