Stripe Webhooks einrichten: Die Anleitung für Einsteiger
Webhooks sind das Nervensystem deines Stripe-Kontos: Sie melden in Echtzeit, was passiert — von der erfolgreichen Zahlung bis zur Abo-Kündigung. Diese Anleitung erklärt die Einrichtung Schritt für Schritt und zeigt die Stolperfallen, über die fast jeder einmal fällt.
Wie Stripe-Webhooks funktionieren
Du hinterlegst bei Stripe eine HTTPS-URL (den „Endpoint“). Tritt ein Ereignis ein, schickt Stripe ein JSON-Dokument an diese URL — z. B. invoice.payment_failed, wenn eine Abbuchung scheitert. Dein Endpoint antwortet mit HTTP 200 („angekommen“); alles andere wertet Stripe als Fehler und versucht es später erneut.
Schritt 1: Endpoint im Dashboard anlegen
- Im Stripe-Dashboard zu Entwickler → Webhooks wechseln.
- „Endpoint hinzufügen“ klicken und deine HTTPS-URL eintragen.
- Events auswählen: entweder gezielt (z. B.
customer.subscription.deleted) oder „alle Events“ — das Filtern übernimmt dann deine Empfängerseite.
Schritt 2: Signing Secret sichern
Nach dem Anlegen zeigt Stripe ein Signing Secret (whsec_…). Damit signiert Stripe jedes Event (Header Stripe-Signature, HMAC-SHA256 über Zeitstempel + Body). Events ohne gültige Signatur darfst du niemals verarbeiten — sonst kann jeder Dritte deinem System gefälschte „Zahlungen“ unterschieben.
Schritt 3: Testen
Im Testmodus kannst du Events über das Dashboard oder die Stripe CLI auslösen, z. B. stripe trigger customer.subscription.deleted. Prüfe: Kommt das Event an? Stimmt die Signatur? Antwortet dein Endpoint schnell mit 200?
Die häufigsten Fehler
- Body wird vor der Signaturprüfung verändert. Die Signatur gilt für den rohen Request-Body. Wer ihn erst durch einen JSON-Parser schickt, bekommt nie eine gültige Signatur.
- Langsame Antworten. Erst speichern und mit 200 antworten, dann verarbeiten — sonst läuft Stripe in den Timeout und schickt das Event erneut.
- Fehlende Idempotenz. Stripe kann Events doppelt zustellen. Die Event-ID (
evt_…) sollte als eindeutiger Schlüssel dienen. - HTTP statt HTTPS. Im Live-Modus akzeptiert Stripe ausschließlich HTTPS-Endpoints.
💡 Kein Bock auf eigenen Webhook-Server? Wenn du Webhooks nur brauchst, um über Kündigungen, geplatzte Zahlungen oder Disputes informiert zu werden, musst du nichts davon selbst bauen: Churnbell stellt dir eine fertige Webhook-URL, prüft jede Signatur, speichert die Historie und benachrichtigt dich per E-Mail oder Telegram — eingerichtet in 5 Minuten.
Welche Events lohnen sich für SaaS-Betreiber?
customer.subscription.deleted/updated— Kündigungen und vorgemerkte Kündigungeninvoice.payment_failed— fehlgeschlagene Zahlungencharge.dispute.created— Disputes (hier laufen Fristen!)checkout.session.completed— neue Verkäufe
Häufige Fragen
Was ist ein Stripe-Webhook?
Eine Push-Benachrichtigung von Stripe an eine URL deiner Wahl. Sobald in deinem Konto etwas passiert (Zahlung, Kündigung, Dispute …), schickt Stripe ein JSON-Event an diesen Endpoint — in Echtzeit.
Sind Stripe-Webhooks kostenlos?
Ja, Webhooks sind in jedem Stripe-Konto enthalten und kosten nichts. Kosten entstehen nur für die Infrastruktur, die die Events empfängt.
Warum muss ich die Webhook-Signatur prüfen?
Ohne Prüfung könnte jeder, der deine Webhook-URL kennt, gefälschte Events schicken. Die Signatur (Header Stripe-Signature, HMAC-SHA256 mit deinem whsec_-Secret) beweist, dass das Event wirklich von Stripe stammt.
Was passiert, wenn mein Endpoint nicht erreichbar ist?
Stripe wiederholt die Zustellung mit wachsenden Abständen bis zu 3 Tage lang. Schlägt sie dauerhaft fehl, deaktiviert Stripe den Endpoint und informiert dich per E-Mail.