Ratgeber

So fügst du Abos mit Stripe hinzu: Tarife, Testphasen, Webhooks und fehlgeschlagene Zahlungen

Um Abos mit Stripe hinzuzufügen, erstellst du im Stripe-Dashboard ein Produkt mit einem wiederkehrenden Preis, schickst Kunden von deinem Server aus in Stripe Checkout im Abo-Modus, und ein Webhook meldet deiner App, wann jede Zahlung gelingt, fehlschlägt, sich ändert oder endet. Speichere den Abo-Status beim Nutzer und gewähre den Zugang auf dieser Grundlage, nicht über die Erfolgsseite. Ergänze einen Button Abrechnung verwalten, der das gehostete Kundenportal von Stripe öffnet, damit Menschen Karten wechseln, Tarife ändern und kündigen können, ohne dass du diese Oberflächen baust.

Dieser Leitfaden baut auf wie du Zahlungen in deine App einbaust auf, das einmaliges Checkout, Testmodus und Livegang behandelt. Hier geht es um das, was bei wiederkehrender Abrechnung anders ist. Die Angaben zu Stripe stammen aus der Dokumentation von Stripe, Stand September 2026.

Warum Abos schwieriger sind als einmalige Zahlungen

Eine einmalige Zahlung passiert, während der Kunde in deiner App ist. Ein Abo läuft weiter, nachdem er gegangen ist: monatliche Verlängerungen, ablaufende Karten, Upgrades mitten im Zeitraum, Kündigungen, die zum Periodenende wirksam werden. Deine App erfährt davon nur über Webhooks. Die meisten Fehler bei Abos entstehen, weil man die erste Zahlung für die ganze Geschichte hält.

Deine Optionen

AnsatzWas du baustGeeignet für
Zahlungslink mit wiederkehrendem PreisNur einen LinkNachfrage testen; Zugang von Hand verwalten
Checkout (Abo-Modus) + KundenportalEine Server-Route, einen Webhook, einen Abrechnungs-ButtonDie meisten SaaS-Apps und Mitgliedschaften
Abo-API mit eigenem ZahlungsformularViel mehr: Zahlungsoberfläche, Authentifizierung, WiederholungenApps mit ungewöhnlichen Abrechnungsabläufen
Merchant-of-Record-AnbieterÄhnlich wie CheckoutVerkäufer, die die Umsatzsteuer vom Anbieter erledigen lassen wollen

Für die meisten Apps ist Checkout plus Portal der richtige Kompromiss. Vergleiche Anbieter in Stripe vs. Paddle vs. Lemon Squeezy, wenn dir die Steuerabwicklung Sorgen macht.

Plane deine Preise zuerst in Stripe

In Stripe ist ein Produkt das, was du verkaufst („Pro-Tarif“), und ein Preis ist die Art, wie du es berechnest („20 € pro Monat“, „200 € pro Jahr“). Ein Produkt kann mehrere Preise haben. Kläre:

  • Welche Stufen du anbietest und was jede in deiner App freischaltet
  • Monatlich, jährlich oder beides
  • Ob du eine Testphase anbietest und ob dafür eine Karte nötig ist

Lege die Produkte und Preise im Testmodus an und behalte die Preis-IDs; deine App verweist darauf. Wenn du die Preise noch nicht festgelegt hast, lies wie du ein SaaS-Produkt preist und Freemium vs. kostenlose Testphase.

Der Lebenszyklus eines Abos, den du behandeln musst

Die Übersicht über Abos bei Stripe listet die Status auf, die ein Abo haben kann. Für den Zugang sind diese am wichtigsten:

StatusBedeutungZugang gewähren?
trialingIn der TestphaseJa
activeIn gutem StandJa
incompleteErste Zahlung noch nicht abgeschlossen; Stripe gibt dem Kunden 23 StundenNein
incomplete_expiredErste Zahlung ist nie gelungenNein
past_dueLetzte Zahlung ist fehlgeschlagen oder wurde nicht versucht; Wiederholungen können folgenDeine Entscheidung; viele Apps erlauben eine kurze Schonfrist
unpaidWiederholungen sind abgeschlossen, Rechnungen bleiben offen, keine weiteren VersucheNein; laut Stripe-Dokumentation sollte der Zugang entzogen werden
canceledBeendet; kann nicht neu gestartet werdenNein
pausedEine Testphase endete ohne Zahlungsmethode und wurde pausiertNein

Speichere den Status bei deinem Nutzer oder Konto und stütze den Zugang darauf. Aktualisiere ihn jedes Mal, wenn ein relevanter Webhook eintrifft.

Die Webhook-Ereignisse, die du behandeln musst

