Conta de serviço do Google Agenda com API PHP oauth2.0 - Como acessar calendários que não são compartilhados

Estou com problemas para ler eventos do calendário com as bibliotecas PHP fornecidas pelo Google. Os calendários que quero ler NÃO são compartilhados publicamente, mas quero lê-los no meu aplicativo de servidor.

A conta que contém os calendários é separada da minha (vou me referir a ela como a conta da API), embora os calendários sejam compartilhados comigo.

De acordo com os detalhes da agenda não compartilhados publicamente no Google:

Qualquer um pode: não vê nada

Você pode: Ver apenas disponibilidade (ocultar detalhes).

Tanto a conta da API quanto a minha conta têm contas de serviço OAuth2.0 com uma chave P12.

Eu segui um guia em:http://www.daimto.com/google_service_account_php/ o que me ajudou a descobrir o processo de autenticação. Consegui ler calendários compartilhados publicamente sem problemas nas duas contas. Aqui está o meu código:

// Start the Google client
$client = new Google_Client();
$client->setClientId({{client_id from google}});
$client->setApplicationName("Project Name");
$client->setClientSecret({{client_secret from google}});
$key = file_get_contents({{key_file_location on my server}});
$cred = new Google_Auth_AssertionCredentials(
        $Email_address,
        // Scopes that we will be using
        array(
           "https://www.googleapis.com/auth/calendar"
        ),
        $key
);

$client->setAssertionCredentials($cred);

if($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}

// Use Google Calendar API plugin
$service = new Google_Service_Calendar($client);

$optParams = array(
    'singleEvents'=> true,
    'timeMin'=>date(DateTime::ATOM),
    'timeMax' => date(DateTime::ATOM, time()+(3 * 24 * 60 * 60))
);

$results = $service->events->listEvents(
    '{{Calendar ID from Google Calendar Settings}}',
    $optParams
);

No entanto, ao tentar usar o código para calendários que não são compartilhados publicamente, recebo o seguinte erro em qualquer uma das contas:

Erro fatal: exceção não capturada 'Google_Service_Exception' com a mensagem 'Erro ao chamar GEThttps://www.googleapis.com/calendar/v3/calendars{{CalendarID}} :( 404) Não encontrado ...

Quando eu tentovar_dump($client->getAuth()), Notei que há um valor que sugere que a autenticação não funcionou:["authenticated":"Google_Client":private]=> bool(false). Isso acontece nas duas contas e nos calendários compartilhados publicamente e publicamente.

Posso usar o Google API Explorer com minha conta para mostrar os dados JSON em calendários que não são compartilhados publicamente. Há algo faltando na API do Google PHP ou nas Configurações da conta do Google que me permitem fazer o que quero?

Obrigado pelo seu tempo.

questionAnswers(2)

yourAnswerToTheQuestion