2014-06-12 3 views
1

인증 프롬프트가없는 캘린더 일정에 캘린더 일정을 넣으려고합니다. OAuth 서비스 계정을 사용하면이 작업을 수행 할 수 있습니다. 내 Google 개발자 콘솔에서 서비스 계정을 설정했으며 이에 대한 행운이 없습니다.Google 캘린더 Api v3을 사용하여 액세스 토큰을 가져올 수 없습니다.

우리는 Google 비즈니스 계정이 있으며 위임 한 사용자는 내 계정의 관리자에게 설정되어 다른 사용자의 캘린더에 액세스 할 수 있지만 이벤트를 생성하지는 않습니다. 문제는 액세스 토큰과 관련이 있다고 생각합니다. 내가 var_dump($accessToken) 일 때 NULL이 표시됩니다.

<?php 
error_reporting(E_ALL); 
require_once 'Google/Client.php'; 
require_once 'Google/Service/Calendar.php'; 
session_start();  

/* Authentication ID's */  
const CLIENT_ID = '[MY CLIENT ID]'; 
const SERVICE_ACCOUNT_NAME = '[MY SERVICE ACCOUNT]'; 
const KEY_FILE = '[MY KEY FILE].p12'; 
const CALENDAR_SCOPE = "https://www.googleapis.com/auth/calendar"; 
$key = file_get_contents(KEY_FILE); 
$auth = new Google_Auth_AssertionCredentials(
    SERVICE_ACCOUNT_NAME, 
    array(CALENDAR_SCOPE), 
    $key 
); 
$auth->sub = "[email protected]"; 

$client = new Google_Client(); 
$client->setScopes(array(CALENDAR_SCOPE)); 
$client->setAssertionCredentials($auth); 

$client->getAuth()->refreshTokenWithAssertion(); 
$accessToken = $client->getAccessToken(); 

$client->setClientId(CLIENT_ID); 

$user = "[email protected]"; 

if($accessToken){ 

    $cal = new Google_Service_Calendar($client); 

    $event = new Google_Service_Calendar_Event(); 
    $event->setSummary('TITLE'); 
    $event->setLocation('World'); 
    $event->setDescription('test'); 

    $start = new Google_Service_Calendar_EventDateTime(); 
    $start->setDate(date('yyyy-mm-dd')); 
    $event->setStart($start); 

    $end = new Google_Service_Calendar_EventDateTime(); 
    $end->setDate(date('yyyy-mm-dd')); 
    $event->setEnd($end); 

    $cal->events->insert($user, $event); 
} 
?> 

나는이 문제를 시도하고 문제를 해결하기 위해이 다른 스레드 (Using a Service Account, getAccessToken() is returning null)를 참조했지만 그것으로 운이 없었 없습니다.

도움이 될 것입니다.

답변

2

그것은 소리. "도메인 전체 권한을 서비스 계정에 위임"섹션 아래에 링크하십시오.

https://developers.google.com/drive/web/delegation

+0

감사합니다 !!! 그 놀라운! – FunkyMonk91

+0

안녕하세요 @ FunkyMonk91 저는 똑같은 문제가 있습니다. 나는 이미 "서비스 계정에 도메인 전체 권한 위임"을 시도했지만 여전히 작동하지 않습니다. 희망을 갖고 나에게 어떤 생각을 줄 수 있겠습니까? 감사 – ivantxo

0

이 같은 인증을 설정하려고 할 수 있습니다 : 당신이 구글에서 액세스 도메인 사용자의 데이터를 애플 리케이션을 부여해야처럼

$auth = new Google_Auth_AssertionCredentials(
     SERVICE_ACCOUNT_NAME, 
     SCOPES, 
     $key, 
     'notasecret', 
     'http://oauth.net/grant_type/jwt/1.0/bearer', 
     ADMIN_USER 
     ); 
+0

감사합니다. 슬프게도 이것은 내 문제를 해결하지 못했습니다. 내 액세스 토큰은 여전히 ​​모든 인수가있는 AssertionCredentials를 설정하면 null입니다. – FunkyMonk91

관련 문제