使用服务帐户方法时是否可以访问谷歌日历服务?谷歌间接表示,不可能,因为日历服务不在service-account-method的文档中支持的服务列表中,但我个人认为,这是可能的。但是怎么做?
我正在用 php 编写日历应用程序,并且我想在没有用户操作(例如登录)的情况下将日历事件创建到我的 google-calendar 中。
我了解到,首先应用程序必须使用带有密钥文件 .p12 的服务帐户方法对谷歌服务器进行身份验证
我正在使用以下代码进行身份验证:(在此处下载:http ://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php )
session_start();
require_once 'google-api/src/Google_Client.php';
require_once 'google-api/src/contrib/Google_CalendarService.php';
require_once 'google-api/src/contrib/Google_PredictionService.php';
$client = new Google_Client();
$client->setApplicationName(GOOGLE_APPLICATION_NAME);
$client->setClientId(GOOGLE_CLIENT_ID);
$keyfile = file_get_contents(GOOGLE_KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
GOOGLE_SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/prediction'),
$keyfile)
);
但是这个登录似乎不起作用。我如何确定服务器当时是否已登录?
我想继续这个:
$cal = new Google_CalendarService($client);
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if ($client->getAccessToken()) {
$calList = $cal->calendarList->listCalendarList(); // <- this is line 55
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
但是在第 55 行出现了这个错误:
致命错误:在 /usr/www/users/leuchtk/ 中带有消息“调用 GET https://www.googleapis.com/calendar/v3/users/me/calendarList : (403) Insufficient Permission”的未捕获异常“Google_ServiceException” html/google-api/src/io/Google_REST.php:66
堆栈跟踪:#0 /usr/www/users/leuchtk/html/google-api/src/io/Google_REST.php(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /usr/www/users/ leuchtk/html/google-api/src/service/Google_ServiceResource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /usr/www/users/leuchtk/html/google-api/src/contrib/ Google_CalendarService.php(205): Google_ServiceResource->__call('list', Array) #3 /usr/www/users/leuchtk/html/i_termine_admin.php(55): Google_CalendarListServiceResource->listCalendarList() #4 /usr/www /users/leuchtk/html/termine_admin.php(113): include('/usr/www/users/...') #5 {main} 在 /usr/www/users/leuchtk/html/google-api 中抛出/src/io/Google_REST.php 第 66 行
所以看起来,应用程序没有登录。我现在完全迷失在这段代码中。谢谢你的一些小光,那里缺少什么......
马可