172 lines
4.4 KiB
Markdown
172 lines
4.4 KiB
Markdown
|
||
# 📅 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:
|
||
|
||
```php
|
||
require_once 'GraphCalendar.php';
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Office 365 Einrichtung (Azure AD)
|
||
|
||
### 🛠️ Schritt 1: Im Azure-Portal anmelden
|
||
|
||
1. Besuche [https://portal.azure.com](https://portal.azure.com)
|
||
2. Melde dich mit einem **Admin-Konto** deiner Organisation an
|
||
|
||
---
|
||
|
||
### 🧩 Schritt 2: App-Registrierung erstellen
|
||
|
||
1. Navigiere zu: **Azure Active Directory > App-Registrierungen**
|
||
2. Klicke auf **+ Neue Registrierung**
|
||
3. Eingaben:
|
||
- **Name**: `Outlook Kalender PHP`
|
||
- **Kontotyp**: Nur Organisation
|
||
- **Umleitungs-URI**: leer lassen
|
||
4. Klicke auf **Registrieren**
|
||
|
||
---
|
||
|
||
### 🔍 Schritt 3: Wichtige Daten kopieren
|
||
|
||
| Bezeichnung | Verwendungszweck |
|
||
|----------------------------|----------------------------|
|
||
| **Client-ID** | → `CLIENT_ID` |
|
||
| **Verzeichnis-ID** (Tenant) | → `TENANT_ID` |
|
||
|
||
---
|
||
|
||
### 🔐 Schritt 4: Client Secret erstellen
|
||
|
||
1. Menü: **Zertifikate & Geheimnisse**
|
||
2. Klicke auf **+ Neuer geheimer Schlüssel**
|
||
3. Beschreibung z.B. `Standard`, Ablaufzeit wählen
|
||
4. Klicke auf **Hinzufügen**
|
||
5. Kopiere den generierten **Wert** sofort → `CLIENT_SECRET`
|
||
|
||
---
|
||
|
||
### 🛡️ Schritt 5: API-Berechtigungen
|
||
|
||
1. Menü: **API-Berechtigungen**
|
||
2. Klicke auf **+ Berechtigung hinzufügen**
|
||
3. Wähle:
|
||
- **Microsoft Graph**
|
||
- **Anwendungsberechtigungen**
|
||
- Füge hinzu:
|
||
- `Calendars.Read`
|
||
- `Calendars.ReadWrite`
|
||
4. 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
|
||
|
||
```php
|
||
$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 = true` und `onlineMeetingProvider = teamsForBusiness`
|
||
|
||
---
|
||
|
||
## 📄 Lizenz
|
||
|
||
MIT License – frei für private & kommerzielle Nutzung. Keine Garantie.
|
||
|
||
---
|
||
|
||
📅 **Stand:** Mai 2025
|
||
🔗 Weitere Infos: [Microsoft Graph Dokumentation](https://learn.microsoft.com/en-us/graph/)
|
||
|
||
---
|
||
|
||
## Online Test / Beispielnutzung
|
||
|
||
Dieser Client läuft online als Test in einer Office365 Umgebung. Und ist unter https://sb.zeus.tips/outlook-api/ erreichbar.
|