인증 프롬프트가없는 캘린더 일정에 캘린더 일정을 넣으려고합니다. 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)를 참조했지만 그것으로 운이 없었 없습니다.
도움이 될 것입니다.
감사합니다 !!! 그 놀라운! – FunkyMonk91
안녕하세요 @ FunkyMonk91 저는 똑같은 문제가 있습니다. 나는 이미 "서비스 계정에 도메인 전체 권한 위임"을 시도했지만 여전히 작동하지 않습니다. 희망을 갖고 나에게 어떤 생각을 줄 수 있겠습니까? 감사 – ivantxo