# Bestellungen aus jedem PHP-Backend melden

> MIRA FIVE in PHP einrichten: mirafive/sdk-php sendet Events und bezahlte Bestellungen am Ende jeder Anfrage und zählt einen wiederholten Webhook einmal.

URL: https://mirafive.io/de/fuer/php  
Updated: 2026-09-28

Ein Client sendet Ihre Server-Events am Ende der Anfrage, ein Idempotenzschlüssel lässt einen doppelten Webhook einmal zählen.

Paket `mirafive/sdk-php`

## In 5 Schritten eingerichtet

1. ### Paket installieren  
Es setzt PHP 8.3 mit `ext-json` voraus und braucht kein weiteres Composer-Paket. Gesendet wird mit `ext-curl`, sonst über PHP-Streams oder Ihren eigenen PSR-18-Client.  
```  
composer require mirafive/sdk-php  
```
2. ### Geheimen Schlüssel eintragen  
Nehmen Sie den geheimen Schlüssel einer Server-Quelle aus **Daten → Quellen**. Er bleibt auf dem Server und gehört nie in HTML, JavaScript oder eine App.  
```  
MIRAFIVE_SECRET_KEY=mf_…  
```
3. ### Einen Client anlegen  
`new Mira` liest den Schlüssel aus `$_ENV`, `$_SERVER` oder `getenv()`. `track()` puffert; gesendet wird am Ende der Anfrage, alle 100 Events und bei `flush()`. Ein Flush dauert nie länger als 3 Sekunden.  
```  
<?php  
declare(strict_types=1);  
use MiraFive\Mira;  
require __DIR__.'/vendor/autoload.php';  
// Liest MIRAFIVE_SECRET_KEY und, falls gesetzt, MIRAFIVE_HOST.  
$mira = new Mira;  
```
4. ### Bestellung melden  
Rufen Sie `track()` mit benannten Argumenten dort auf, wo die Zahlung bestätigt wird. IDs sind Strings, Integer-IDs wandeln Sie mit `(string)` um.  
```  
$mira->track('order_paid', userId: (string) $order->customerId, properties: [  
    'revenue' => 328,  
    'currency' => 'EUR',  
]);  
```
5. ### Schlüssel prüfen  
Das Test-Event zeigt, dass Schlüssel und Host funktionieren, und wird weder gespeichert noch berechnet. Ein falscher Schlüssel wirft einen `MiraError`. Danach finden Sie ein echtes Event unter **Daten → Live**.  
```  
$receipt = $mira->send([['name' => '$install_check']]);  
var_dump($receipt->reason); // string(13) "install_check"  
```

MIRA FIVE ist Analyse rund um die Person. `mirafive/sdk-php` ist die Server-Seite für reines PHP und für Frameworks ohne eigenes MIRA-FIVE-Paket: Es puffert Events, sendet sie am Ende der Anfrage und wertet [Feature-Flags](https://mirafive.io/de/glossar/feature-flag) in Ihrem Prozess aus. Unter PHP-FPM übergeben Sie einen PSR-16-Cache (`new Mira(cache: $psr16Cache)`), damit sich alle Prozesse Flags und Sendepausen teilen.

## Woher kommen die Pageviews?

Aus dem Browser. Das [zweizeilige Script-Tag](https://mirafive.io/de/fuer/website) mit dem Website-Schlüssel einer Website-Quelle gehört in Ihre Templates. Beide Quellen melden in dasselbe Projekt, der geheime Schlüssel erreicht nie eine Seite.

## Wie kommt eine Bestellung zu ihrem Kanal?

Über die Person. Mit Einwilligung führt der Browser eine Kennung. Schicken Sie sie an Ihren Server, etwa in einem versteckten Feld des Checkout-Formulars, und `identify` verknüpft die früheren Besuche mit Ihrer Nutzer-ID:

```php
$mira->identify((string) $user->id, ['plan' => 'pro'], anonymousId: $anonymousId);
```

Die Bestellung trägt dieselbe ID und landet bei dieser Person, neben dem Kanal ihres ersten Besuchs. Nehmen Sie Ihre interne ID, nie die E-Mail-Adresse. Mit einem Kaufziel auf `order_paid` zeigt Herkunft Käufer und Umsatz je Kanal.

## Wie zählt ein Webhook nur einmal?

Mit `send()` und einem Idempotenzschlüssel. Die Methode sendet sofort und gibt den `Receipt` des Servers zurück:

```php
$receipt = $mira->send([
    ['name' => 'order_paid', 'userId' => (string) $order->customerId, 'properties' => ['revenue' => 328, 'currency' => 'EUR']],
], idempotencyKey: "order-{$order->id}");
```

`send()` wirft einen `MiraError`, wenn MIRA FIVE den Batch ablehnt. `track()` und `flush()` werfen bei Netzproblemen nie.

Im Tab **Einbauen** der Quelle steht **Von Ihrem Coding-Agent einbauen lassen**: ein Prompt für Claude Code, Cursor oder Codex mit allen Schritten und der Prüfung, nie mit dem geheimen Schlüssel. Queues und Transports beschreibt die [Dokumentation](https://docs.mirafive.io/sdks/php), die Aufgabenteilung die [Einrichtungsseite](https://mirafive.io/de/einrichtung).

## Andere Einrichtungen

Dieselben Zahlen, egal wie Ihre Website gebaut ist.

- [Next.js](https://mirafive.io/de/fuer/nextjs)
- [React](https://mirafive.io/de/fuer/react)
- [Astro](https://mirafive.io/de/fuer/astro)
- [Laravel](https://mirafive.io/de/fuer/laravel)
- [Nuxt](https://mirafive.io/de/fuer/nuxt)
- [Symfony](https://mirafive.io/de/fuer/symfony)
- [Vue](https://mirafive.io/de/fuer/vue)
- [TanStack Start](https://mirafive.io/de/fuer/tanstack-start)
- [Node.js](https://mirafive.io/de/fuer/nodejs)
- [Convex](https://mirafive.io/de/fuer/convex)
- [JavaScript](https://mirafive.io/de/fuer/javascript)
- [jede Website](https://mirafive.io/de/fuer/website)

[Zur Dokumentation](https://docs.mirafive.io)

## Fragen und Antworten

### Was passiert, wenn MIRA FIVE nicht erreichbar ist?

Ein Flush gibt nach spätestens 3 Sekunden auf. Danach überspringen Flushes 30 Sekunden lang das Netz und verwerfen ihre Events. Mit einem PSR-16-`cache` gilt die Pause für alle PHP-Prozesse.

### Und in Octane, RoadRunner oder Queue-Workern?

Langlebige Worker erreichen den Flush am Ende nur, wenn sie stoppen. Rufen Sie `$mira->flush()` nach jeder Anfrage oder jedem Job auf.

### Wie bleiben Tests und lokale Läufe still?

`new Mira(enabled: getenv('APP_ENV') === 'production')` sendet nichts und braucht keinen Schlüssel, weist aber dieselben Eingaben ab wie in Produktion.

### Gilt das auch für Laravel und Symfony?

Nein, dort nehmen Sie `mirafive/sdk-laravel` oder `mirafive/sdk-symfony`, siehe [Einrichtung für Laravel](https://mirafive.io/de/fuer/laravel) und [für Symfony](https://mirafive.io/de/fuer/symfony).

## Sehen Sie, welcher Kanal Käufer bringt

Kostenlos bis 25.000 Events im Monat. Ohne Kreditkarte.

[Kostenlos starten](https://app.mirafive.io/register)[Zu den Preisen](https://mirafive.io/de/preise)
