@dodopayments/nextjs stellt deinem Next.js-App-Router-Projekt drei Route-Handler bereit. Checkout gibt Checkout-URLs zurück, CustomerPortal leitet Kunden zum Customer Portal weiter und Webhooks verifiziert Webhook-Ereignisse und leitet sie an deinen Code weiter. Das Paket unterstützt Next.js 14, 15 und 16.
Checkout Handler
Erstelle Checkout-URLs mit statischen, dynamischen und Checkout-Session-Abläufen.
Customer Portal
Ermögliche 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 benötigt außerdem Zod 3.25 oder Zod 4 als Peer-Dependency.
2
Set Up Environment Variables
Erstelle im Stammverzeichnis deines Projekts eine Datei
.env. Erstelle den API-Key unter Developer → API Keys und das Webhook-Secret unter Developer → Webhooks im Dashboard:DODO_PAYMENTS_RETURN_URL ist das Ziel, zu dem Kunden nach dem Checkout gelangen. Wenn du keine Umgebung übergibst, verwenden die Handler live_mode.Beispiele für Route-Handler
Alle Beispiele setzen voraus, dass du den Next.js App Router verwendest.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Verwende diesen Handler, um Dodo Payments Checkout zu deiner App hinzuzufügen. Ein
GET-Handler stellt statischen Checkout bereit. Ein POST-Handler stellt Checkout-Sessions bereit oder dynamischen Checkout, wenn du type: "dynamic" setzt.Checkout-Route-Handler
Der Checkout-Handler unterstützt alle drei Möglichkeiten, Zahlungen mit Dodo Payments entgegenzunehmen:- Statische Payment Links: Teilbare URLs, die Zahlungen ohne Code erfassen.
- Dynamische Payment Links: Payment Links, die du mit benutzerdefinierten Daten erzeugst. Sie verwenden veraltete Endpoints.
- Checkout-Sessions: Gehosteter Checkout mit einem Produkt-Warenkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene Ablauf.
Static Checkout (GET)
Static Checkout (GET)
Unterstützte Query-Parameter
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.returnUrl aus seiner Konfiguration als redirect_url zum Link hinzu.Antwortformat
Statischer Checkout gibt eine JSON-Antwort mit der Checkout-URL zurück. Im Testmodus verwendet die URLtest.checkout.dodopayments.com.Dynamic Checkout (POST)
Dynamic Checkout (POST)
- Sende die Parameter als JSON-Body in einer POST-Anfrage.
- Unterstützt sowohl einmalige als auch wiederkehrende Zahlungen.
billingundcustomersind erforderlich.- Eine Übersicht aller unterstützten Body-Felder findest du unter:
Antwortformat
Dynamischer Checkout gibt eine JSON-Antwort mit der 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. Wenn der Body kein return_url enthält, verwendet der Handler returnUrl aus seiner Konfiguration.Weitere Informationen und eine Übersicht aller unterstützten Felder findest du im Checkout Sessions Integration Guide.Eine mit payment_method_id erstellte Session gibt keine Checkout-URL zurück, daher antwortet der Handler mit 400. Um eine gespeicherte Zahlungsmethode zu belasten, erstelle die Session stattdessen mit dem SDK.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 von dir übergebenen Kunden und leitet den Browser dorthin weiter.Query-Parameter
Wenn auf
true gesetzt, 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 Anfrage, bevor er deinen Code ausführt:- Methode: Es werden nur POST-Anfragen unterstützt. Andere Methoden geben 405 zurück.
- Signaturverifizierung: Verifiziert den rohen Anfrage-Body anhand der Header
webhook-id,webhook-timestampundwebhook-signaturemitwebhookKey. Gibt 401 zurück, wenn die Verifizierung fehlschlägt. - Payload-Validierung: Parst den verifizierten Body als JSON und validiert ihn mit Zod. Gibt 400 zurück, wenn ein geparster Payload nicht dem Webhook-Schema entspricht.
- Fehlerbehandlung:
- 401: Ungültige Signatur
- 400: Ungültiger Payload
- 500: Unerwartete Verifizierungsfehler, fehlerhaftes JSON oder von deinen Callbacks ausgelöste Fehler
- Ereignis-Routing: Ruft für jedes Ereignis
onPayloadund anschließend den Handler für den Ereignistyp auf und gibt 200 zurück.