我在使用Google提供的PHP库阅读日历活动时遇到问题。我想要阅读的日历不是公开共享的,但我想在我的服务器应用程序上阅读它们。
持有日历的帐户与我的帐户是分开的(我将其称为API帐户),但日历会与我共享。
根据谷歌上未公开发布的日历详细信息:
任何人都可以:什么也看不见
您可以:仅查看空闲/忙碌(隐藏详细信息)。
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资源管理器与我的帐户一起使用,以显示未公开共享的日历上的JSON数据。 Google PHP API或Google帐户设置是否缺少哪些内容可以让我按照自己的意愿行事?
感谢您的时间。
答案 0 :(得分:2)
如果您想要使用服务帐户访问私人日历,则需要执行权限委派,前提是您拥有包含这些日历的域(https://developers.google.com/drive/web/delegation描述了驱动器但它适用于日历)或者您将需要与服务帐户的电子邮件地址共享私人日历。
答案 1 :(得分:0)
感谢您的建议。
事实证明问题是,API帐户的负责人没有与开发者帐户的服务器帐户电子邮件共享日历。
由于我无法访问API帐户设置,并且Google Calendar API中的错误不是很具描述性,因此需要一段时间才能弄明白。