访问谷歌日历从与服务帐户事件:{“错误”:“ACCESS_DENIED”}。 没有谷歌应用程序(

2019-07-02 20:07发布

我想使用服务帐户来访问谷歌日历。 这是我的代码: <NUMBER>是正确的值替换采取谷歌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’}’”在/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php :279堆栈跟踪:#0 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php(256):Google_OAuth2-> refreshTokenRequest(阵列)#1 /家庭/网络/ 65683f67e3f0d94b14bba3c945014cda /网络/内联网/ googleapi /auth/Google_OAuth2.php(209):Google_OAuth2-> refreshTokenWithAssertion()#2 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/service/Google_ServiceResource.php(166):Google_OAuth2->符号(对象(Google_HttpRequest)) #3 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/contrib/Google_CalendarService.php(154):Google_ServiceResource - > __通话(名单',阵列)#4 /家庭/网络/ 65683f67e3f0d94b14bba3c945014cda /网络/内联网/ TestService的。 PHP(32):Google_CalendarListServiceResource-> listCalendarList()#5 {主}掷 n的/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php上线279

如果我改变我的代码:

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

我收到:

(403)访问未配置

这是怎么回事错在这里?

Answer 1:

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

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

问题不在于代码,但我的谷歌帐户,我刚才提到在谷歌API控制台的Referer。 擦除场后,代码工作。

对于信息的目的,如果您想访问共享日历,不要忘记你的XXXXXX@developer.gserviceaccount.com(您SERVICE_ACCOUNT_NAME)共享日历。

欲了解更多信息,请参见:

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



文章来源: Access Google calendar events from with service account: { “error” : “access_denied” }. No google apps