Stripe-Zahlungsalarme: angerufen werden, wenn Geld auf dem Spiel steht

Leite Stripe-Webhooks mit der passenden Dringlichkeit aufs Telefon — ein leiser Hinweis bei erfolgreicher Zahlung, ein Anruf bei einer Rückbuchung mit Frist.

Aktualisiert

Inhaltsverzeichnis

Stripe schickt dir E-Mails über alles und über nichts. Eine erfolgreiche Zahlung, eine fehlgeschlagene Abo-Verlängerung und eine Rückbuchung landen als dieselbe Art Nachricht im selben Postfach, und bis du sie liest, ist der Unterschied zwischen ihnen längst verloren.

Die Lösung sind nicht mehr Benachrichtigungen. Es geht darum, jedem Stripe-Ereignis die Dringlichkeit zu geben, die es wirklich verdient: ein leiser Push, wenn jemand zahlt, ein zeitkritischer Alarm, wenn eine Verlängerung scheitert, und ein Anruf, wenn eine Rückbuchung mit Antwortfrist hereinkommt.

Welche Stripe-Ereignisse dich wirklich brauchen

Nicht jedes Ereignis ist eine Benachrichtigung wert, und die, die es sind, sind nicht gleich dringend.

Stripe-EreignisWarum es zähltDringlichkeit
payment_intent.succeededJemand hat gezahlt. Gut zu wissen, nie dringend.Normal
invoice.payment_failedEine Verlängerung ist gescheitert. Es bleibt ein Wiederholungsfenster, bevor das Abo ausläuft.Zeitkritisch
charge.dispute.createdEine Rückbuchung. Stripe nennt eine vom Kartennetzwerk gesetzte Antwortfrist, und wer sie verpasst, verliert den Fall automatisch.Anruf
payment_intent.payment_failedEine Einzelzahlung ist gescheitert. In Summe nützlich, einzeln laut.Normal, oder gar nicht

Nur die Rückbuchung rechtfertigt einen Anruf. Alles andere kann warten, bis du selbst zum Telefon greifst; eine Rückbuchung, die du eine Woche später bemerkst, ist Geld, das du ohnehin nicht behalten hättest.

Schritt 1 — Ein Kanal je Dringlichkeitsstufe

Lege drei Kanäle in Echobell an, denn Dringlichkeit ist eine Kanaleinstellung:

  • Stripe · Umsatz — normale Mitteilungen für erfolgreiche Zahlungen
  • Stripe · Zahlung fehlgeschlagen — zeitkritisch
  • Stripe · Rückbuchung — Anruf

Kopiere aus den Einstellungen jedes Kanals die Webhook-URL. Stripe wird auf alle drei zeigen.

Schalte gleich bei jedem Nur POST ein. Stripe sendet immer per POST, und das verhindert, dass eine Linkvorschau oder die Autovervollständigung der Adressleiste deinen Kanal aus Versehen auslöst.

Schritt 2 — Endpunkte in Stripe anlegen

Gehe im Stripe-Dashboard auf Developers → Webhooks → Add endpoint, füge die Kanal-URL ein und wähle nur die Ereignisse aus, die dieser Kanal behandeln soll.

Lege einen Endpunkt pro Kanal an statt einen für alles. Stripe lässt dich Ereignisse je Endpunkt wählen, das Routing passiert also auf Stripes Seite und deine Kanäle bleiben einfach.

Wenn du lieber einen einzigen Endpunkt willst, richte ihn auf einen Kanal und filtere mit einer Bedingung:

type == "charge.dispute.created"

Bedingungen werden ohne die geschweiften Klammern {{ }} geschrieben, die Vorlagen verwenden.

Schritt 3 — Den Payload lesbar machen

Stripe sendet einen JSON-Body dieser Form:

{
  "type": "charge.dispute.created",
  "data": {
    "object": {
      "amount": 4900,
      "currency": "usd",
      "reason": "fraudulent",
      "status": "warning_needs_response"
    }
  }
}

Die Kanalvorlagen greifen also in data.object hinein:

Titel

Rückbuchung: {{data.object.reason}}

Text

