I would like to access google calendar using Service account. This is my code :
<NUMBER>
is replace by the correct value take on Google API Console.
<?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>";
When I execute my code, I receive:
Fatal error: Uncaught exception 'Google_AuthException' with message
'Error refreshing the OAuth2 token, message: '{ "error" :
"access_denied" }'' in
/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php:279
Stack trace: #0
/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php(256):
Google_OAuth2->refreshTokenRequest(Array) #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/Google_CalendarService.php(154):
Google_ServiceResource->__call('list', Array) #4
/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/testService.php(32):
Google_CalendarListServiceResource->listCalendarList() #5 {main}
thrown in
/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php
on line 279
If I change my code with :
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar'),
$key));
I receive:
(403) Access Not Configured
What is going wrong here?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…