У меня есть учетная запись Google Apps. Я пытаюсь манипулировать календарями пользователей в этой учетной записи.Учетная запись службы Google OAuth 2.0 - API календаря (PHP-клиент)
- Я создал проект, добавил службу API календаря и создал идентификатор клиента OAuth 2.0 учетной записи службы с помощью консоли API.
- Я добавил, что сгенерированный адрес электронной почты в Календарь с помощью настроек Календаря, чтобы поделиться календарем.
- Я выполнил шаги, предлагаемые для управления доступом API. Имя клиента - это тот же домен, в котором включена учетная запись Google Apps, а область - «https://www.googleapis.com/auth/calendar».
- Через различные источники я смог скомпилировать скрипт, который позволяет мне читать назначенные события календарей и добавлять к нему события.
Что я не могу сделать, это создать дополнительный календарь. Я прочитал, https://developers.google.com/accounts/docs/OAuth2ServiceAccount, и я пытаюсь отправить через «prn».
Здесь сбой сценария; Ошибка обновления токена OAuth2, сообщение: '{"error": "access_denied"}'. Если я удалю prn, тогда все будет «хорошо». Календари просто создаются под электронной почтой разработчика. Код:
<?
ini_set('display_errors', 1);
session_start();
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_CalendarService.php';
const CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = '[email protected]com';
const MY_EMAIL = '[email protected]';
const KEY_FILE = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12';
$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setApplicationName("My App");
$client->setAccessType('offline');
$client->setUseObjects(true);
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
$key = file_get_contents(KEY_FILE);
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
} else {
$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)
);
}
// even tried setting the email here
$client->setClientId(MY_EMAIL);
$calendar = new Google_Calendar();
$calendar->setSummary('calendarx');
$calendar->setTimeZone('Australia/Brisbane');
$createdCalendar = $cal->calendars->insert($calendar);
?>
Любая помощь была бы принята с благодарностью.
Я администратор домена, и я включил приложение, выполнив следующие шаги; https://developers.google.com/accounts/docs/RegistrationForWebAppsAuto?csw=1. Разве это не для приложений OAuth? Не OAuth 2.0? Приложение и учетная запись Google Apps находятся в одном домене. – mattyfranchise
Благодарим вас за ответ. Пенни, наконец, упал и с помощью другой информации. Я использовал домен, на котором была установлена учетная запись Google Apps в качестве идентификатора клиента. Не идентификатор клиента, который был сгенерирован при создании API-проекта. Doh! – mattyfranchise