Доступ к событиям календаря Google из учетной записи службы: { "error": "access_denied" }. Нет приложений Google

Я хотел бы получить доступ к календарю 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, сообщение:" { "error": "access_denied" } "в /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/authGus:279 Трассировка стека: #0 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php(256): Google_OAuth2->refreshTokenRequest(Array) #1 /home/www3653bb3 / 693bc6868 /auth/Google_OAuth2.php(209): Google_OAuth2->refreshTokenWithAssertion() #2 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/service/Google_ServiceResource (Google) (Google) (Google) ()) Google) (Google). #3 /home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/contrib/Google_CalendarService.php(154): Google_ServiceResource->__call('list', Array) #4 /home/www/ 14014b4d3_bb3cf3bc3323cf3bc3bc3bc3d3 php(32): Google_CalendarListServiceResource->listCalendarList() #5 {main} thrown в /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) Доступ не настроен

Что здесь не так?

1 ответ

У меня есть решение. Сначала хороший код - последний:

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

Проблема не в коде, а в моей учетной записи Google, я упомянул Referer в консоли Google API. После стирания поля код работает.

В информационных целях, если вы хотите получить доступ к общим календарям, не забудьте поделиться своим календарем с вашим XXXXXX@developer.gserviceaccount.com (вашим SERVICE_ACCOUNT_NAME).

Для получения дополнительной информации см.:

https://groups.google.com/forum/?fromgroups=

Другие вопросы по тегам