Google OAuth 2.0-Dienstkonto - Kalender-API (PHP-Client)

Ich habe ein Google Apps-Konto. Ich versuche, den Kalender eines Benutzers in diesem Konto zu bearbeiten.

Ich habe das Projekt erstellt, den Kalender-API-Dienst hinzugefügt und über die API-Konsole eine OAuth 2.0-Client-ID für das Dienstkonto erstellt.Ich habe diese generierte E-Mail-Adresse über die Kalendereinstellungen zum Kalender hinzugefügt, um den Kalender freizugeben.Ich habe die vorgeschlagenen Schritte zum Verwalten des API-Zugriffs befolgt. Der Clientname entspricht der Domain, in der sich das Google Apps-Konto befindet. Der Gültigkeitsbereich lautet "https://www.googleapis.com/auth/calendar".Durch verschiedene Quellen konnte ich ein Skript kompilieren, mit dem ich die nominierten Kalenderereignisse lesen und Ereignisse hinzufügen konnte.

Ich kann keinen Unterkalender erstellen. Ich habe durchgelesen,https://developers.google.com/accounts/docs/OAuth2ServiceAccount, und versuche, durch die "PRN" zu senden.

Hier schlägt das Skript fehl. Fehler beim Aktualisieren des OAuth2-Tokens, Meldung: '{"error": "access_denied"}'. Wenn ich den PRN entferne, ist alles "gut". Die Kalender werden einfach unter der Entwickler-E-Mail erstellt. Code:

<?
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);
?>

Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage