Die Herausforderung
Ein B2B-SaaS-Unternehmen, das von Nordamerika nach APAC und EMEA expandierte, brauchte eine Zahlungsinfrastruktur, die in fünf Währungen einziehen, Abonnement-Abrechnung betreiben, Wiederholungsversuche sauber handhaben und eine Sicherheitsprüfung bestehen konnte. Es war aus einem Setup mit nur einem Zahlungsdienstleister herausgewachsen – FX-Margen fraßen 1,8 % des Umsatzes, die Abwicklung dauerte mehrere Tage, und der bestehende Webhook-Handler verlor unter Last Ereignisse. Der CFO wollte Airwallex für FX und globale Zahlungsschienen; der CTO wollte den bestehenden FastAPI-Stack behalten und Zahlungen nicht zu einem separaten Service machen, den das Team nicht betreiben könnte.
Die Aufgabe: eine produktive Airwallex-Integration auf FastAPI + PostgreSQL innerhalb eines Quartals ausliefern, mit kugelsicherer Webhook-Zuverlässigkeit, einer echten Abonnement-Zustandsmaschine, PCI-DSS-konformer Architektur und einem sauberen Betriebskonzept, damit der Bereitschaftsingenieur um 2 Uhr nachts nicht den CTO anrufen muss.
Unsere Lösung
Wir haben eine fokussierte Airwallex-Integration um drei Engineering-Ideen herum gebaut: ein typisiertes Zahlungs-Domänenmodell, eine Webhook-Pipeline nach dem Outbox-Muster und eine Zustandsmaschine für den Abonnement-Lebenszyklus, die der Rest der App lesen, aber nur der Zahlungscode schreiben kann.
Auf der API-Seite werden alle Kartendaten mit den gehosteten Zahlungselementen von Airwallex erfasst, sodass das Anwendungs-Backend nie eine PAN berührt – der PCI-Umfang bleibt bei SAQ A. Der FastAPI-Service stellt eine kleine, typisierte Zahlungs-API bereit (Pydantic-v2-Modelle, OpenAPI-dokumentiert), die das Produktteam nutzt; Airwallex-API-Aufrufe sind in einem einzigen Client mit Idempotenzschlüsseln, exponentiellen Wiederholungen und Circuit Breaking gekapselt.
Auf der Webhook-Seite landet jedes Airwallex-Ereignis in einem signierten und verifizierten Endpunkt, der nur eines tut: das Roh-Ereignis in einer einzigen Transaktion in einer `inbox`-Tabelle zu speichern. Ein separater Worker verarbeitet die Inbox in Reihenfolge, mit At-least-once-Zustellung und idempotenten Handlern. Allein dieses Muster hat das Problem verlorener Ereignisse vollständig behoben – selbst bei einem vierfachen Traffic-Spitzenwert zum Launch.
Die Abonnement-Zustandsmaschine behandelt Testphase, aktiv, überfällig, Mahnwesen, pausiert, gekündigt und reaktiviert, mit explizit erlaubten Übergängen und einem Audit-Log bei jeder Zustandsänderung. Fehlgeschlagene Zahlungen durchlaufen nun einen intelligenten Wiederholungsplan (nicht das standardmäßige exponentielle Backoff), abgestimmt auf die Abrechnungstag-Muster der Kunden – das hat den Rückgang des Churns durch fehlgeschlagene Zahlungen um 65 % bewirkt.
- Gehostete Airwallex-Zahlungselemente – das Anwendungs-Backend berührt nie eine PAN (PCI SAQ A)
- Typisierte FastAPI-Zahlungs-API mit Pydantic-v2-Domänenmodell und OpenAPI-Vertrag
- Idempotenter Airwallex-Client mit Idempotenzschlüsseln, exponentiellem Retry und Circuit Breaker
- Webhook-Pipeline nach dem Inbox-Muster – signierte Verifizierung, gespeichertes Roh-Ereignis, geordnete Worker-Abarbeitung
- Abonnement-Zustandsmaschine: Testphase, aktiv, überfällig, Mahnwesen, pausiert, gekündigt, reaktiviert
- Intelligenter Mahnplan, abgestimmt auf die Abrechnungstag-Muster der Kunden (kein naives Backoff)
- Mehrwährungsunterstützung: USD, CAD, GBP, EUR, AUD zum Launch live – weitere in wenigen Tagen ergänzt
- Datadog-Dashboards für Webhook-Verzögerung, Retry-Rate, Mahn-Funnel und FX-Exposition
- Echtes Bereitschafts-Playbook für Airwallex-Ausfälle, Webhook-Rückstau und Ereignisse mit ungültiger Signatur