2013-08-27 3 views
1

У меня есть учетная запись 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); 
?> 

Любая помощь была бы принята с благодарностью.

ответ

1

Поле prn работает только с размещенными доменами, если администратор домена включил ваше приложение (на основе идентификатора клиента) для олицетворения пользователей.

+0

Я администратор домена, и я включил приложение, выполнив следующие шаги; https://developers.google.com/accounts/docs/RegistrationForWebAppsAuto?csw=1. Разве это не для приложений OAuth? Не OAuth 2.0? Приложение и учетная запись Google Apps находятся в одном домене. – mattyfranchise

+0

Благодарим вас за ответ. Пенни, наконец, упал и с помощью другой информации. Я использовал домен, на котором была установлена ​​учетная запись Google Apps в качестве идентификатора клиента. Не идентификатор клиента, который был сгенерирован при создании API-проекта. Doh! – mattyfranchise

Смежные вопросы