@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 TanStack Start lädt
.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:.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.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.- Checkout Handler
- Customer Portal Handler
- Webhook Handler
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.
Static Checkout (GET)
Static Checkout (GET)
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.email mit disableEmail=true. Der Handler fügt returnUrl aus seiner Konfiguration als redirect_url zum Link hinzu.Response Format
Statischer checkout gibt eine JSON response mit der checkout URL zurück. Im test mode verwendet die URLtest.checkout.dodopayments.com:Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 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(mitstreet,city,state,countryundzipcode) undcustomersowieproduct_idoderproduct_cart. Abonnements benötigenproduct_id. - Eine Übersicht aller unterstützten body fields finden Sie unter:
Response Format
Dynamischer checkout gibt eine JSON response mit dem Payment Link als checkout URL zurück:Checkout Sessions (POST)
Checkout Sessions (POST)
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.
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.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 alswebhookKey ü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-timestampundwebhook-signaturemitwebhookKeygemäß 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
onPayloadund anschließend den Handler für den event type auf und gibt 200 zurück.