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-Antwort
Die Antwort enthält einecheckout_url:
Webhooks
Webhooks benachrichtigen Ihren Server, wenn Abonnementereignisse auftreten. Richten Sie Ihren Endpunkt unter Developer → Webhooks im Dashboard ein. Informationen zum Einrichten Ihres Webhook-Endpunkts finden Sie unter Webhooks.Abonnementereignistypen
Verfolgen Sie diese Ereignisse, um den Lebenszyklus des Abonnements zu verwalten:subscription.active— Das Abonnement wurde aktiviertsubscription.updated— Ein Feld des Abonnements wurde geändertsubscription.on_hold— Eine Belastung für eine Verlängerung oder Planänderung ist fehlgeschlagensubscription.failed— Die Erstellung des Abonnements ist fehlgeschlagen (endgültig; der Kunde muss sich erneut abonnieren)subscription.renewed— Eine wiederkehrende Belastung 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 heruntergestuft oder geändertsubscription.cancelled— Das Abonnement wurde gekündigtsubscription.expired— Das Abonnement hat das Ende seiner Laufzeit erreicht
paused, unpaused und update_payment_method, finden Sie unter Subscription Webhooks.
Zahlungsszenarien
Erfolgreicher Zahlungsverlauf Die Reihenfolge der Webhooks hängt davon ab, ob das Abonnement eine Testphase hat. Sofortige Abrechnung (0 Testtage):subscription.active: Das Mandat wird autorisiert und das Abonnement aktiviert.payment.succeeded: Bestätigt die erste Belastung. Dieses Ereignis wird innerhalb von 2–10 Minuten nach dem Checkout erwartet.
- Zu Beginn der Testphase (Checkout):
subscription.activewird ausgelöst, sobald die Zahlungsmethode autorisiert wurde. Noch keine wiederkehrende Belastung. Die erste tatsächliche Belastung wird bis zum Ende der Testphase aufgeschoben. - Am Ende der Testphase: Der wiederkehrende Betrag wird belastet, und Sie erhalten
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ßerdem die aktualisiertenext_billing_date.
Immer wenn Geld für ein Abonnementprodukt tatsächlich eingezogen wird, erhalten Sie
subscription.renewed und payment.succeeded. Verwenden Sie subscription.renewed (statt ausschließlich payment.succeeded) als Signal, den Zugriff für den nächsten Zyklus zu verlängern.- Fehler beim Abonnement
subscription.failed– Die Erstellung des Abonnements ist fehlgeschlagen, weil kein Mandat erstellt werden konnte.payment.failed– Zeigt eine fehlgeschlagene Zahlung an.
- Abonnement pausiert
subscription.on_hold– Das Abonnement wird aufgrund einer fehlgeschlagenen Verlängerungszahlung oder einer fehlgeschlagenen Belastung für eine Planänderung pausiert. Wenn Ihr Unternehmen eine Kulanzfrist hat, wechselt eine fehlgeschlagene Verlängerung zunächst zupast_due(subscription.past_due) und erst nach Ablauf der Kulanzfrist zuon_hold(odercancelled, abhängig von Ihren Einstellungen für die Kulanzfrist). Siehe Abonnementstatus.- Wenn ein Abonnement pausiert wird, verlängert es sich nicht automatisch, bis die Zahlungsmethode aktualisiert wurde.
Best Practice: Um die Implementierung zu vereinfachen, empfehlen wir, zur Verwaltung des Lebenszyklus eines Abonnements hauptsächlich die Abonnementereignisse zu verfolgen.
subscription.failed vs. subscription.on_hold
Diese beiden Ereignisse können leicht verwechselt werden, erfordern jedoch eine sehr unterschiedliche Behandlung:
Umgang mit pausierten Abonnements
Wenn ein Abonnement in den Statuson_hold wechselt, müssen Sie die Zahlungsmethode aktualisieren, um es zu reaktivieren. In diesem Abschnitt wird erklärt, wann Abonnements pausiert werden und wie Sie damit umgehen.
Wann Abonnements pausiert werden
Ein Abonnement wird pausiert, wenn:- Eine Verlängerungszahlung fehlschlägt: Die automatische Belastung für die Verlängerung schlägt aufgrund unzureichender Deckung, einer abgelaufenen Karte oder einer Ablehnung durch die Bank fehl
- Die Belastung für eine Planänderung fehlschlägt: Eine sofortige Belastung bei einer Hoch- oder Herabstufung des Plans schlägt fehl
- Die Autorisierung der Zahlungsmethode fehlschlägt: Die Zahlungsmethode kann für wiederkehrende Belastungen nicht autorisiert werden
Abonnements aus dem pausierten Status reaktivieren
Um ein Abonnement aus dem Statuson_hold zu reaktivieren, verwenden Sie die Update Payment Method API. Dadurch wird automatisch:
- Eine Belastung für ausstehende Beträge erstellt
- Eine Rechnung für die Belastung erstellt
- Die Zahlung mit der neuen Zahlungsmethode verarbeitet
- Das Abonnement nach erfolgreicher Zahlung in den Status
activereaktiviert
1
Handle subscription.on_hold webhook
Wenn Sie einen
subscription.on_hold-Webhook erhalten, aktualisieren Sie den Status Ihrer Anwendung und benachrichtigen Sie den Kunden:2
Update payment method
Wenn der Kunde bereit ist, seine Zahlungsmethode zu aktualisieren, rufen Sie die Update Payment Method API auf:
Sie können auch eine vorhandene ID einer Zahlungsmethode verwenden, wenn der Kunde Zahlungsmethoden gespeichert hat:
3
Monitor webhook events
Überwachen Sie nach der Aktualisierung der Zahlungsmethode diese Webhook-Ereignisse:
payment.succeeded– Die Belastung für ausstehende Beträge war erfolgreichsubscription.active– Das Abonnement wurde reaktiviert
Beispiel einer Nutzlast für ein Abonnementereignis
Abonnementpläne ändern
Sie können einen Abonnementplan über den API-Endpunkt zum Ändern des Plans hoch- oder herabstufen. Dadurch können Sie das Produkt, die Menge und die Proration des Abonnements ändern.Change Plan API Reference
Ausführliche Informationen zum Ändern von Abonnementplänen finden Sie in unserer Dokumentation zur Change Plan API.
Proration-Optionen
Beim Ändern von Abonnementplänen stehen Ihnen vier Optionen für die sofortige Belastung zur Verfügung:1. prorated_immediately
- Schreibt den ungenutzten Anteil des aktuellen Abrechnungszyklus gut, anteilig nach der verbleibenden Zeit. Das Guthaben umfasst den Basisplan, die Menge und alle Add-ons
- Belastet anschließend einen vollständigen Zyklus zum neuen Plan, zur neuen Menge und zu den neuen Add-ons. Die Belastung selbst wird nie anteilig berechnet
- Netto-Sofortbelastung = (vollständiger neuer Zyklus) minus (verbleibender Anteil x vollständiger alter Zyklus). Ist das Guthaben höher, wird die Differenz als abonnementbezogenes Guthaben für künftige Verlängerungen zurückgehalten
- Während einer Testphase wird der Benutzer sofort auf den neuen Plan umgestellt und der Kunde direkt belastet
2. full_immediately
- Belastet dem Kunden den vollständigen Abonnementbetrag für den neuen Plan, ohne eine Gutschrift für den vorherigen Zyklus
- Sowohl bei einer Hoch- als auch bei einer Herabstufung zahlt der Kunde den vollständigen Preis des neuen Plans von Anfang an
- Nützlich, wenn Sie unabhängig von der verbleibenden Zeit des alten Plans den vollständigen Betrag berechnen möchten
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 am ersten und am 29. Tag gleich viel
- Bei einer Hochstufung wird dem Kunden die Differenz sofort berechnet. Beispiel: $30/Monat → $80/Monat = sofort berechnete $50
- Bei einer Herabstufung wird die Preisdifferenz als abonnementbezogenes Guthaben gespeichert und automatisch auf künftige Verlängerungen angerechnet. Beispiel: $50/Monat → $20/Monat = $30 als Guthaben gespeichert
4. do_not_bill
- Wendet die Planänderung sofort an, ohne zum Zeitpunkt der Änderung eine Belastung vorzunehmen. Der neue Plan, die neue Menge und die neuen Add-ons können sofort genutzt werden
- Da jetzt nichts belastet wird, erhält der Kunde bei einer Hochstufung den höherwertigen Plan für den Rest des aktuellen Zyklus kostenlos. Eine Herabstufung tritt sofort in Kraft, ohne Gutschrift für den ungenutzten Anteil des bereits bezahlten Zyklus
- Über
do_not_billgewährte Add-ons 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
- Wenn Sie diese API aufrufen, leitet Dodo Payments sofort eine Belastung auf Grundlage der ausgewählten Proration-Option ein
- Bei
prorated_immediatelywird bei jeder Änderung, sowohl bei einer Hoch- als auch bei einer Herabstufung, eine Gutschrift für den ungenutzten Anteil des aktuellen Zyklus berechnet. Übersteigt diese Gutschrift die Belastung für den neuen Zyklus, wird der Rest dem Guthaben des Abonnements hinzugefügt. Diese Gutschriften gelten nur für dieses Abonnement und werden ausschließlich zum Ausgleich künftiger wiederkehrender Zahlungen desselben Abonnements verwendet - Bei
difference_immediatelyentspricht der Nettobetrag immer exakt der Preisdifferenz. Bei Herabstufungen wird der Überschuss als abonnementbezogenes Guthaben gespeichert, ebenso wie beiprorated_immediately - Die Option
full_immediatelyüberspringt die Guthabenberechnung 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 beibehalten wird
Verarbeitung der Belastung
- Die bei einer Planänderung eingeleitete sofortige Belastung wird normalerweise in weniger als 2 Minuten verarbeitet
- Wenn diese sofortige Belastung aus irgendeinem Grund fehlschlägt, wird das Abonnement automatisch pausiert, bis das Problem behoben ist
On-Demand-Abonnements
Mit On-Demand-Abonnements können Sie Kunden flexibel belasten, nicht nur nach einem festen Zeitplan. Diese Funktion ist für alle Konten verfügbar.
subscription_data.on_demand in den Request-Body ein. Dadurch können Sie eine Zahlungsmethode ohne sofortige Belastung autorisieren oder einen benutzerdefinierten Anfangspreis festlegen.
So belasten Sie ein On-Demand-Abonnement:
Verwenden Sie für nachfolgende Belastungen den Endpunkt POST /subscriptions//charge und geben Sie 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 Richtlinien für erneute Versuche und der Verarbeitung von Webhooks) finden Sie im Leitfaden zu On-Demand-Abonnements.
Wichtige Informationen zur Abonnementabrechnung
Bei Testphasen wird eine Autorisierung über $0 und keine Belastung vorgenommen. Wenn ein Abonnement eine Testphase hat, wird zu deren Beginn eine Mandatsautorisierung über $0 erstellt, um die Karte zu speichern; die erste tatsächliche Belastung erfolgt am Ende der Testphase. In der Zahlungsliste wird bei einem Abonnement mit kostenloser Testphase genau eine Zahlung mit
total_amount von 0 angezeigt. Bei einer kostenpflichtigen Testphase wird stattdessen trial_amount im Voraus berechnet.Lebenszyklus des Abonnements:
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: Fordern Sie den Kunden auf, seine Zahlungsmethode zu aktualisieren; Dunning-Wiederholungen werden angewendet). expired = Die Laufzeit ist ohne Verlängerung abgelaufen und das Abonnement kann nicht reaktiviert werden. Der Kunde muss sich erneut abonnieren. cancelled = Vom Kunden oder Händler beendet. Die meisten Fehler bei Verlängerungen sind Ablehnungen auf Seiten des Kartenherausgebers (unzureichende Deckung, Karte abgelehnt) und kein Fehler von Dodo.Zugehörige API-Referenz
Create Subscription (Deprecated)
Veraltete API zum direkten Erstellen eines Abonnements. Verwenden Sie für neue Integrationen Checkout Sessions
Change Subscription Plan
API-Referenz zum Hoch- oder Herabstufen sowie Ändern von Abonnementplänen mit Proration-Optionen
Update Payment Method
API-Referenz zum Aktualisieren von Zahlungsmethoden und Reaktivieren pausierter Abonnements
Patch Subscription
API-Referenz zum Aktualisieren von Abonnementdetails und der Konfiguration