Zum Hauptinhalt springen

Voraussetzungen

Um die Dodo Payments API zu integrieren, benötigen Sie:
  • Ein Dodo Payments Händlerkonto
  • API-Anmeldeinformationen (API-Schlüssel und Webhook-Geheimschlüssel) aus dem Dashboard
Für eine detailliertere Anleitung zu den Voraussetzungen, überprüfen Sie diesen Abschnitt.

API-Integration

Checkout-Sitzungen

Verwenden Sie Checkout-Sitzungen, um Abonnementprodukte mit einem sicheren, gehosteten Checkout zu verkaufen. Übergeben Sie Ihr Abonnementprodukt in product_cart und leiten Sie die Kunden zu dem zurückgegebenen checkout_url weiter.
Sie können Abonnementprodukte nicht mit einmaligen Produkten in derselben Checkout-Sitzung mischen.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
  const session = await client.checkoutSessions.create({
    product_cart: [
      { product_id: 'prod_subscription_monthly', quantity: 1 }
    ],
    // Optional: configure trials for subscription products
    subscription_data: { trial_period_days: 14 },
    customer: {
      email: '[email protected]',
      name: 'Jane Doe',
    },
    return_url: 'https://example.com/success',
  });

  console.log(session.checkout_url);
}

main();

API-Antwort

Die folgende ist ein Beispiel für die Antwort:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
Leiten Sie den Kunden zu checkout_url weiter.

Webhooks

Bei der Integration von Abonnements erhalten Sie Webhooks, um den Lebenszyklus des Abonnements zu verfolgen. Diese Webhooks helfen Ihnen, Abonnementzustände und Zahlungsszenarien effektiv zu verwalten. Um Ihren Webhook-Endpunkt einzurichten, folgen Sie bitte unserem Detaillierten Integrationshandbuch.

Abonnement-Ereignistypen

Die folgenden Webhook-Ereignisse verfolgen Änderungen des Abonnementstatus:
  1. subscription.active - Abonnement wurde erfolgreich aktiviert.
  2. subscription.updated - Abonnementobjekt wurde aktualisiert (wird bei jeder Feldänderung ausgelöst).
  3. subscription.on_hold - Abonnement wurde aufgrund fehlgeschlagener Erneuerung pausiert.
  4. subscription.failed - Erstellung des Abonnements ist während der Mandatserstellung fehlgeschlagen.
  5. subscription.renewed - Abonnement wird für den nächsten Abrechnungszeitraum erneuert.
Für eine zuverlässige Verwaltung des Lebenszyklus von Abonnements empfehlen wir, diese Abonnementereignisse zu verfolgen.
Verwenden Sie subscription.updated, um Echtzeitbenachrichtigungen über Änderungen des Abonnements zu erhalten, damit der Status Ihrer Anwendung synchron bleibt, ohne die API abzufragen.

Zahlungsszenarien

Erfolgreicher Zahlungsfluss Wenn eine Zahlung erfolgreich ist, erhalten Sie die folgenden Webhooks:
  1. subscription.active - Zeigt die Aktivierung des Abonnements an
  2. payment.succeeded - Bestätigt die erste Zahlung:
    • Bei sofortiger Abrechnung (0 Testtage): Erwarten Sie innerhalb von 2-10 Minuten
    • Bei Testtagen: wann immer diese enden
  3. subscription.renewed - Zeigt die Abzug der Zahlung und die Erneuerung für den nächsten Zyklus an. (Im Grunde, wann immer eine Zahlung für Abonnementprodukte abgezogen wird, erhalten Sie den subscription.renewed Webhook zusammen mit payment.succeeded)
Zahlungsausfallszenarien
  1. Abonnementfehler
  • subscription.failed - Erstellung des Abonnements ist aufgrund eines Fehlers bei der Erstellung eines Mandats fehlgeschlagen.
  • payment.failed - Zeigt fehlgeschlagene Zahlung an.
  1. Abonnement auf Hold
  • subscription.on_hold - Abonnement wurde aufgrund einer fehlgeschlagenen Erneuerungszahlung oder einer fehlgeschlagenen Planänderungsgebühr pausiert.
  • Wenn ein Abonnement pausiert wird, wird es nicht automatisch erneuert, bis die Zahlungsmethode aktualisiert wird.
Best Practice: Um die Implementierung zu vereinfachen, empfehlen wir, hauptsächlich Abonnementereignisse zur Verwaltung des Lebenszyklus von Abonnements zu verfolgen.