EreignisWas deine App tut
checkout.session.completedVerknüpft die neue Stripe-Kunden- und Abo-ID mit deinem Nutzer
invoice.paidMarkiert das Abo als aktiv und speichert das neue Periodenende
invoice.payment_failedTeilt dem Nutzer mit, dass seine Karte abgelehnt wurde, und verlinkt das Portal
invoice.payment_action_requiredBittet den Nutzer, die Kartenauthentifizierung abzuschließen
customer.subscription.updatedAktualisiert Tarif, Status und eine geplante Kündigung
customer.subscription.deletedEntfernt den bezahlten Zugang
customer.subscription.trial_will_endErinnert den Nutzer vor Ende der Testphase; Stripe sendet das drei Tage vorher

Die Regeln für Handler aus der Webhook-Dokumentation von Stripe gelten weiterhin: Signatur mit dem rohen Körper prüfen, schnell mit 2xx antworten, doppelte und verspätete Ereignisse behandeln und mit Wiederholungen rechnen. Die Anleitung was ist ein Webhook erklärt die Idee, und der Zahlungs-Leitfaden listet die Regeln im Detail.

Schritt für Schritt

  1. Lege Produkte und Preise im Stripe-Testmodus an.
  2. Füge Geheimnisse hinzu: den geheimen Schlüssel, die Preis-IDs und später das Signaturgeheimnis des Webhooks. Niemals in Frontend-Code.
  3. Preisseite: Der Button jedes Tarifs ruft deinen Server auf, der eine Checkout-Sitzung im Abo-Modus für den angemeldeten Nutzer erstellt. Übergib deine Nutzer-ID, damit der Webhook die Zahlung dem Konto zuordnen kann.
  4. Webhook-Endpunkt: Signaturen prüfen und die oben genannten Ereignisse verarbeiten, dabei pro Nutzer einen Abo-Datensatz aktualisieren.
  5. Funktionen absichern anhand des gespeicherten Status und Tarifs, auf dem Server für jede geschützte Aktion, nicht nur über ausgeblendete Buttons.
  6. Kundenportal: Konfiguriere es im Stripe-Dashboard (welche Tarife Kunden wechseln können, ob sie kündigen dürfen) und ergänze einen Button Abrechnung verwalten, der auf dem Server eine Portal-Sitzung erstellt und dorthin weiterleitet.
  7. Fehlgeschlagene Zahlungen: Wähle in den Abrechnungseinstellungen von Stripe das Wiederholungsverhalten und was nach dem letzten Versuch passiert. Zeige ein Banner in der App, solange der Status past_due ist.
  8. Teste den ganzen Lebenszyklus, dann veröffentliche und registriere den Live-Webhook.

Prompts für deinen KI-App-Baukasten

Füge Abrechnung mit Abos über Stripe hinzu. Tarife: Starter (Preis-ID in STRIPE_PRICE_STARTER) und Pro (STRIPE_PRICE_PRO). Die Preisseite erstellt auf dem Server eine Checkout-Sitzung im Abo-Modus mit STRIPE_SECRET_KEY, mit der ID des angemeldeten Nutzers. Speichere beim Nutzer die Stripe-Kunden-ID, die Abo-ID, den Tarif und den Status. Gib den geheimen Schlüssel niemals an den Browser weiter.

Füge POST /api/stripe/webhook hinzu. Prüfe die Signatur mit STRIPE_WEBHOOK_SECRET anhand des rohen Anfragekörpers. Verarbeite checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted und customer.subscription.trial_will_end. Speichere verarbeitete Ereignis-IDs, damit Duplikate ignoriert werden. Aktualisiere den Status des Nutzers aus dem Abo-Objekt, nicht aus der Reihenfolge, in der Ereignisse eintreffen.

Schalte Pro-Funktionen auf dem Server frei: nur wenn der Status active oder trialing ist und der Tarif Pro ist. Zeige ein Banner „Zahlung fehlgeschlagen, bitte Karte aktualisieren“, wenn der Status past_due ist. Füge einen Button Abrechnung verwalten hinzu, der das Stripe-Kundenportal für diesen Nutzer öffnet.

Upgrades, Downgrades und Verrechnung

Wenn ein Kunde den Tarif wechselt, entsteht laut der Dokumentation von Stripe oft eine Verrechnung (Proration): Der neue Preis gilt anteilig für den Rest des laufenden Abrechnungszeitraums. Du kannst Verrechnungen vorab ansehen oder ausschalten. Haben die Tarife dasselbe Intervall, bleiben die Abrechnungstermine gleich; wer von monatlich auf jährlich wechselt, bekommt den Abrechnungstermin auf den Tag des Wechsels verschoben. Wenn Kunden Tarife im Portal wechseln, sparst du dir diese Logik, aber lege in den Portaleinstellungen fest, welche Wechsel erlaubt sind.

Testcheckliste

