Abo-Abrechnung fuer SaaS: wie Stripe und Subscriptions funktionieren
Wenn du eine SaaS baust, ist die Abrechnung selten das spannende Thema - aber sie entscheidet, ob am Ende Geld auf deinem Konto landet. Die gute Nachricht: Du musst kein eigenes Zahlungssystem bauen. Stripe uebernimmt die heikelsten Teile (Kreditkartendaten, wiederkehrende Abbuchungen, Sicherheit) und du baust nur die Bruecke zwischen deinem Produkt und Stripe. In diesem Artikel erklaeren wir, wie das technisch und organisatorisch wirklich funktioniert - ohne Marketing-Geraede.
Die Grundbausteine: Produkt, Preis, Subscription
Stripe denkt in drei Ebenen, die du einmal verstehen solltest, dann ergibt der Rest sich von selbst:
- Product - dein abstraktes Angebot, etwa Pro-Plan oder Team-Plan.
- Price - ein konkreter Preis fuer ein Product, zum Beispiel 29 EUR pro Monat oder 290 EUR pro Jahr. Ein Product kann mehrere Prices haben (monatlich, jaehrlich, verschiedene Waehrungen).
- Subscription - die laufende Verbindung zwischen einem Kunden und einem Price. Sie sorgt dafuer, dass automatisch jeden Monat oder jedes Jahr abgebucht wird.
Dazu kommt der Customer: das Stripe-Objekt, das einen deiner Nutzer repraesentiert und an dem Zahlungsmethode und Subscriptions haengen. Die wichtigste Regel von Anfang an: Speichere die Stripe-Customer-ID in deiner eigenen Datenbank am Nutzer-Datensatz. Dann kannst du jederzeit Stripe und dein System sauber zuordnen.
So laeuft eine Abo-Buchung ab
Der heute uebliche und sicherste Weg ist Stripe Checkout - eine von Stripe gehostete Bezahlseite. Der Ablauf:
- Dein Nutzer klickt im Tarif auf Buchen. Dein Server erstellt eine Checkout-Session mit der passenden Price-ID.
- Der Nutzer wird zu Stripe weitergeleitet, gibt dort seine Kartendaten ein und schliesst ab. Sensible Daten beruehren deinen Server nie - das spart dir die strengsten Teile der PCI-Compliance.
- Stripe leitet zurueck auf deine Erfolgsseite und legt im Hintergrund Customer und Subscription an.
Wichtig zu verstehen: Die Rueckleitung auf deine Erfolgsseite ist kein verlaesslicher Beleg dafuer, dass bezahlt wurde. Der Nutzer koennte den Tab schliessen. Der echte Wahrheitsbeweis kommt ueber Webhooks.
Webhooks: das Herzstueck, das viele unterschaetzen
Ein Webhook ist eine Nachricht, die Stripe aktiv an deinen Server schickt, sobald etwas passiert - Zahlung erfolgreich, Zahlung fehlgeschlagen, Abo gekuendigt. Dein Server hoert an einem festen Endpunkt zu und reagiert. Das ist der einzige zuverlaessige Weg, deine Datenbank mit der Realitaet bei Stripe synchron zu halten.
Die Ereignisse, auf die es bei einer SaaS praktisch immer ankommt:
- checkout.session.completed - der Nutzer hat erfolgreich gebucht, schalte den Zugang frei.
- invoice.paid - die wiederkehrende Zahlung im naechsten Monat hat geklappt.
- invoice.payment_failed - die Karte wurde abgelehnt, du solltest den Nutzer informieren und ggf. den Zugang einschraenken.
- customer.subscription.deleted - das Abo wurde beendet, entziehe den Zugang.
Zwei Dinge musst du dabei richtig machen: Erstens die Signatur jedes Webhooks pruefen, damit niemand dir gefaelschte Ereignisse unterschiebt. Zweitens deinen Handler idempotent bauen - Stripe kann dasselbe Ereignis mehrfach senden, und du darfst einen Nutzer deswegen nicht doppelt freischalten oder abrechnen.
Testphasen, Kuendigung und Plan-Wechsel
Subscriptions koennen eine Trial-Periode haben - etwa sieben Tage kostenlos, danach wird automatisch abgebucht. Stripe verwaltet das Datum fuer dich. Eine Kuendigung setzt du in der Regel auf cancel_at_period_end: Der Nutzer behaelt den Zugang bis zum Ende des bezahlten Zeitraums, dann laeuft das Abo aus. Ein Upgrade oder Downgrade innerhalb des Zeitraums rechnet Stripe per Proration anteilig ab, sodass niemand zu viel oder zu wenig zahlt.
Steuern, Rechnungen und der EU-Kontext
Fuer den deutschsprachigen Raum sind zwei Punkte zentral. Erstens die Umsatzsteuer: Verkaufst du an Verbraucher in der EU, gelten die Steuersaetze des Kundenlands. Stripe Tax kann das automatisch berechnen und aufschlagen. Zweitens die Starke Kundenauthentifizierung (SCA): In der EU muessen viele Kartenzahlungen per 3-D-Secure bestaetigt werden. Stripe Checkout erledigt das automatisch - ein guter Grund, nicht selbst eine Bezahlmaske zu bauen. Rechnungen erzeugt Stripe ebenfalls; ob sie deinen formalen Anforderungen genuegen, solltest du mit deiner Steuerberatung kurz abgleichen.
Was wir aus der Praxis gelernt haben
Wir betreiben sieben eigene Marken in Produktion, mehrere davon mit Abo- oder Bezahlmodellen ueber Stripe. Die wiederkehrenden Stolpersteine sind selten die Anbindung selbst, sondern die Edge-Cases: fehlgeschlagene Folgezahlungen, doppelt verarbeitete Webhooks, Nutzer die im Stripe-Dashboard gekuendigt werden aber in deiner DB noch aktiv stehen. Ein ehrlicher Rat: Fang einfach an. Ein einziger Plan, monatliche Abrechnung, Checkout und drei sauber behandelte Webhook-Ereignisse reichen fuer den Start vollkommen. Komplexe Mengen-Tarife, Gutscheine und nutzungsbasierte Abrechnung kannst du spaeter ergaenzen, wenn echte Kunden danach fragen - nicht vorher.