Skip to main content
Das Paket @dodopayments/astro stellt deinem Astro-Projekt drei Endpunkt-Handler bereit. Checkout gibt Checkout-URLs zurück, CustomerPortal sendet einen Kunden zum Customer Portal und Webhooks überprüft Webhook-Ereignisse und leitet sie an deinen Code weiter.

Checkout Handler

Erstelle Checkout-URLs mit statischen, dynamischen und Checkout-Session-Abläufen.

Customer Portal

Ermögliche es Kunden, ihre Abonnements und Daten zu verwalten.

Webhooks

Empfange und verarbeite Dodo Payments Webhook-Ereignisse.

Installation

1

Install the Package

Führe diesen Befehl im Stammverzeichnis deines Projekts aus:
Das Paket führt Astro 4 oder 5 sowie zod 3.25 oder höher als Peer-Dependencies auf.
2

Set Up Environment Variables

Erstelle eine Datei .env im Stammverzeichnis deines Projekts. Erstelle den API-Schlüssel unter Developer → API Keys. Füge deinen Webhook-Endpunkt unter Developer → Webhooks hinzu und kopiere das Signing secret in DODO_PAYMENTS_WEBHOOK_KEY:
DODO_PAYMENTS_RETURN_URL ist das Ziel, zu dem Kunden nach dem Checkout weitergeleitet werden. Wenn du keine Umgebung übergibst, verwenden die Handler live_mode. Ein API-Schlüssel für den Testmodus funktioniert nur mit test_mode.
Übertrage deine Datei .env und Secrets niemals in die Versionsverwaltung.

Beispiele für Route-Handler

Die Beispiele sind Astro-Server-Endpunkte in src/pages/api/. Endpunkte, die Dodo Payments aufrufen, müssen bei Bedarf gerendert werden. Füge daher einen Server-Adapter zu deinem Astro-Projekt hinzu. Im standardmäßigen static-Ausgabemodus von Astro werden Endpunkte zur Build-Zeit gerendert. Deshalb exportiert jedes Beispiel prerender = false, um den Endpunkt stattdessen bei jeder Anfrage zu rendern.
Verwende diesen Handler, um Dodo Payments checkout zu deiner App hinzuzufügen. Der Handler GET stellt statischen Checkout bereit. Der Handler POST stellt Checkout-Sessions bereit oder dynamischen Checkout, wenn du type: "dynamic" festlegst. Eine Endpunktdatei kann nur einen POST-Handler exportieren. Daher setzt das Beispiel für dynamischen Checkout voraus, dass du type: "dynamic" festlegst.

Checkout-Route-Handler

Der Checkout-Handler unterstützt alle drei Möglichkeiten, Zahlungen mit Dodo Payments entgegenzunehmen:
  • Statische Payment Links: Teilbare URLs, die ohne Code Zahlungen einziehen.
  • Dynamische Payment Links: Payment Links, die du mit benutzerdefinierten Daten generierst. Sie verwenden veraltete Endpunkte.
  • Checkout-Sessions: Gehosteter Checkout mit einem Produktwarenkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene Ablauf.
Checkout akzeptiert diese Optionen: Der Handler stellt statischen Checkout für GET-Anfragen bereit. Für POST-Anfragen erstellt er einen dynamischen Payment Link, wenn type den Wert dynamic hat, und andernfalls eine Checkout-Session.

Unterstützte Query-Parameter

string
erforderlich
Produktkennung, zum Beispiel ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
Standard:"1"
Menge des Produkts.
string
Vollständiger Name des Kunden. Wird ignoriert, wenn firstName oder lastName angegeben ist.
string
Vorname des Kunden.
string
Nachname des Kunden.
string
E-Mail-Adresse des Kunden.
string
Land des Kunden als ISO-3166-1-Alpha-2-Code.
string
Straßenadresse des Kunden.
string
Ort des Kunden.
string
Bundesland oder Provinz des Kunden.
string
ZIP- oder Postleitzahl des Kunden.
boolean
Auf true setzen, um das Feld für den vollständigen Namen zu deaktivieren.
boolean
Auf true setzen, um das Vornamenfeld zu deaktivieren.
boolean
Auf true setzen, um das Nachnamenfeld zu deaktivieren.
boolean
Auf true setzen, um das E-Mail-Feld zu deaktivieren.
boolean
Auf true setzen, um das Länderfeld zu deaktivieren.
boolean
Auf true setzen, um das Feld für die Adresszeile zu deaktivieren.
boolean
Auf true setzen, um das Ortsfeld zu deaktivieren.
boolean
Auf true setzen, um das Bundeslandfeld zu deaktivieren.
boolean
Auf true setzen, um das ZIP-Code-Feld zu deaktivieren.
string
Zahlungswährung, zum Beispiel USD.
boolean
Standard:"true"
Währungswähler ein- oder ausblenden.
number
Legt den berechneten Betrag in den Haupteinheiten der Währung fest, zum Beispiel 12.5 für $12.50. Funktioniert nur mit Pay What You Want-Produkten und wird ignoriert, wenn der Betrag unter dem Mindestpreis des Produkts liegt.
boolean
Standard:"true"
Rabattbereich ein- oder ausblenden.
string
Jeder Query-Parameter, der mit metadata_ beginnt, wird als Metadaten an den Checkout übergeben, zum Beispiel metadata_orderId=123.
Ein Deaktivierungs-Flag wird nur wirksam, wenn das entsprechende Feld einen Wert enthält, zum Beispiel email zusammen mit disableEmail=true. Der Handler fügt returnUrl aus seiner Konfiguration als redirect_url zum Link hinzu.
Wenn productId fehlt, gibt der Handler eine 400-Antwort zurück. Ungültige Query-Parameter oder ein Produkt, das in deinem Konto nicht existiert, führen ebenfalls zu 400.

