使用服务帐号访问 Google 日历活动:{ "error" : "access_denied" }。没有谷歌应用



我想使用服务帐户访问Google日历。这是我的代码: <NUMBER>是由正确的值替换为Google API控制台。

<?php
require_once 'googleapi/Google_Client.php';
require_once 'googleapi/contrib/Google_CalendarService.php';
const CLIENT_ID = '<NUMBER>.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME  = '<NUMBER>@developer.gserviceaccount.com';
const MY_EMAIL  = '<MY NAME>@gmail.com';
const KEY_FILE = 'privatekey.p12';
$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setApplicationName("<APP NAME>");
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/calendar'),
    $key,
    'notasecret',
    'http://oauth.net/grant_type/jwt/1.0/bearer',
    MY_EMAIL)
);
$cal = new Google_CalendarService($client);
$calList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";

执行代码时,我会收到:

致命错误:未闻名的异常" Google_authexception"和消息 '错误刷新OAuth2令牌,消息:'{"错误": " Access_denied"}'in /home/www/65683f67e3f0d94bba3c945014cda/web/intranet/googleapi/auth/google_oauth2.php:279 堆栈跟踪:#0 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/google_oauth2.php (256): Google_oauth2-> RefreshTokenRequest(阵列)#1 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/google_oauth2.php (209): google_oauth2-> RefreshTokenWithAssertion()#2 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/service/google_serviceresource.php(166): google_oauth2-> sign(object(google_httprequest))#3 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/contrib/contrib/google_calendarservice.php(154): google_serviceresource-> __调用('列表',数组)#4 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/testservice.php (32): google_calendarlisterviceresource-> listcalendarlist()#5 {main} 扔进去 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/auth/google_oauth2.php 在第279行

如果我更改代码:

$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar'),
$key));

我收到:

(403)访问未配置

这里出了什么问题?

我有解决方案。首先,好代码是最后一个:

$client->setAssertionCredentials(new Google_AssertionCredentials(
      SERVICE_ACCOUNT_NAME,
      array('https://www.googleapis.com/auth/calendar'),
      $key));

问题不是代码,而是我的Google帐户,我在Google API控制台中提到了一个参考器。擦除字段后,代码可行。

出于信息目的,如果您想访问共享日历,请不要忘记与您的xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx emangeer.gserviceaccount.com(您的service_account_name)。

有关更多信息,请参见:

https://groups.google.com/forum/?fromgroups=# !!#!!!!!! topic/google-ajax-search-api/kakyuustwb0/discussion

相关内容

  • 没有找到相关文章

最新更新