具有PHP API oauth2.0的Google日历服务帐户-如何访问未共享的日历

问题描述 投票:0回答:3

我在使用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帐户设置中缺少什么可以让我做我想做的事吗?

谢谢您的时间。

php api google-calendar-api shared
3个回答
2
投票

0
投票
事实证明,该API帐户负责人没有与开发者帐户的服务器帐户电子邮件共享日历。

由于我无权访问API帐户设置,并且Google Calendar API的错误描述性不是很高,所以花了一些时间才弄清楚。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.