Antwortformat

Statischer Checkout gibt eine JSON-Antwort mit der Checkout-URL zurück. Im Testmodus verwendet die URL test.checkout.dodopayments.com:
  • Sende die Parameter als JSON-Body in einer POST-Anfrage.
  • Unterstützt sowohl einmalige als auch wiederkehrende Zahlungen. Der Handler ruft das Produkt ab und erstellt anschließend ein Abonnement, wenn es sich um ein wiederkehrendes Produkt handelt, andernfalls eine einmalige Zahlung.
  • Der Body benötigt billing (mit street, city, state, country und zipcode) und customer sowie product_id oder product_cart. Abonnements benötigen product_id.
  • Eine Übersicht aller unterstützten Body-Felder findest du unter:
Dynamischer Checkout fungiert als Proxy für die veralteten Endpunkte POST /payments und POST /subscriptions. Er funktioniert weiterhin für bestehende Integrationen, aber neue Integrationen sollten Checkout-Sessions verwenden.

Antwortformat

Dynamischer Checkout gibt eine JSON-Antwort mit dem Payment Link als Checkout-URL zurück:
Checkout-Sessions erstellen einen gehosteten Checkout für einmalige Käufe und Abonnements mit vollständiger Kontrolle über die Anpassung. product_cart ist das einzige erforderliche Feld und benötigt mindestens ein Produkt. Wenn der Body kein return_url enthält, verwendet der Handler returnUrl aus seiner Konfiguration.Jedes checkout_url kann einmal verwendet werden und läuft nach 24 Stunden ab oder nach 15 Minuten, wenn du confirm: true übergibst. Eine mit payment_method_id erstellte Session gibt kein checkout_url zurück, daher antwortet der Handler mit 400.Weitere Informationen und eine Übersicht aller unterstützten Felder findest du im Checkout Sessions Integration Guide.

Antwortformat

Checkout-Sessions geben eine JSON-Antwort mit der Checkout-URL zurück:

Customer-Portal-Route-Handler

Der Customer-Portal-Route-Handler erstellt eine Customer-Portal-Session für den angegebenen Kunden und leitet den Browser dorthin weiter. CustomerPortal akzeptiert dieselben Optionen bearerToken und environment wie Checkout.
Der Handler überprüft nicht, wer ihn aufruft. Jeder, der ihn mit einer Kunden-ID anfordert, erhält Zugriff auf das Portal dieses Kunden. Schütze die Route mit deiner eigenen Authentifizierung und übergib nur die Kunden-ID des angemeldeten Benutzers.

Query-Parameter

string
erforderlich
Die Kunden-ID für die Portal-Session, zum Beispiel ?customer_id=cus_123.
boolean
Wenn auf true gesetzt, sendet Dodo Payments dem Kunden zusätzlich den Portal-Link per E-Mail.
Der Handler gibt 400 zurück, wenn customer_id fehlt, und 500, wenn die Portal-Session nicht erstellt werden kann.

Webhook-Route-Handler

Der Webhook-Route-Handler überprüft jede Anfrage mit deinem Webhook-Secret, das als webhookKey übergeben wird, bevor er deinen Code ausführt:
  • Methode: Es werden nur POST-Anfragen unterstützt. Andere Methoden führen zu 405.
  • Signaturüberprüfung: Überprüft die Header webhook-id, webhook-timestamp und webhook-signature mit webhookKey gemäß der Standard-Webhooks-Spezifikation. Gibt 401 zurück, wenn die Überprüfung fehlschlägt.
  • Payload-Validierung: Validiert den Payload mit Zod. Gibt 400 für einen ungültigen Payload zurück.
  • Fehlerbehandlung:
    • 401: Ungültige Signatur
    • 400: Ungültiger Payload
    • 500: Interner Fehler bei der Überprüfung
  • Ereignisweiterleitung: Ruft onPayload für jedes Ereignis auf, anschließend den Handler für den Ereignistyp, und gibt 200 zurück.
Der Adapter fängt keine Fehler ab, die in deinen Handlern ausgelöst werden. Sie werden an Astro weitergegeben und die Anfrage schlägt fehl.

Unterstützte Webhook-Ereignishandler

Jeder Handler ist optional und asynchron und erhält den überprüften Payload für seinen Ereignistyp:
Welche Bedeutung die einzelnen Ereignisse haben, erfährst du im Webhook Event Guide.

Prompt für LLM

Kopiere diesen Prompt in deinen KI-Coding-Assistenten, damit er den Adapter zu deinem Projekt hinzufügt. Um deinem Agenten zusätzlich die Dodo Payments-Dokumentation und -Skills bereitzustellen, installiere das Agent Plugin.
Zuletzt geändert am 26. September 2026