Umgang mit Abonnements auf Hold

Wenn ein Abonnement in den on_hold Zustand eintritt, müssen Sie die Zahlungsmethode aktualisieren, um es wieder zu aktivieren. Dieser Abschnitt erklärt, wann Abonnements pausiert werden und wie man damit umgeht.

Wann Abonnements auf Hold gehen

Ein Abonnement wird auf Hold gesetzt, wenn:
  • Erneuerungszahlung schlägt fehl: Die automatische Erneuerungsgebühr schlägt aufgrund unzureichender Mittel, abgelaufener Karte oder Bankablehnung fehl
  • Planänderungsgebühr schlägt fehl: Eine sofortige Gebühr während des Upgrades/Downgrades des Plans schlägt fehl
  • Zahlungsmethodenautorisierung schlägt fehl: Die Zahlungsmethode kann für wiederkehrende Gebühren nicht autorisiert werden
Abonnements im on_hold Zustand werden nicht automatisch erneuert. Sie müssen die Zahlungsmethode aktualisieren, um das Abonnement wieder zu aktivieren.

Reaktivierung von Abonnements aus dem Hold-Zustand

Um ein Abonnement aus dem on_hold Zustand zu reaktivieren, verwenden Sie die Update Payment Method API. Dies führt automatisch durch:
  1. Erstellt eine Gebühr für ausstehende Beträge
  2. Generiert eine Rechnung für die Gebühr
  3. Verarbeitet die Zahlung mit der neuen Zahlungsmethode
  4. Reaktiviert das Abonnement in den active Zustand nach erfolgreicher Zahlung
1

Webhook für subscription.on_hold verarbeiten

Wenn Sie einen subscription.on_hold Webhook erhalten, aktualisieren Sie den Status Ihrer Anwendung und benachrichtigen Sie den Kunden:
// Webhook handler
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;
  
  if (event.type === 'subscription.on_hold') {
    const subscription = event.data;
    
    // Update subscription status in your database
    await updateSubscriptionStatus(subscription.subscription_id, 'on_hold');
    
    // Notify customer to update payment method
    await sendEmailToCustomer(subscription.customer_id, {
      subject: 'Payment Required - Subscription On Hold',
      message: 'Your subscription is on hold. Please update your payment method to continue service.'
    });
  }
  
  res.json({ received: true });
});
2

Zahlungsmethode aktualisieren

Wenn der Kunde bereit ist, seine Zahlungsmethode zu aktualisieren, rufen Sie die Update Payment Method API auf:
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created for remaining dues:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
}
Sie können auch eine vorhandene Zahlungsmethoden-ID verwenden, wenn der Kunde gespeicherte Zahlungsmethoden hat:
await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});
3

Webhook-Ereignisse überwachen

Nach der Aktualisierung der Zahlungsmethode überwachen Sie diese Webhook-Ereignisse:
  1. payment.succeeded - Die Gebühr für ausstehende Beträge war erfolgreich
  2. subscription.active - Das Abonnement wurde reaktiviert
if (event.type === 'payment.succeeded') {
  const payment = event.data;
  
  // Check if this payment is for an on_hold subscription
  if (payment.subscription_id) {
    // Wait for subscription.active webhook to confirm reactivation
  }
}

if (event.type === 'subscription.active') {
  const subscription = event.data;
  
  // Update subscription status in your database
  await updateSubscriptionStatus(subscription.subscription_id, 'active');
  
  // Restore customer access
  await restoreCustomerAccess(subscription.customer_id);
  
  // Notify customer of successful reactivation
  await sendEmailToCustomer(subscription.customer_id, {
    subject: 'Subscription Reactivated',
    message: 'Your subscription has been reactivated successfully.'
  });
}

Beispiel für das Abonnementereignis-Payload


EigenschaftTypErforderlichBeschreibung
business_idstringJaDie eindeutige Kennung für das Unternehmen
timestampstringJaDer Zeitstempel, wann das Ereignis aufgetreten ist (nicht unbedingt dasselbe wie der Zeitpunkt der Zustellung)
typestringJaDer Typ des Ereignisses. Siehe Ereignistypen
dataobjectJaDie Hauptdatenlast. Siehe Datenobjekt

Ändern von Abonnementplänen

Sie können einen Abonnementplan über den API-Endpunkt zum Ändern des Plans upgraden oder downgraden. Dies ermöglicht es Ihnen, das Produkt des Abonnements, die Menge zu ändern und die Proratisierung zu handhaben.

