Cuenta de servicio de Google OAuth 2.0 - API de calendario (cliente PHP)
Tengo una cuenta de Google Apps. Estoy tratando de manipular un calendario de usuarios dentro de esta cuenta.
He creado el Proyecto, agregué el servicio de API del calendario y creé una ID de cliente OAuth 2.0 de cuenta de servicio a través de la consola de API.He añadido esa dirección de correo electrónico generada al calendario a través de la configuración del calendario para compartir el calendario.He seguido los pasos sugeridos para administrar el acceso a la API. El nombre del cliente es el mismo dominio que la cuenta de Google Apps y el alcance es "https://www.googleapis.com/auth/calendar".A través de varias fuentes pude compilar un script que me permite leer los eventos de calendarios nominados y agregarle eventos.Lo que no puedo hacer es crear un sub calendario. He leído a través dehttps://developers.google.com/accounts/docs/OAuth2ServiceAccount, y estoy intentando enviar a través del "prn".
Aquí es donde el script falla con; Error al actualizar el token OAuth2, mensaje: '{"error": "access_denied"}'. Si quito el prn, entonces todo es "bueno". Los calendarios simplemente se crean bajo el correo electrónico del desarrollador. Código:
<?
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 = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.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);
?>
Cualquier ayuda sería muy apreciada.