Conta de serviço do Google OAuth 2.0 - API de calendário (cliente PHP)
Eu tenho uma conta do Google Apps. Estou tentando manipular um calendário de usuários nesta conta.
Eu criei o projeto, adicionei o serviço API do Google Agenda e criei um ID do cliente OAuth 2.0 da conta de serviço por meio do console da API.Eu adicionei esse endereço de e-mail gerado ao Calendário por meio das configurações do Calendário para compartilhar o calendário.Eu segui as etapas sugeridas para gerenciar o acesso à API. O nome do cliente é o mesmo domínio em que a conta do Google Apps está e o escopo é "https://www.googleapis.com/auth/calendar".Através de várias fontes, consegui compilar um script que me permite ler os eventos dos calendários nomeados e adicionar eventos a ele.O que eu não posso fazer é criar um sub-calendário. Eu li através dehttps://developers.google.com/accounts/docs/OAuth2ServiceAccounte estou tentando enviar através do "prn".
É aqui que o script falha; Erro ao atualizar o token OAuth2, mensagem: '{"error": "access_denied"}'. Se eu remover o prn, tudo é "bom". Os calendários são criados sob o e-mail do desenvolvedor. 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);
?>
Qualquer ajuda seria muito apreciada.