API-Referenz zum Planwechsel

Für detaillierte Informationen zum Ändern von Abonnementplänen verweisen wir auf unsere Dokumentation zur API für Planänderungen.

Proratisierungsoptionen

Beim Ändern von Abonnementplänen haben Sie zwei Optionen zur Handhabung der sofortigen Gebühr:

1. prorated_immediately

  • Berechnet den proratisierten Betrag basierend auf der verbleibenden Zeit im aktuellen Abrechnungszyklus
  • Berechnet dem Kunden nur die Differenz zwischen dem alten und dem neuen Plan
  • Während einer Testphase wird der Benutzer sofort auf den neuen Plan umgeschaltet, wobei der Kunde sofort belastet wird

2. full_immediately

  • Belastet den Kunden mit dem vollen Abonnementbetrag für den neuen Plan
  • Ignoriert die verbleibende Zeit oder Gutschriften des vorherigen Plans
  • Nützlich, wenn Sie den Abrechnungszyklus zurücksetzen oder den vollen Betrag unabhängig von der Proratisierung berechnen möchten

3. difference_immediately

  • Bei einem Upgrade wird der Kunde sofort mit der Differenz zwischen den beiden Planbeträgen belastet.
  • Wenn der aktuelle Plan 30 Dollar beträgt und der Kunde auf 80 Dollar aufsteigt, wird ihm sofort 50 Dollar berechnet.
  • Bei einem Downgrade wird der nicht genutzte Betrag des aktuellen Plans als interne Gutschrift hinzugefügt und automatisch auf zukünftige Abonnementerneuerungen angewendet.
  • Wenn der aktuelle Plan 50 Dollar beträgt und der Kunde auf einen Plan von 20 Dollar wechselt, werden die verbleibenden 30 Dollar gutgeschrieben und für den nächsten Abrechnungszyklus verwendet.

Verhalten

  • Wenn Sie diese API aufrufen, initiiert Dodo Payments sofort eine Gebühr basierend auf Ihrer ausgewählten Proratisierungsoption
  • Wenn die Planänderung ein Downgrade ist und Sie prorated_immediately verwenden, werden Gutschriften automatisch berechnet und dem Guthaben des Abonnements hinzugefügt. Diese Gutschriften sind spezifisch für dieses Abonnement und werden nur verwendet, um zukünftige wiederkehrende Zahlungen des gleichen Abonnements auszugleichen
  • Die full_immediately Option umgeht die Berechnung von Gutschriften und belastet den vollständigen Betrag des neuen Plans
Wählen Sie Ihre Proratisierungsoption sorgfältig aus: Verwenden Sie prorated_immediately für eine faire Abrechnung, die ungenutzte Zeit berücksichtigt, oder full_immediately, wenn Sie den vollständigen Betrag des neuen Plans unabhängig vom aktuellen Abrechnungszyklus berechnen möchten.

Gebührenverarbeitung

  • Die sofortige Gebühr, die bei der Planänderung initiiert wird, wird normalerweise in weniger als 2 Minuten verarbeitet
  • Wenn diese sofortige Gebühr aus irgendeinem Grund fehlschlägt, wird das Abonnement automatisch auf Hold gesetzt, bis das Problem behoben ist

On-Demand-Abonnements

On-Demand-Abonnements ermöglichen es Ihnen, Kunden flexibel zu belasten, nicht nur nach einem festen Zeitplan. Kontaktieren Sie den Support, um diese Funktion zu aktivieren.
Um ein On-Demand-Abonnement zu erstellen: Um ein On-Demand-Abonnement zu erstellen, verwenden Sie den POST /subscriptions API-Endpunkt und fügen Sie das on_demand Feld in Ihren Anfragekörper ein. Dies ermöglicht es Ihnen, eine Zahlungsmethode ohne sofortige Gebühr zu autorisieren oder einen benutzerdefinierten Anfangspreis festzulegen. Um ein On-Demand-Abonnement zu belasten: Für nachfolgende Gebühren verwenden Sie den POST /subscriptions/charge Endpunkt und geben Sie den Betrag an, den der Kunde für diese Transaktion belastet werden soll.
Für eine vollständige, schrittweise Anleitung—einschließlich Anfrage-/Antwortbeispiele, sichere Wiederholungsrichtlinien und Webhook-Verarbeitung—sehen Sie sich das Handbuch für On-Demand-Abonnements an.