2013-08-27 2 views
1

Google Apps 계정이 있습니다. 이 계정에서 사용자 캘린더를 조작하려고합니다. 내가 프로젝트를 만든Google OAuth 2.0 서비스 계정 - 캘린더 API (PHP 클라이언트)

  • 는 캘린더 API 서비스를 추가하고, API 콘솔을 통해 서비스 계정의 OAuth 2.0 클라이언트 ID를 만들었습니다.
  • 캘린더를 공유하기 위해 캘린더 설정을 통해 생성 된 이메일 주소를 캘린더에 추가했습니다.
  • 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

도메인 관리자가 클라이언트 ID를 기반으로하는 응용 프로그램을 사용하여 사용자를 가장하는 경우 prn 필드는 호스트 된 도메인에서만 작동합니다.

+0

저는 도메인 관리자로서 다음 단계에 따라 응용 프로그램을 활성화했습니다. https://developers.google.com/accounts/docs/RegistrationForWebAppsAuto?csw=1 OAuth 응용 프로그램에는 해당되지 않습니까? OAuth 2.0이 아닌가요? 애플리케이션과 Google Apps 계정은 동일한 도메인 아래에 있습니다. – mattyfranchise

+0

답변 해 주셔서 감사합니다. 페니는 마침내 다른 정보의 도움으로 마침내 떨어졌습니다. Google Apps 계정이 클라이언트 ID로 사용 된 도메인을 사용하고있었습니다. API 프로젝트를 만들 때 생성 된 클라이언트 ID가 아닙니다. 도! – mattyfranchise