{{data.object.amount}} {{data.object.currency}} zurückgebucht
Status: {{data.object.status}}

Eine Stolperfalle, in die alle tappen: Stripe-Beträge stehen in der kleinsten Währungseinheit. 4900 sind 49,00 $, nicht 4.900 $. Echobell-Vorlagen setzen den Wert unverändert ein, also teile entweder vor dem Senden, oder schreibe die Währung dahinter und lies es als Cent. Wenn die Zahl auf den ersten Blick stimmen muss, gehört die Division in das, was zwischen Stripe und Echobell steht — ein Worker, eine Automatisierung, dein eigener Endpunkt.

Für den Umsatzkanal dieselbe Idee mit weniger Worten:

Titel

+{{data.object.amount}} {{data.object.currency}}

Text

{{data.object.description}}

Schritt 4 — Testen, ohne auf eine echte Zahlung zu warten

Die Stripe-CLI kann echte Ereignis-Payloads an deinen Endpunkt schicken:

stripe trigger payment_intent.succeeded
stripe trigger charge.dispute.created

Mach das, bevor du dich darauf verlässt. Es ist auch der schnellste Weg zu sehen, was deine Vorlage rendert, wenn ein Feld, das du für gesetzt hieltst, als null ankommt.

Was dieses Setup nicht leistet

Zwei Grenzen, die du kennen solltest, bevor du es vor deinen Umsatz stellst.

Echobell prüft Stripes Signatur nicht. Stripe signiert jeden Webhook mit einem Stripe-Signature-Header, und die Prüfung braucht das Endpunkt-Secret. Echobells Webhook-Endpunkt macht diese Prüfung nicht, die Kanal-URL ist also das Einzige, was den Kanal schützt. Behandle sie als Geheimnis, lass Nur POST aktiviert, und füge sie weder in ein öffentliches Repository noch in einen Screenshot ein.

Eine schwache Plausibilitätsprüfung geht per Bedingung:

header["stripe-signature"] != ""

Das bestätigt, dass etwas eine Stripe-förmige Anfrage schickt. Es bestätigt nicht, dass es Stripe war. Wenn eine gefälschte Mitteilung echten Schaden anrichten würde — und nicht nur einen Moment der Verwirrung — setze deinen eigenen Endpunkt davor, prüfe dort die Signatur und lass ihn Echobell aufrufen.

Das ist ein Alarmweg, kein Kontobuch. Stripe wiederholt fehlgeschlagene Webhook-Zustellungen, aber Benachrichtigungen sind kein Nachweis dessen, was passiert ist. Gleiche gegen Stripe ab, nicht gegen deinen Benachrichtigungsverlauf.

Häufige Fragen

Kann Stripe mich direkt anrufen?

Nein. Stripe verschickt E-Mails und Webhooks. Ein Anruf bedeutet, einen Webhook an etwas zu routen, das einen Anruf auslösen kann.

Weckt mich ein Rückbuchungsalarm wirklich?

Wenn der Kanal auf Anruf steht, ja — er kommt als eingehender Anruf und klingelt durch Fokus und „Nicht stören". Siehe den iOS-Fokus für kritische Alarme durchbrechen.

Kann mein Mitgründer dieselben Alarme bekommen?

Ja. Teile den Kanal, und jeder Abonnent wählt seinen eigenen Mitteilungstyp. Du kannst die Anrufe übernehmen, während jemand anderes für dasselbe Ereignis nur einen leisen Push bekommt.

Und der Testmodus?

Stripe-Ereignisse im Testmodus gehen an Endpunkte, die im Testmodus registriert sind. Registriere die Kanal-URL in beiden, wenn du Testverkehr sehen willst — oder zunächst nur im Testmodus, bis du dem Setup traust.

Fazit

Drei Kanäle, drei Endpunkte, je eine Vorlage. Der Punkt ist nicht, dass du über Stripe informiert wirst — das warst du schon. Der Punkt ist, dass eine Rückbuchung aufhört, exakt wie eine Quittung auszusehen.

Lade Echobell für iPhone oder hole es bei Google Play, führe dann einmal stripe trigger charge.dispute.created aus und lass dein Telefon absichtlich klingeln.


Verwandte Inhalte