PHPackages                             hwkdo/ms-graph-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. hwkdo/ms-graph-laravel

ActiveLibrary[API Development](/categories/api)

hwkdo/ms-graph-laravel
======================

This is my package ms-graph-laravel

v1.7.1(1mo ago)01551MITPHPPHP ^8.3

Since Oct 28Pushed 1mo agoCompare

[ Source](https://github.com/hwkdo/ms-graph-laravel)[ Packagist](https://packagist.org/packages/hwkdo/ms-graph-laravel)[ Docs](https://github.com/hwkdo/ms-graph-laravel)[ GitHub Sponsors](https://github.com/hwkdo)[ RSS](/packages/hwkdo-ms-graph-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (8)Versions (25)Used By (1)

Microsoft Graph Laravel
=======================

[](#microsoft-graph-laravel)

Ein Laravel Package für die Integration mit Microsoft Graph API. Dieses Package bietet eine umfassende Lösung für die Verwaltung von Microsoft 365-Diensten wie Benutzer, E-Mails, OneDrive, Lizenzen und Abwesenheitsvorlagen.

Installation
------------

[](#installation)

Sie können das Package über Composer installieren:

```
composer require hwkdo/ms-graph-laravel
```

Sie können die Migrationen veröffentlichen und ausführen:

```
php artisan vendor:publish --tag="ms-graph-laravel-migrations"
php artisan migrate
```

Sie können die Konfigurationsdatei veröffentlichen:

```
php artisan vendor:publish --tag="ms-graph-laravel-config"
```

### Webhook-Job-Mappings initialisieren

[](#webhook-job-mappings-initialisieren)

Das Package enthält einen Seeder, um die Standard-Webhook-Job-Mappings zu erstellen:

```
php artisan db:seed --class=Hwkdo\\MsGraphLaravel\\Database\\Seeders\\GraphWebhookJobMappingSeeder
```

Alternativ können Sie den Seeder in Ihrem `DatabaseSeeder` registrieren:

```
// database/seeders/DatabaseSeeder.php
public function run(): void
{
    $this->call([
        \Hwkdo\MsGraphLaravel\Database\Seeders\GraphWebhookJobMappingSeeder::class,
    ]);
}
```

Der Seeder erstellt automatisch Mappings für folgende Webhook-Typen:

- `intracollect` - Formwerk Mail Webhooks für IntraCollect
- `angebote` - Bestellungen und Angebote Webhooks
- `ntopng` - Ntopng Webhooks
- `onedrive_filer` - OneDrive Filer Webhooks
- `onedrive_filerextern` - Externe OneDrive Filer Webhooks

Die Notification URLs werden automatisch basierend auf der `PORTAL_URL` Umgebungsvariable generiert.

Konfiguration
-------------

[](#konfiguration)

Fügen Sie die folgenden Umgebungsvariablen zu Ihrer `.env`-Datei hinzu:

```
# Microsoft Graph Grundkonfiguration
MSGRAPH_TENTANT_ID=your-tenant-id
MSGRAPH_DEFAULT_SUFFIX=your-domain.com
MICROSOFT_REDIRECT_URI=https://your-app.com/auth/callback

# Standard App Registration
MSGRAPH_APP_ID=your-client-id
MSGRAPH_APP_SECRET_KEY=your-client-secret

# OneDrive App Registration (optional)
MSGRAPH_APP_ID_ONEDRIVE=your-onedrive-client-id
MSGRAPH_APP_SECRET_KEY_ONEDRIVE=your-onedrive-client-secret

# Subscription App Registration (optional)
MSGRAPH_APP_ID_SUBSCRIPTION=your-subscription-client-id
MSGRAPH_APP_SECRET_KEY_SUBSCRIPTION=your-subscription-client-secret

# Subscription Secret
MSGRAPH_SUBSCRIBE_SECRET=your-subscription-secret

# Portal URL für Webhook-Benachrichtigungen
PORTAL_URL=https://portal.hwkdo.com

# Cache Konfiguration
MSGRAPH_CACHE_SECONDS=300
```

### Azure Setup

[](#azure-setup)

1. Erstellen Sie eine App-Registrierung im Azure Portal
2. Erstellen Sie einen Client Secret für die App
3. Weisen Sie die erforderlichen Microsoft Graph-Berechtigungen zu:
    - `User.Read.All` - Für Benutzerverwaltung
    - `Mail.Read` - Für E-Mail-Zugriff
    - `Files.Read.All` - Für OneDrive-Zugriff
    - `License.Read.All` - Für Lizenzverwaltung
    - `Presence.Read.All` - Für Anwesenheitsstatus

Verwendung
----------

[](#verwendung)

### Facade verwenden

[](#facade-verwenden)

```
use Hwkdo\MsGraphLaravel\Facades\MsGraphLaravel;

// Benutzer abrufen
$user = MsGraphLaravel::getUser('user@domain.com');

// Benutzerpräsenz abrufen
$presence = MsGraphLaravel::getUserPresence('user@domain.com');

// Benutzerteams abrufen
$teams = MsGraphLaravel::getUserTeams('user@domain.com');
```

### Dependency Injection verwenden

[](#dependency-injection-verwenden)

```
use Hwkdo\MsGraphLaravel\Services\UserService;
use Hwkdo\MsGraphLaravel\Services\LicenseService;

class UserController extends Controller
{
    public function __construct(
        private UserService $userService,
        private LicenseService $licenseService
    ) {}

    public function getUserInfo(string $email)
    {
        $user = $this->userService->getUser($email);
        $licenses = $this->licenseService->getLicenseDetails($email);

        return response()->json([
            'user' => $user,
            'licenses' => $licenses
        ]);
    }
}
```

Verfügbare Services
-------------------

[](#verfügbare-services)

### UserService

[](#userservice)

Verwaltung von Microsoft 365-Benutzern:

```
use Hwkdo\MsGraphLaravel\Services\UserService;

$userService = app(UserService::class);

// Benutzer nach UPN abrufen
$user = $userService->getUserByUpn('user@domain.com');

// Benutzer nach Alias abrufen
$user = $userService->getUserByAlias('user');

// Benutzer aktualisieren
$userService->update('user@domain.com', ['displayName' => 'New Name']);

// Benutzerpräsenz abrufen
$presence = $userService->getUserPresence('user@domain.com');

// Benutzerteams abrufen
$teams = $userService->getUserTeams('user@domain.com');

// Direkte Gruppen abrufen
$groups = $userService->getUserDirectGroups('user@domain.com');

// Transitive Gruppen abrufen
$groups = $userService->getUserTransitiveGroups('user@domain.com');
```

### LicenseService

[](#licenseservice)

Verwaltung von Microsoft 365-Lizenzen:

```
use Hwkdo\MsGraphLaravel\Services\LicenseService;

$licenseService = app(LicenseService::class);

// Lizenzdetails abrufen
$licenses = $licenseService->getLicenseDetails('user@domain.com');
```

### MailboxService

[](#mailboxservice)

E-Mail-Verwaltung:

```
use Hwkdo\MsGraphLaravel\Services\MailboxService;

$mailboxService = app(MailboxService::class);

// E-Mails abrufen, senden und verwalten
```

### OneDriveService

[](#onedriveservice)

OneDrive-Dateiverwaltung:

```
use Hwkdo\MsGraphLaravel\Services\OneDriveService;

$oneDriveService = app(OneDriveService::class);

// Dateien hochladen, herunterladen und verwalten
```

### OutOfOfficeTemplateService

[](#outofofficetemplateservice)

Abwesenheitsvorlagen-Verwaltung:

```
use Hwkdo\MsGraphLaravel\Services\OutOfOfficeTemplateService;

$oooService = app(OutOfOfficeTemplateService::class);

// Abwesenheitsvorlagen erstellen und verwalten
```

Artisan Commands
----------------

[](#artisan-commands)

Das Package stellt folgende Artisan-Befehle zur Verfügung:

```
# Abonnements überprüfen
php artisan msgraph:check-subscriptions

# Aktive Benutzer mit Abwesenheits-Cache aktualisieren
php artisan msgraph:refresh-active-users-with-ooo-cache
```

Webhook-Subscriptions
---------------------

[](#webhook-subscriptions)

Das Package unterstützt Microsoft Graph Webhook-Subscriptions für Echtzeit-Updates.

### Webhook-Job-Mappings

[](#webhook-job-mappings)

Webhook-Subscriptions werden in der Datenbank verwaltet. Jede Subscription ist mit einem Job verknüpft, der ausgeführt wird, wenn ein Webhook empfangen wird.

#### Neue Webhook-Subscription hinzufügen

[](#neue-webhook-subscription-hinzufügen)

```
use Hwkdo\MsGraphLaravel\Models\GraphWebhookJobMapping;
use App\Jobs\ProcessMyWebhook;

GraphWebhookJobMapping::create([
    'webhook_type' => 'my_webhook',
    'name' => 'my_webhook_name',
    'job_class' => ProcessMyWebhook::class,
    'filepath' => storage_path('app/webhooks/'),
    'upn' => 'user@domain.com',
    'resource' => "/users/user@domain.com/mailFolders('inbox')/messages",
    'notification_url' => GraphWebhookJobMapping::generateNotificationUrl('my_webhook'),
    'change_type' => 'created',
    'description' => 'Beschreibung der Subscription',
    'is_active' => true,
]);
```

#### Webhook-Subscription abrufen

[](#webhook-subscription-abrufen)

```
use Hwkdo\MsGraphLaravel\Models\GraphWebhookJobMapping;

// Alle aktiven Subscriptions
$subscriptions = GraphWebhookJobMapping::getActiveSubscriptions();

// Subscription nach Typ
$jobClass = GraphWebhookJobMapping::getJobClassForType('intracollect');

// Subscription nach Resource und URL
$subscription = GraphWebhookJobMapping::findByResourceAndNotificationUrl(
    "/users/user@domain.com/mailFolders('inbox')/messages",
    'https://portal.hwkdo.com/api/kunden/ms-graph-subscription/intracollect'
);
```

#### Webhook-Job erstellen

[](#webhook-job-erstellen)

Ihr Webhook-Job sollte die empfangenen Daten verarbeiten:

```
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ProcessMyWebhook implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(
        public string $resource
    ) {}

    public function handle(): void
    {
        // Verarbeite die Webhook-Daten
        // $this->resource enthält die Microsoft Graph Resource ID
    }
}
```

### Webhook-Endpoint

[](#webhook-endpoint)

Das Package registriert automatisch einen Webhook-Endpoint unter:

```
POST /api/kunden/ms-graph-subscription/{typ}

```

Microsoft Graph sendet Webhooks an diese URL. Der `{typ}` Parameter bestimmt, welcher Job ausgeführt wird.

Features
--------

[](#features)

### Microsoft Graph Integration

[](#microsoft-graph-integration)

- **Automatische Token-Verwaltung**: OAuth-Tokens werden automatisch abgerufen, gecacht und erneuert
- **Mehrere App-Registrierungen**: Unterstützung für verschiedene Microsoft Graph-Anwendungen
- **Umfassende API-Abdeckung**: Benutzer, E-Mails, OneDrive, Lizenzen, Teams und mehr

### Services

[](#services)

- **UserService**: Vollständige Benutzerverwaltung mit UPN- und Alias-Suche
- **LicenseService**: Lizenzverwaltung und -überwachung
- **MailboxService**: E-Mail-Verwaltung und -verarbeitung
- **OneDriveService**: Datei-Upload, -Download und -verwaltung
- **OutOfOfficeTemplateService**: Abwesenheitsvorlagen-Management

### Webhooks &amp; Subscriptions

[](#webhooks--subscriptions)

- **Echtzeit-Updates**: Webhook-Subscriptions für E-Mails und OneDrive
- **Automatische Verwaltung**: Subscription-Lebenszyklus wird automatisch verwaltet
- **Mehrere Endpunkte**: Unterstützung für verschiedene Webhook-Endpunkte

### Allgemein

[](#allgemein)

- **Laravel HTTP Client**: Verwendet Laravels eingebauten HTTP-Client für alle Anfragen
- **Umfassendes Logging**: Alle Operationen werden für Debugging-Zwecke geloggt
- **Exception Handling**: Ordnungsgemäße Fehlerbehandlung mit detaillierten Fehlermeldungen
- **Caching**: Konfigurierbare Cache-Zeiten für bessere Performance

API-Referenz
------------

[](#api-referenz)

### UserService

[](#userservice-1)

#### `getUser(string $mail): ?User`

[](#getuserstring-mail-user)

Ruft einen Benutzer anhand der E-Mail-Adresse ab.

**Parameter:**

- `$mail`: E-Mail-Adresse des Benutzers

**Rückgabe:** Microsoft Graph User-Objekt oder null

#### `getUserByUpn(string $upn): User`

[](#getuserbyupnstring-upn-user)

Ruft einen Benutzer anhand des UPN (User Principal Name) ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Microsoft Graph User-Objekt

#### `getUserByAlias(string $alias): ?User`

[](#getuserbyaliasstring-alias-user)

Ruft einen Benutzer anhand des Alias ab.

**Parameter:**

- `$alias`: Alias des Benutzers

**Rückgabe:** Microsoft Graph User-Objekt oder null

#### `update(string $upn, array $data): User`

[](#updatestring-upn-array-data-user)

Aktualisiert Benutzerdaten.

**Parameter:**

- `$upn`: UPN des Benutzers
- `$data`: Zu aktualisierende Daten

**Rückgabe:** Aktualisiertes Microsoft Graph User-Objekt

#### `getUserPresence(string $upn): Presence`

[](#getuserpresencestring-upn-presence)

Ruft den Anwesenheitsstatus eines Benutzers ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Microsoft Graph Presence-Objekt

#### `getUserTeams(string $upn): array`

[](#getuserteamsstring-upn-array)

Ruft die Teams eines Benutzers ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Array von Microsoft Graph Team-Objekten

#### `getUserDirectGroups(string $upn): array`

[](#getuserdirectgroupsstring-upn-array)

Ruft die direkten Gruppen eines Benutzers ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Array von Microsoft Graph Group-Objekten

#### `getUserTransitiveGroups(string $upn): array`

[](#getusertransitivegroupsstring-upn-array)

Ruft die transitiven Gruppen eines Benutzers ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Array von Microsoft Graph Group-Objekten

### LicenseService

[](#licenseservice-1)

#### `getLicenseDetails(string $upn): array`

[](#getlicensedetailsstring-upn-array)

Ruft die Lizenzdetails eines Benutzers ab.

**Parameter:**

- `$upn`: UPN des Benutzers

**Rückgabe:** Array von Microsoft Graph LicenseDetails-Objekten

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Bitte sehen Sie [CHANGELOG](CHANGELOG.md) für weitere Informationen zu den letzten Änderungen.

Contributing
------------

[](#contributing)

Bitte sehen Sie [CONTRIBUTING](CONTRIBUTING.md) für Details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Bitte überprüfen Sie [unsere Sicherheitsrichtlinie](../../security/policy), wie Sicherheitslücken gemeldet werden.

Credits
-------

[](#credits)

- [hwkdo](https://github.com/hwkdo)
- [Alle Contributors](../../contributors)

License
-------

[](#license)

Die MIT-Lizenz (MIT). Bitte sehen Sie [License File](LICENSE.md) für weitere Informationen.

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance89

Actively maintained with recent releases

Popularity13

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~6 days

Total

24

Last Release

55d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/72b6d361b5e84bd3dfecc691278039a815c252495b4624dd6f50caa27ff02655?d=identicon)[hwkdo](/maintainers/hwkdo)

---

Top Contributors

[![aleex1848](https://avatars.githubusercontent.com/u/17452861?v=4)](https://github.com/aleex1848 "aleex1848 (25 commits)")

---

Tags

laravelhwkdoms-graph-laravel

### Embed Badge

![Health badge](/badges/hwkdo-ms-graph-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/hwkdo-ms-graph-laravel/health.svg)](https://phpackages.com/packages/hwkdo-ms-graph-laravel)
```

###  Alternatives

[simplestats-io/laravel-client

Client for SimpleStats!

4515.5k](/packages/simplestats-io-laravel-client)[scalar/laravel

Render your OpenAPI-based API reference

6183.9k2](/packages/scalar-laravel)[njoguamos/laravel-plausible

A laravel package for interacting with plausible analytics api.

208.8k](/packages/njoguamos-laravel-plausible)[ryangjchandler/bearer

Minimalistic token-based authentication for Laravel API endpoints.

8129.8k](/packages/ryangjchandler-bearer)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1221.1k](/packages/codebar-ag-laravel-docuware)[combindma/laravel-facebook-pixel

Meta pixel integration for Laravel

4956.9k](/packages/combindma-laravel-facebook-pixel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
