Skip to main content
Das Paket @dodopayments/tanstack stellt Ihrem TanStack Start-Projekt drei Request-Handler bereit. Checkout gibt checkout URLs zurück, CustomerPortal leitet einen Kunden zum Customer Portal weiter und Webhooks verifiziert webhook events und leitet sie an Ihren Code weiter. Jeder Handler akzeptiert einen standardmäßigen Request und gibt einen Response zurück. Sie rufen ihn daher aus einem server route handler auf.

Checkout Handler

Erstellen Sie checkout URLs mit statischen, dynamischen und checkout session flows.

Customer Portal

Ermöglichen Sie Kunden, ihre Abonnements und Daten zu verwalten.

Webhooks

Empfangen und verarbeiten Sie Dodo Payments webhook events.

Installation

1

Install the Package

Führen Sie diesen Befehl im Projektverzeichnis aus:
Das Paket benötigt außerdem zod 3.25 oder höher, das als peer dependency aufgeführt ist.
2

Set Up Environment Variables

Erstellen Sie eine Datei .env im Projektverzeichnis. Erstellen Sie den API key unter Developer → API Keys. Fügen Sie Ihren webhook endpoint unter Developer → Webhooks hinzu und kopieren Sie dessen Signing secret in DODO_PAYMENTS_WEBHOOK_KEY:
TanStack Start lädt .env-Dateien, und server routes lesen die Werte aus process.env. DODO_PAYMENTS_RETURN_URL ist das Ziel, zu dem Kunden nach dem checkout gelangen. Wenn Sie keine Umgebung übergeben, verwenden die Handler live_mode. Ein test mode API key funktioniert nur mit test_mode.
Committen Sie Ihre Datei .env oder Secrets niemals in die Versionsverwaltung.

Beispiele für Route Handler

Die Beispiele sind TanStack Start server routes in src/routes/api/. Jede definiert ihre Handler unter server.handlers in createFileRoute. Ältere TanStack Start-Versionen wie 1.129 definieren server routes stattdessen mit createServerFileRoute aus @tanstack/react-start/server und einem Aufruf von .methods(). Die Dodo Payments Handler funktionieren mit beiden APIs auf dieselbe Weise: Übergeben Sie ihnen das request.
Verwenden Sie diesen Handler, um Dodo Payments checkout zu Ihrer App hinzuzufügen. Der Handler GET stellt statischen checkout bereit. Der Handler POST stellt checkout sessions oder dynamischen checkout bereit, wenn Sie type: "dynamic" setzen. Das Beispiel für dynamischen checkout setzt voraus, dass Sie type: "dynamic" setzen.

Checkout Route Handler

Der checkout handler unterstützt alle drei Möglichkeiten, Zahlungen mit Dodo Payments zu akzeptieren:
  • Static Payment Links: Teilbare URLs, die Zahlungen ohne Code erfassen.
  • Dynamic Payment Links: Payment Links, die Sie mit benutzerdefinierten Details generieren. Sie verwenden veraltete Endpoints.
  • Checkout Sessions: Gehosteter checkout mit Produktkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene flow.
Checkout akzeptiert diese Optionen: Der Handler stellt statischen checkout für GET requests bereit. Für POST requests erstellt er einen dynamischen Payment Link, wenn type den Wert dynamic hat, und andernfalls eine checkout session.

Unterstützte Query Parameters

string
erforderlich
Produktbezeichner, 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 country field zu deaktivieren.
boolean
Auf true setzen, um das address line field zu deaktivieren.
boolean
Auf true setzen, um das city field zu deaktivieren.
boolean
Auf true setzen, um das state field zu deaktivieren.
boolean
Auf true setzen, um das ZIP code field zu deaktivieren.
string
Zahlungswährung, zum Beispiel USD.
boolean
Standard:"true"
Währungswähler ein- oder ausblenden.
number
Legt den berechneten Betrag in 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 Wert 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 checkout übergeben, zum Beispiel metadata_orderId=123.
Ein Deaktivierungs-Flag wirkt nur, wenn das entsprechende Feld einen Wert hat, zum Beispiel email 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 response zurück. Ungültige Query Parameters oder ein Produkt, das in Ihrem Account nicht existiert, führen ebenfalls zu 400.

Response Format

Statischer checkout gibt eine JSON response mit der checkout URL zurück. Im test mode verwendet die URL test.checkout.dodopayments.com:
  • Senden Sie die Parameter als JSON body in einem POST request.
  • Unterstützt sowohl einmalige als auch wiederkehrende Zahlungen. Der Handler ruft das Produkt ab und erstellt anschließend ein Abonnement, wenn das Produkt wiederkehrend ist, 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 fields finden Sie unter:
Dynamischer checkout ist ein Proxy für die veralteten Endpoints POST /payments und POST /subscriptions. Er funktioniert weiterhin für bestehende Integrationen, neue Integrationen sollten jedoch checkout sessions verwenden.

Response Format

Dynamischer checkout gibt eine JSON response 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 funktioniert einmal und läuft nach 24 Stunden ab oder nach 15 Minuten, wenn Sie confirm: true übergeben. Eine mit payment_method_id erstellte Session gibt kein checkout_url zurück, daher antwortet der Handler mit 400.Weitere Informationen und alle unterstützten Felder finden Sie im Checkout Sessions Integration Guide.

Response Format

Checkout sessions geben eine JSON response mit der checkout URL zurück:

Customer Portal Route Handler

Der Customer Portal route handler erstellt eine Customer Portal session für den von Ihnen übergebenen 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 customer ID anfordert, erhält das Portal dieses Kunden. Schützen Sie die route mit Ihrer eigenen Authentifizierung und übergeben Sie ausschließlich die customer ID des angemeldeten Benutzers.

Query Parameters

string
erforderlich
Die customer ID für die portal session, zum Beispiel ?customer_id=cus_123.
boolean
Wenn dieser Wert auf true gesetzt ist, 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 verifiziert jede request mit Ihrem webhook secret, das als webhookKey übergeben wird, bevor er Ihren Code ausführt:
  • Method: Nur POST requests werden unterstützt. Andere Methoden geben 405 zurück.
  • Signature Verification: Verifiziert die Header webhook-id, webhook-timestamp und webhook-signature mit webhookKey gemäß der Standard Webhooks-Spezifikation. Gibt 401 zurück, wenn die Verifizierung fehlschlägt.
  • Payload Validation: Validiert den payload mit Zod. Gibt 400 für einen ungültigen payload zurück.
  • Error Handling:
    • 401: Ungültige Signatur
    • 400: Ungültiger payload
    • 500: Interner Fehler während der Verifizierung
  • Event Routing: Ruft für jedes event onPayload und anschließend den Handler für den event type auf und gibt 200 zurück.
Der Adaptor fängt keine Fehler ab, die in Ihren Handlern ausgelöst werden. Sie werden an TanStack Start weitergegeben und die request schlägt fehl.

Unterstützte Webhook Event Handler

Jeder Handler ist optional und async und erhält den verifizierten payload für seinen event type:
Welche Bedeutung die einzelnen events haben, erfahren Sie im Webhook Event Guide.

Prompt für LLM

Kopieren Sie diesen Prompt in Ihren AI coding assistant, damit er den Adaptor zu Ihrem Projekt hinzufügt. Um Ihrem Agent außerdem die Dodo Payments-Dokumentation und Skills bereitzustellen, installieren Sie das Agent Plugin.
Zuletzt geändert am 26. September 2026