axelskywalker
Goto Top

Termine im Outlook Gruppenkalender erstellen mit PHP

Guten Morgen,

ich arbeite mich gerade erst in das Thema ein und habe ein Hürden zu meistern.
Ich möchte mittels PHP einen Termin im Gruppenkalender erstellen.

Gruppe = Gruppe die im Admincenter angelegt wurde. Diese Gruppe hat auch einen Kalender im Outlook, den ich auch angezeigt bekomme.

Ich habe in Azure eine App Registriert mit den nötigen Berechtigungen. (Sind schon zu viele, rein aus Testgründen)
Calendars.Read
Calendars.Read.Shared
Calendars.ReadBasic
Calendars.ReadBasic.All
Calendars.ReadWrite
Calendars.ReadWrite.Shared
Group.Create
Group.Read.All
Group.Read.All
Group.ReadWrite.All
GroupMember.Read.All
GroupMember.ReadWrite.All
User.Read
User.Read.All

Client ID und Secret habe ich auch
Gruppen ID ist auch bekannt

In meinem Kalender oder bei Kollegen ist kein Problem. Das funktioniert Problemlos.
Jetzt wollen wir ein Urlaubskalender einführen und dafür den Gruppenkalender benutzen.
Dort möchte ich jetzt Termine erstellen. Das funktioniert allerdings nicht .


<?php
$url = 'https://login.microsoftonline.com/{tennant-ID}/oauth2/v2.0/token';  
$data = [
    'client_id' => '***',  
    'scope' => 'https://graph.microsoft.com/.default',  
    'client_secret' => '***',  
    'grant_type' => 'client_credentials'  
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-type: application/x-www-form-urlencoded'  
]);

$result = curl_exec($ch);
if ($result === false) {
    echo 'Curl-Fehler: ' . curl_error($ch);  
}

curl_close($ch);
$response = json_decode($result, true);

if (isset($response['access_token'])) {  
    $token = $response['access_token'];  
} else {
    echo "Access Token nicht in der Antwort gefunden!";  
    die();
}
$token = $response['access_token'];   


//Hiermit kann ich einen Termin in meinem Kalender erstellen
//$userId = '***';  
//$url = "https://graph.microsoft.com/v1.0/users/$userId/events"; 


//Hiermit möchte ich einen Termin im Gruppenkalender erstellen
//$groupId = '***';  
$url = 'https://graph.microsoft.com/v1.0/groups/$groupId/events';  
//$url = 'https://graph.microsoft.com/v1.0/groups/$groupId/calendar/events'; 


$eventData = [
    'subject' => 'Automatisierter Testtermin',  
    'start' => [  
        'dateTime' => '2023-08-17T12:00:00',  
        'timeZone' => 'UTC'  
    ],
    'end' => [  
        'dateTime' => '2023-08-17T13:00:00',  
        'timeZone' => 'UTC'  
    ],
    'body' => [  
        'contentType' => 'HTML',  
        'content' => 'Kann gelöscht werden. .'  
    ]
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($eventData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $token",  
    "Content-Type: application/json"  
]);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);  
}

$response = json_decode($result, true);
curl_close($ch);

if (isset($response['id'])) {  
    echo "Termin erfolgreich erstellt mit ID: " . $response['id'];  
} else {
    echo "Fehler beim Erstellen des Termins.";  
}
if (isset($response['error'])) {  
    echo "Fehler: " . $response['error']['message'];  
}


Das wird mit der Fehlermeldung beendet. Die Meldung ist klar aber warum erhalte ich diese, wenn es mit meinem Kalender funktioniert? Fehlen eventuell doch Berechtigungen?
Vielleicht hat jemand eine IDee oder einen Tipp wonach ich schauen kann?


array(2) { ["code"]=> string(17) "ErrorAccessDenied" ["message"]=> string(50) "Access is denied. Check credentials and try again." } }  


Danke schonmal face-smile

Content-ID: 8175963422

Url: https://administrator.de/contentid/8175963422

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

godlie
godlie 17.08.2023 um 10:10:28 Uhr
Goto Top
Hallo,

welche Zeile generiert dir denn den Error ?

grüße
Axelskywalker
Axelskywalker 17.08.2023 aktualisiert um 10:19:20 Uhr
Goto Top
Das ist die Ausgabe von der zweiten Abfrage

var_dump($response);
7907292512
7907292512 17.08.2023 aktualisiert um 10:30:44 Uhr
Goto Top