2014-11-07 1 views
2

내 인트라넷에 내 사용자의 캘린더에 이벤트를 추가해야하는 PHP 응용 프로그램이 있습니다. 서비스 계정이있는 사용자 달력에 액세스하십시오.

나는 다음과 같은 지시 https://developers.google.com/+/domains/authentication/delegation

I 설치 구글-API-PHP 클라이언트를 다음과 내 시작점으로 예제 서비스 accounts.php을 사용했다.

$client_id = 'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr.apps.googleusercontent.com'; 
$service_account_name = '[email protected]'; 
$key_file_location = 'file.p12'; 

$client = new Google_Client(); 
$client->setApplicationName("egw - intranet"); 
$service = new Google_Service_Calendar($client); 
//authenticate 
if (isset($_SESSION['service_token'])) { 
    $client->setAccessToken($_SESSION['service_token']); 
} 
$key = file_get_contents($key_file_location); 
$cred = new Google_Auth_AssertionCredentials(
    $service_account_name, 
    array('https://www.googleapis.com/auth/calendar'), 
    $key 
); 
$client->setAssertionCredentials($cred); 
if ($client->getAuth()->isAccessTokenExpired()) { 
    $client->getAuth()->refreshTokenWithAssertion($cred); 
} 
$_SESSION['service_token'] = $client->getAccessToken(); 

$event = new Google_Service_Calendar_Event(); 
$event->setSummary('API V3 TEST'); 
$event->setLocation('rrrrrrrrrrrrrrrrrrrrrrrrr'); 
$start = new Google_Service_Calendar_EventDateTime(); 
$start->setDateTime('2014-11-03T10:00:00.000-07:00'); 
$event->setStart($start); 
$end = new Google_Service_Calendar_EventDateTime(); 
$end->setDateTime('2014-11-04T10:25:00.000-07:00'); 
$event->setEnd($end); 
$attendee1 = new Google_Service_Calendar_EventAttendee(); 
$attendee1->setEmail('[email protected]'); 

$attendees = array($attendee1); 
$event->attendees = $attendees; 
$createdEvent = $service->events- >insert('[email protected]', $event); 

echo $createdEvent->getId(); 

수신 오류 404 개를 찾을 수 없습니다. 서비스 계정으로 테스트를 위해 사용하는 캘린더를 수동으로 공유하는 경우 작동합니다. 그러나 내 프로그램의 모든 사용자의 모든 캘린더를 수동으로 공유하지 않고도 작업하고 싶습니다. 누군가 내가 놓친 걸 말해 줄 수 있니? 당신은 특별히 구글 프로젝트와 공유되지 않은 캘린더에 이벤트를 추가 할 수 없습니다

+0

관리 콘솔에서 범위를 올바르게 설정 했습니까? 여기에 https://www.googleapis.com/auth/calendar – luc

+0

이 있어야합니다. 예, https://www.googleapis.com/auth/calendar를 범위로 사용하고 있습니다. – Carl

답변

0

종류, 안부. 각 캘린더를 서비스 계정과 공유하거나 각 사용자가 액세스 권한을 부여 할 수 있도록 웹 애플리케이션 자격증 명과 OAuth2를 사용해야합니다.

+0

앱 도메인 내에 '서비스 계정'이 존재하는 이유는 무엇입니까? – Mutmatt

+0

서비스 계정을 사용하면 앱이 Google에 자신을 식별 할 수 있습니다. 계정의 소유자는 캘린더에 액세스 할 수있는 권한을 앱에 부여해야합니다. 수정하려는 캘린더에서 설정 -> 캘린더 ->이 캘린더 공유로 이동하십시오. 서비스 계정에서 이메일 주소 (서비스 계정 이름)를 입력하고 "이벤트 변경"권한을 부여하십시오. 페이지 하단의 저장 버튼을 클릭하십시오. 코드가 정확하고 눈에 보이는 것처럼 보이면 이벤트가 추가됩니다. –

+0

도메인 관리자가 캘린더에 대한 도메인 수준 액세스를 허용하면 "자동으로"서비스 계정 액세스 권한도 부여되어서는 안됩니까? 이 정보에 대한 API 문서는 완벽하고 거의 유용하지 않습니다. – Mutmatt

0

내가 시작했을 때 현재 클라이언트 인 google-php-api-client는 1.1.0-beta였습니다. 몇 주 후 우리는 현재 1.1.2에 있습니다. 이 버전으로 업그레이드하면 문제가 해결되었습니다. 서비스 계정을 추가하면 응용 프로그램이 Google과 자신을 동일시 할 수 있습니다. Google 관리 콘솔에 범위를 추가 한 경우 서비스 계정은 도메인의 모든 사용자에 대한 범위로 지정된 모든 데이터에 액세스 할 수 있습니다. Thx 모두 응답입니다.