Nutze den Stripe-Testmodus und Testkarten und durchlaufe jeden Zustand:

  • Ein neues Abo gewährt den richtigen Tarif dem richtigen Nutzer
  • Wer direkt nach der Zahlung den Tab schließt, erhält trotzdem Zugang (das beweist, dass der Webhook funktioniert)
  • Eine abgelehnte Karte bei der Anmeldung gewährt nichts
  • Eine fehlgeschlagene Verlängerung setzt das Konto auf past_due und zeigt das Banner
  • Die Aktualisierung der Karte im Portal stellt den Status active wieder her
  • Upgrades und Downgrades ändern die Funktionen korrekt
  • Eine Kündigung zum Periodenende lässt den Zugang bis zum Enddatum bestehen und entfernt ihn danach
  • Nutzer in der Testphase erhalten Zugang und die Erinnerung und werden korrekt umgewandelt oder verlieren den Zugang
  • Dasselbe Webhook-Ereignis zweimal zu senden, ändert nichts

Mit den Testuhren von Stripe kannst du das Vergehen von Zeit simulieren und Verlängerungen testen, ohne einen Monat zu warten. Lies in der aktuellen Testdokumentation von Stripe nach, wie du sie nutzt.

Häufige Fehler

  • Zugang auf der Erfolgsseite gewähren. Kunden können zahlen und die Seite nie erreichen. Nutze den Webhook.
  • Nur die erste Zahlung behandeln. Verlängerungen, Fehlschläge und Kündigungen kommen später, als Ereignisse.
  • Den Tarifstatus nur im Frontend prüfen. Jeder kann deine API direkt aufrufen.
  • Versehentlich mehrere Abos pro Nutzer. Prüfe, ob bereits ein Abo besteht, bevor du eine neue Checkout-Sitzung erstellst, oder schicke bestehende Kunden stattdessen ins Portal.
  • Zugang beim ersten fehlgeschlagenen Verlängerungsversuch entziehen. Karten scheitern aus banalen Gründen. Eine kurze Schonfrist mit klarem Banner hält Kunden.
  • Den Live-Webhook vergessen. Test- und Live-Endpunkte haben unterschiedliche Signaturgeheimnisse.
  • Steuern und Erstattungen ignorieren. Lege deine Erstattungsrichtlinie fest und kläre deine steuerlichen Pflichten vor dem Start mit einer Steuerberaterin oder einem Steuerberater.

Abos in Mythex

Apps, die du auf Mythex baust, nutzen dein eigenes Stripe-Konto und deine eigenen Schlüssel; es gibt keine Ein-Klick-Verbindung zu Stripe für deine App. Hinterlege deine Testschlüssel und Preis-IDs als Projektgeheimnisse, nutze Prompts wie die oben und teste mit Stripe-Testkarten in der Vorschau. Webhooks brauchen die öffentliche URL deiner App, deshalb veröffentlichst du, bevor du den Endpunkt in Stripe registrierst, und veröffentlichst erneut, nachdem du auf Live-Schlüssel umgestellt hast, damit die Live-App sie übernimmt. Siehe Zahlungen mit Stripe annehmen und Webhooks in deinem Backend verarbeiten. Für den weiteren Rahmen behandelt wie du ein SaaS-MVP baust, was rund um die Abrechnung zu bauen ist.

Fragen

Was ist der einfachste Weg, Abos mit Stripe hinzuzufügen?

Lege im Stripe-Dashboard ein Produkt mit einem wiederkehrenden Preis an, schicke Kunden in Stripe Checkout im Abo-Modus, verarbeite Abo-Ereignisse über einen Webhook und verknüpfe einen Button „Abrechnung verwalten“ mit dem gehosteten Kundenportal von Stripe. So musst du weder Kartenformulare noch Oberflächen zum Tarifwechsel selbst bauen.

Welche Stripe-Webhook-Ereignisse brauche ich für Abos?

Mindestens checkout.session.completed, um das neue Abo mit deinem Nutzer zu verknüpfen, invoice.paid zur Bestätigung jeder erfolgreichen Zahlung, invoice.payment_failed, um vor fehlgeschlagenen Verlängerungen zu warnen, und customer.subscription.updated sowie customer.subscription.deleted, um Tarifwechsel und Kündigungen nachzuverfolgen.

Was passiert, wenn eine Abozahlung fehlschlägt?

Laut der Dokumentation von Stripe, Stand September 2026, wechselt das Abo meist in den Status past_due, und Stripe kann die Zahlung je nach deinen Einstellungen erneut versuchen. Nach dem letzten Versuch entscheiden deine Dashboard-Einstellungen, ob das Abo gekündigt, als unbezahlt markiert oder im Status past_due belassen wird.

Kann ich eine kostenlose Testphase ohne Kartenangabe anbieten?

Ja. Stripe unterstützt kostenlose Testphasen, und laut seiner Dokumentation gibt es einen Status paused für Testphasen, die ohne Zahlungsmethode enden, wenn du das so einstellst. Eine Karte vorab abzufragen führt meist zu weniger Anmeldungen, aber zu mehr zahlenden Kunden. Teste, was zu deinem Produkt passt.

Mythex · Pricing · Alles mit KI bauen · Vorlagen für Websites und Apps · Mythex im Vergleich · Glossar zum App-Bau mit KI · Kostenlose Tools für den App-Bau mit KI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)