Voraussetzungen
Bevor Sie beginnen, benötigen Sie:- Ein Händlerkonto bei Dodo Payments
- Einen API-Schlüssel aus Developer → API Keys im Dashboard, gespeichert in
DODO_PAYMENTS_API_KEY - Ein Webhook-Secret aus Developer → Webhooks, gespeichert in
DODO_PAYMENTS_WEBHOOK_KEY - Mindestens ein unter Products erstelltes Abonnementprodukt
API-Integration
Checkout Sessions
Erstellen Sie ein Abonnement, indem Sie eine Checkout Session mit Ihrem Abonnementprodukt erstellen. Der Kunde autorisiert eine Zahlungsmethode, und das Abonnement wird aktiviert, sobald er den Checkout abschließt.- Node.js SDK
- Python SDK
- REST API
API Response
Die Response enthält eincheckout_url:
Webhooks
Webhooks benachrichtigen deinen Server, wenn Subscription-Ereignisse auftreten. Richte deinen Endpoint im Dashboard unter Developer → Webhooks ein. Informationen zum Einrichten deines Webhook-Endpoints findest du unter Webhooks.Subscription Event Types
Verfolge diese Ereignisse, um den Subscription-Lifecycle zu verwalten:subscription.active— Subscription ist aktiviertsubscription.updated— Ein Feld der Subscription wurde geändertsubscription.on_hold— Eine Zahlung für eine Verlängerung oder Planänderung ist fehlgeschlagensubscription.failed— Subscription-Erstellung ist fehlgeschlagen (endgültig; der Kunde muss sich erneut anmelden)subscription.renewed— Eine wiederkehrende Zahlung war erfolgreichsubscription.past_due— Eine Verlängerung ist fehlgeschlagen und die Kulanzfrist wurde gestartet; der Kunde behält den Zugriff bispast_due_ends_atsubscription.plan_changed— Der Plan wurde hoch- oder herabgestuft oder geändertsubscription.cancelled— Die Subscription wurde gekündigtsubscription.expired— Die Subscription hat das Ende ihrer Laufzeit erreicht
paused, unpaused und update_payment_method, findest du unter Subscription Webhooks.
Zahlungsszenarien
Erfolgreicher Zahlungsverlauf Die Reihenfolge der Webhooks hängt davon ab, ob die Subscription eine Testphase hat. Sofortige Abrechnung (0 Testtage):subscription.active: Das Mandat wird autorisiert und die Subscription aktiviert.payment.succeeded: Bestätigt die erste Zahlung. Du solltest dieses Ereignis innerhalb von 2–10 Minuten nach dem Checkout erhalten.
- Zu Beginn der Testphase (Checkout):
subscription.activewird ausgelöst, sobald die Zahlungsmethode autorisiert wurde. Es wird noch keine wiederkehrende Zahlung eingezogen. Die erste tatsächliche Zahlung wird bis zum Ende der Testphase aufgeschoben. - Am Ende der Testphase: Der wiederkehrende Betrag wird eingezogen, und du erhältst
payment.succeededzusammen mitsubscription.renewed.
subscription.renewed: Wird bei jedem Abrechnungszyklus ausgelöst, wenn die Zahlung für die Verlängerung eingezogen wird, immer zusammen mitpayment.succeeded. Das Ereignis enthält außerdemnext_billing_datein aktualisierter Form.
Immer wenn Geld für ein Subscription-Produkt tatsächlich eingezogen wird, erhältst du
subscription.renewed und payment.succeeded. Verwende subscription.renewed (nicht allein payment.succeeded) als Signal, um den Zugriff für den nächsten Zyklus zu verlängern.- Fehler bei der Subscription
subscription.failed- Die Subscription-Erstellung ist fehlgeschlagen, weil kein Mandat erstellt werden konnte.payment.failed- Zeigt eine fehlgeschlagene Zahlung an.
- Subscription pausiert
subscription.on_hold- Die Subscription wird aufgrund einer fehlgeschlagenen Zahlung für eine Verlängerung oder einer fehlgeschlagenen Zahlung für eine Planänderung pausiert. Wenn dein Unternehmen eine Kulanzfrist hat, wird eine fehlgeschlagene Verlängerung zunächst zupast_due(subscription.past_due), und erst nach Ablauf der Kulanzfrist zuon_hold(odercancelled, abhängig von deinen Einstellungen für die Kulanzfrist). Siehe Subscription States.- Wenn eine Subscription pausiert wird, verlängert sie sich nicht automatisch, bis die Zahlungsmethode aktualisiert wurde.
Best Practice: Um die Implementierung zu vereinfachen, empfehlen wir, hauptsächlich Subscription-Ereignisse zur Verwaltung des Subscription-Lifecycles zu verfolgen.
subscription.failed vs. subscription.on_hold
Diese beiden Ereignisse lassen sich leicht verwechseln, erfordern aber eine völlig unterschiedliche Behandlung:
Umgang mit pausierten Subscriptions
Wenn eine Subscription den Statuson_hold erreicht, musst du die Zahlungsmethode aktualisieren, um sie zu reaktivieren. In diesem Abschnitt wird erklärt, wann Subscriptions pausiert werden und wie du damit umgehst.
Wann Subscriptions pausiert werden
Eine Subscription wird pausiert, wenn:- Zahlung für eine Verlängerung fehlschlägt: Die automatische Zahlung für die Verlängerung schlägt aufgrund unzureichender Deckung, einer abgelaufenen Karte oder einer Ablehnung durch die Bank fehl
- Zahlung für eine Planänderung fehlschlägt: Eine sofortige Zahlung während eines Upgrades oder Downgrades schlägt fehl
- Autorisierung der Zahlungsmethode fehlschlägt: Die Zahlungsmethode kann für wiederkehrende Zahlungen nicht autorisiert werden
Reaktivieren pausierter Subscriptions
Um eine Subscription aus dem Statuson_hold zu reaktivieren, verwende die Update Payment Method API. Dadurch werden automatisch folgende Aktionen ausgeführt:
- Eine Zahlung für ausstehende Beträge wird erstellt
- Eine Rechnung für die Zahlung wird generiert
- Die Zahlung wird mit der neuen Zahlungsmethode verarbeitet
- Die Subscription wird nach erfolgreicher Zahlung in den Status
activereaktiviert
1
Handle subscription.on_hold webhook
Wenn du einen
subscription.on_hold-Webhook erhältst, aktualisiere den Status deiner Anwendung und benachrichtige den Kunden:2
Update payment method
Wenn der Kunde bereit ist, seine Zahlungsmethode zu aktualisieren, rufe die Update Payment Method API auf:
Du kannst auch eine bestehende Payment-Method-ID verwenden, wenn der Kunde Zahlungsmethoden gespeichert hat:
3
Monitor webhook events
Überwache nach der Aktualisierung der Zahlungsmethode die folgenden Webhook-Ereignisse:
payment.succeeded- Die Zahlung für ausstehende Beträge war erfolgreichsubscription.active- Die Subscription wurde reaktiviert
Beispiel für einen Subscription Event Payload
Subscription-Pläne ändern
Du kannst einen Subscription-Plan über den Change Plan API-Endpoint hoch- oder herabstufen. Dadurch kannst du das Produkt, die Menge und die Proration der Subscription ändern.Change Plan API Reference
Proration-Optionen
Beim Ändern von Subscription-Plänen stehen dir vier Optionen für die sofortige Zahlung zur Verfügung:1. prorated_immediately
- Der ungenutzte Anteil des aktuellen Abrechnungszyklus wird zeitanteilig gutgeschrieben. Die Gutschrift umfasst den Basisplan, die Menge und alle Add-ons
- Anschließend wird ein vollständiger Zyklus für den neuen Plan, die Menge und die Add-ons berechnet. Die Zahlung selbst wird niemals zeitanteilig berechnet
- Sofortige Nettobelastung = (vollständiger neuer Zyklus) minus (verbleibender Anteil x vollständiger alter Zyklus). Ist die Gutschrift höher, wird die Differenz als Subscription-spezifisches Guthaben für zukünftige Verlängerungen gespeichert
- Während einer Testphase wird der Nutzer sofort auf den neuen Plan umgestellt und der Kunde unmittelbar belastet
2. full_immediately
- Dem Kunden wird der vollständige Subscription-Betrag für den neuen Plan ohne Gutschrift für den vorherigen Zyklus berechnet
- Sowohl bei einem Upgrade als auch bei einem Downgrade zahlt der Kunde den gesamten Preis des neuen Plans von Anfang an
- Sinnvoll, wenn du unabhängig von der verbleibenden Zeit des alten Plans den vollständigen Betrag berechnen möchtest
3. difference_immediately
- Der Kunde zahlt nur die Differenz zwischen dem Preis des alten und des neuen Plans
- Der Betrag hängt nicht davon ab, wann im Zyklus die Änderung vorgenommen wird. Dasselbe Upgrade kostet an Tag 1 und an Tag 29 gleich viel
- Bei einem Upgrade wird dem Kunden die Differenz sofort berechnet. Beispiel: $30/Monat → $80/Monat = sofort berechnete $50
- Bei einem Downgrade wird die Preisdifferenz als Subscription-spezifisches Guthaben gespeichert und automatisch auf zukünftige Verlängerungen angerechnet. Beispiel: $50/Monat → $20/Monat = $30 Guthaben
4. do_not_bill
- Die Planänderung wird sofort angewendet, aber zum Zeitpunkt der Änderung nichts berechnet. Der neue Plan, die Menge und die Add-ons können sofort genutzt werden
- Da jetzt nichts berechnet wird, erhält der Kunde bei einem Upgrade den höherwertigen Plan für den Rest des aktuellen Zyklus kostenlos. Ein Downgrade tritt sofort in Kraft, ohne Gutschrift für den ungenutzten Teil des bereits bezahlten Zyklus
- Add-ons, die über
do_not_billgewährt wurden, werden bei einer späteren Planänderung nicht gutgeschrieben, da sie nie berechnet wurden. Bei einer nachfolgenden Änderung wird die neue Add-on-Menge vollständig berechnet - Der aktualisierte Plan (sowie Menge/Add-ons) wird bei der nächsten geplanten Verlängerung berechnet, und das ursprüngliche Abrechnungsdatum bleibt erhalten
Verhalten
- Beim Aufruf dieser API leitet Dodo Payments sofort eine Zahlung basierend auf der ausgewählten Proration-Option ein
- Bei
prorated_immediatelywird der ungenutzte Anteil des aktuellen Zyklus bei jeder Änderung, unabhängig von Upgrade oder Downgrade, als Gutschrift berechnet. Übersteigt diese Gutschrift die Zahlung für den neuen Zyklus, wird der Rest zum Guthaben der Subscription hinzugefügt. Diese Gutschriften gelten nur für diese Subscription und werden ausschließlich zur Verrechnung zukünftiger wiederkehrender Zahlungen derselben Subscription verwendet - Bei
difference_immediatelyentspricht der Nettobetrag immer exakt der Preisdifferenz. Bei Downgrades wird der überschüssige Betrag als Subscription-spezifisches Guthaben gespeichert, ebenso wie beiprorated_immediately - Die Option
full_immediatelyumgeht Gutschriftenberechnungen und berechnet den vollständigen Betrag des neuen Plans - Die Option
do_not_billwendet die Änderung sofort an, verschiebt die Abrechnung jedoch auf das nächste Verlängerungsdatum, das erhalten bleibt
Zahlungsabwicklung
- Die bei der Planänderung eingeleitete sofortige Zahlung wird normalerweise in weniger als 2 Minuten verarbeitet
- Wenn diese sofortige Zahlung aus irgendeinem Grund fehlschlägt, wird die Subscription automatisch pausiert, bis das Problem behoben ist
On-Demand Subscriptions
Mit On-Demand Subscriptions kannst du Kunden flexibel und nicht nur nach einem festen Zeitplan belasten. Diese Funktion ist für alle Konten verfügbar.
subscription_data.on_demand in den Request Body ein. So kannst du eine Zahlungsmethode ohne sofortige Zahlung autorisieren oder einen benutzerdefinierten Anfangspreis festlegen.
So berechnest du eine On-Demand Subscription:
Verwende für nachfolgende Zahlungen den Endpoint POST /subscriptions//charge und gib den Betrag an, der dem Kunden für diese Transaktion berechnet werden soll.
Eine vollständige Schritt-für-Schritt-Anleitung (einschließlich Request-/Response-Beispielen, sicheren Retry-Richtlinien und Webhook-Verarbeitung) findest du im On-Demand Subscriptions Guide.
Wichtige Informationen zur Subscription-Abrechnung
Bei Testphasen wird eine Autorisierung über $0 und keine Zahlung vorgenommen. Wenn eine Subscription eine Testphase hat, wird zu deren Beginn eine Mandatsautorisierung über $0 erstellt, um die Karte zu speichern; die erste tatsächliche Zahlung erfolgt am Ende der Testphase. In der Zahlungsliste wird eine Subscription in einer kostenlosen Testphase mit genau einer Zahlung mit
total_amount von 0 angezeigt. Bei einer kostenpflichtigen Testphase wird stattdessen trial_amount im Voraus berechnet.Subscription-Lifecycle:
past_due = Eine Verlängerung ist fehlgeschlagen und die Kulanzfrist läuft (der Kunde behält den Zugriff). on_hold = Eine Verlängerung ist fehlgeschlagen (wiederherstellbar: Fordere den Kunden auf, seine Zahlungsmethode zu aktualisieren; Dunning-Retries werden angewendet). expired = Die Laufzeit endete ohne Verlängerung und kann nicht reaktiviert werden. Der Kunde muss sich erneut anmelden. cancelled = Vom Kunden oder Händler beendet. Die meisten Fehler bei Verlängerungen sind Ablehnungen seitens des Kartenherausgebers (unzureichende Deckung, abgelehnte Karte), kein Dodo-Fehler.