我一直在学习Google Calendar API和关于身份验证的文档(http://code.google.com/apis/calendar/v3/using.html#auth)。这里提到的用例似乎是编写一个访问用户日历的应用程序。然而,我正在编写一个网页,它将访问网站所有者的日历,并只显示该日历的信息。所以,我不希望用户在他们的谷歌账户信息中输入oAuth想要做的事情。
基本上,我正在寻找一种访问单个私人谷歌日历并通过将凭据直接传递给服务进行身份验证的方法。
这里也有类似的问题:如何将OAuth与谷歌日历一起使用,只访问一个日历?这似乎表明海报最初是直接传递证书的。这个功能还可用吗?你是如何处理我描述的用例的?
如果我没有错的话,他们现在已经为此启动了服务帐户:https://developers.google.com/accounts/docs/OAuth2ServiceAccount
编辑:
这是他们预测API 的修改
session_start();
require_once "google-api-php-client/src/Google_Client.php";
require_once "google-api-php-client/src/contrib/Google_CalendarService.php";
const CLIENT_ID = '...';
const SERVICE_ACCOUNT_NAME = '...';
// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
const KEY_FILE = '...';
$client = new Google_Client();
$client->setApplicationName("...");
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar', "https://www.googleapis.com/auth/calendar.readonly"),
$key)
);
$client->setClientId(CLIENT_ID);
$service = new Google_CalendarService($client);
//Save token in session
if ($client->getAccessToken()) {
$_SESSION['token'] = $client->getAccessToken();
}
//And now you can use the code in their PHP examples, like: $service->events->listEvents(...)
我也有同样的问题。我找到了这个由三部分组成的教程,它正是你想要的。预订网页
您创建的网页可以直接写入您自己的日历(而不是用户),这就是为什么用户不必授予您访问其日历的权限
这个解决方案对我有效,但您必须直接使用REST进行管理。
我正在寻找一种使用谷歌api php客户端的方法,因为它看起来有点简单。但我还没有找到一种方法来正确编辑googleapi-php-client/src/config.php文件,使其以一种身份验证自己而不是实际用户的方式工作,因为你需要访问你的日历。如果有人有这样的想法或剧本,我将不胜感激。
还可以看看这里:
https://github.com/googleapis/google-api-php-client#authentication-使用服务帐户
创建服务帐户后,您可以在没有用户提示的情况下进行身份验证,以便将项目添加到您的服务拥有的日历中。