|
|
||
|---|---|---|
| .. | ||
| GraphCalendar.php | ||
| readme.md | ||
readme.md
📅 GraphCalendar – Microsoft Graph API PHP Kalender-Client
Diese PHP-Klasse ermöglicht den Zugriff auf Microsoft Outlook-Kalender über die Microsoft Graph API. Du kannst damit Events erstellen, abrufen, aktualisieren und löschen – auch inklusive Microsoft Teams-Meetings.
✅ Funktionen
- 🔐 Authentifizierung über Client-Credentials (Client-ID & Secret)
- 📥 Abrufen aller oder einzelner Kalendereinträge
- ✍️ Erstellen von Terminen (inkl. Teams-Link)
- 🔄 Aktualisieren bestehender Termine
- ❌ Löschen von Terminen
🔧 Voraussetzungen
- ✅ PHP ≥ 7.2
- ✅ cURL-Support in PHP aktiviert
- ✅ Microsoft Azure AD App-Registrierung:
Calendars.ReadWrite,User.Read(Application Permissions)- Admin-Zustimmung erforderlich
- Client-ID, Client-Secret und Tenant-ID
📦 Installation
Kein Composer benötigt. Einfach Datei ins Projekt einfügen:
require_once 'GraphCalendar.php';
⚙️ Office 365 Einrichtung (Azure AD)
🛠️ Schritt 1: Im Azure-Portal anmelden
- Besuche https://portal.azure.com
- Melde dich mit einem Admin-Konto deiner Organisation an
🧩 Schritt 2: App-Registrierung erstellen
- Navigiere zu: Azure Active Directory > App-Registrierungen
- Klicke auf + Neue Registrierung
- Eingaben:
- Name:
Outlook Kalender PHP - Kontotyp: Nur Organisation
- Umleitungs-URI: leer lassen
- Name:
- Klicke auf Registrieren
🔍 Schritt 3: Wichtige Daten kopieren
| Bezeichnung | Verwendungszweck |
|---|---|
| Client-ID | → CLIENT_ID |
| Verzeichnis-ID (Tenant) | → TENANT_ID |
🔐 Schritt 4: Client Secret erstellen
- Menü: Zertifikate & Geheimnisse
- Klicke auf + Neuer geheimer Schlüssel
- Beschreibung z.B.
Standard, Ablaufzeit wählen - Klicke auf Hinzufügen
- Kopiere den generierten Wert sofort →
CLIENT_SECRET
🛡️ Schritt 5: API-Berechtigungen
- Menü: API-Berechtigungen
- Klicke auf + Berechtigung hinzufügen
- Wähle:
- Microsoft Graph
- Anwendungsberechtigungen
- Füge hinzu:
Calendars.ReadCalendars.ReadWrite
- Klicke danach auf Admin-Zustimmung erteilen
⚠️ Office 365 Graph API Limits
| Limittyp | Beschreibung |
|---|---|
| Anfragen | ~10.000/10 Min. pro App/User (danach Fehler 429) |
| Teilnehmerzahl | Max. ~500 pro Termin |
| Beschreibung (Body) | Max. ~100.000 Zeichen (HTML/Text) |
| Ort (Location) | Max. 255 Zeichen |
| Teams-Meetings | Nur mit Teams-Lizenz & OnlineMeetings.ReadWrite |
| Paging | Nur 100 Events pro Anfrage – nutze @odata.nextLink |
| Anhänge | Max. 150 MB (3MB pro Datei über diese WebAPI) – große Dateien vermeiden |
🚀 Beispielnutzung
$calendar = new GraphCalendar(
'DEINE_CLIENT_ID',
'DEIN_CLIENT_SECRET',
'DEIN_TENANT_ID',
'defaultuser@example.com' // Optional
);
// Event erstellen
$calendar->createEvent(
'Team Meeting',
'2025-05-01T10:00:00',
'2025-05-01T11:00:00',
true,
'Wöchentliches Sync-Meeting',
'Online',
[
[
'emailAddress' => [
'address' => 'gast@example.com',
'name' => 'Gast Name'
],
'type' => 'required'
]
]
);
// Events abrufen
$events = $calendar->getEvents();
// Einzelnes Event abrufen
$event = $calendar->getEvents('EVENT_ID');
// Event aktualisieren
$calendar->updateEvent('EVENT_ID', 'Neuer Titel', '2025-05-01T12:00:00', '2025-05-01T13:00:00');
// Event löschen
$calendar->deleteEvent('EVENT_ID');
🧠 Tipps
- Verwende gültige Zeitzonenbezeichner wie
Europe/Berlin,UTC, etc. - Für Teams-Meetings setze
isOnlineMeeting = trueundonlineMeetingProvider = teamsForBusiness
📄 Lizenz
MIT License – frei für private & kommerzielle Nutzung. Keine Garantie.
📅 Stand: Mai 2025
🔗 Weitere Infos: Microsoft Graph Dokumentation
Online Test / Beispielnutzung
Dieser Client läuft online als Test in einer Office365 Umgebung. Und ist unter https://sb.zeus.tips/outlook-api/ erreichbar.