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);
?>
모든 도움을 주시면 감사하겠습니다.
저는 도메인 관리자로서 다음 단계에 따라 응용 프로그램을 활성화했습니다. https://developers.google.com/accounts/docs/RegistrationForWebAppsAuto?csw=1 OAuth 응용 프로그램에는 해당되지 않습니까? OAuth 2.0이 아닌가요? 애플리케이션과 Google Apps 계정은 동일한 도메인 아래에 있습니다. – mattyfranchise
답변 해 주셔서 감사합니다. 페니는 마침내 다른 정보의 도움으로 마침내 떨어졌습니다. Google Apps 계정이 클라이언트 ID로 사용 된 도메인을 사용하고있었습니다. API 프로젝트를 만들 때 생성 된 클라이언트 ID가 아닙니다. 도! – mattyfranchise