Skip to main content
Das Modul @dodopayments/nuxt stellt deiner Nuxt-App drei Serverrouten-Handler bereit. checkoutHandler gibt Checkout-URLs zurück, customerPortalHandler sendet einen Kunden zum Customer Portal und Webhooks überprüft Webhook-Ereignisse und leitet sie an deinen Code weiter.

Checkout API Route

Erstellen Sie Checkout-URLs aus einer Nuxt-Serverroute.

Customer Portal API Route

Lassen Sie Kunden ihre Abonnements und Daten über eine Nuxt-Serverroute verwalten.

Webhooks API Route

Empfangen und verifizieren Sie Dodo Payments-Webhook-Ereignisse in Nuxt.

Übersicht

Das Modul registriert seine Handler als automatische Nuxt-Serverimporte. Daher können deine Serverrouten checkoutHandler, customerPortalHandler und Webhooks ohne import-Anweisungen aufrufen. Jede Route liest deine Zugangsdaten aus runtimeConfig. Nuxt stellt dem Browser nur runtimeConfig.public zur Verfügung, sodass API-Schlüssel und Webhook-Secret auf dem Server bleiben.

Installation

1

Install the Nuxt Module

Führe diesen Befehl im Stammverzeichnis deines Projekts aus:
Das Modul führt Nuxt 3 (3.13.1 oder höher) und zod 3.25 oder höher als Peer-Abhängigkeiten auf.
2

Register the Module in nuxt.config.ts

Füge @dodopayments/nuxt zu deinem modules-Array hinzu und ordne deine Zugangsdaten runtimeConfig zu:
nuxt.config.ts
Lege diese Umgebungsvariablen fest, zum Beispiel in einer .env-Datei im Stammverzeichnis deines Projekts:Ein erstellter Nuxt-Server liest deine .env-Datei nicht. Zur Laufzeit überschreibt Nuxt einen runtimeConfig-Wert nur anhand der Variable, die seinem Pfad entspricht, etwa NUXT_PRIVATE_RETURN_URL für private.returnUrl. Lege diese Variablen daher auch in deiner Hosting-Umgebung fest.
Committe deine .env-Datei oder Secrets niemals in die Versionsverwaltung.

Beispiele für API-Routen-Handler

Die Beispiele erstellen Serverrouten im Verzeichnis server/routes/api/. Nuxt ordnet jede Datei anhand ihres Namens und Methoden-Suffixes einer Route zu. checkout.get.ts verarbeitet daher GET /api/checkout.
Verwende diesen Handler, um deiner Nuxt-App den Dodo Payments-Checkout hinzuzufügen. Eine GET-Route stellt einen statischen Checkout bereit. Eine POST-Route stellt Checkout-Sitzungen bereit oder einen dynamischen Checkout, wenn du type: "dynamic" festlegst.
Erstelle eine GET-Route für den statischen Checkout:
checkout.post.ts stellt einen POST-Ablauf bereit. Verwende entweder das Beispiel für den dynamischen Checkout oder das Beispiel für eine Checkout-Sitzung:
Wenn productId fehlt oder ungültig ist, gibt der Handler eine 400-Antwort zurück.
Sende zum Testen der Routen diese Requests:

Checkout-Routen-Handler

Der Checkout-Handler unterstützt alle drei Möglichkeiten, Zahlungen mit Dodo Payments zu akzeptieren:
  • Statische Payment Links: Teilbare URLs, die Zahlungen ohne Code erfassen.
  • Dynamische Payment Links: Payment Links, die du mit benutzerdefinierten Angaben generierst. Sie verwenden veraltete Endpunkte.
  • Checkout-Sitzungen: Gehosteter Checkout mit einem Produktkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene Ablauf.
checkoutHandler akzeptiert diese Optionen:

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
Adresszeile des Kunden.
string
Stadt des Kunden.
string
Bundesland oder Provinz des Kunden.
string
PLZ 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 Adresszeilenfeld zu deaktivieren.
boolean
Auf true setzen, um das Stadtfeld zu deaktivieren.
boolean
Auf true setzen, um das Bundeslandfeld zu deaktivieren.
boolean
Auf true setzen, um das PLZ-Feld zu deaktivieren.
string
Zahlungswährung, zum Beispiel USD.
boolean
Standard:"true"
Währungsselektor ein- oder ausblenden.
number
Legt den berechneten Betrag in großen Währungseinheiten 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 übergeben.
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 und nicht vorhandene Produkt-IDs führen ebenfalls zu 400.

Antwortformat

Der statische Checkout gibt eine JSON-Antwort mit der Checkout-URL zurück. Im Testmodus verwendet die URL test.checkout.dodopayments.com.
Der dynamische Checkout fungiert als Proxy für die veralteten Endpunkte POST /payments und POST /subscriptions. Er funktioniert weiterhin für bestehende Integrationen, neue Integrationen sollten jedoch Checkout-Sitzungen verwenden.

Antwortformat

Der dynamische Checkout gibt eine JSON-Antwort mit der Checkout-URL zurück:
Checkout-Sitzungen 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 Sitzung gibt keine Checkout-URL zurück, daher antwortet der Handler mit 400. Um eine gespeicherte Zahlungsmethode zu belasten, erstelle die Sitzung stattdessen mit dem SDK.

Antwortformat

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

Customer-Portal-Routen-Handler

Der Customer-Portal-Routen-Handler erstellt eine Customer-Portal-Sitzung für den angegebenen Kunden und leitet den Browser dorthin weiter.
Der Handler überprüft nicht, wer ihn aufruft. Jeder, der ihn mit einer Kunden-ID anfordert, erhält 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-Sitzung, zum Beispiel ?customer_id=cus_123.
boolean
Wenn auf true gesetzt, sendet Dodo Payments dem Kunden zusätzlich den Portal-Link per E-Mail.
Ab @dodopayments/nuxt 0.2.11 gibt der Handler HTTP 400 zurück, wenn customer_id fehlt, und HTTP 500, wenn die Portalsitzung nicht erstellt werden kann. Frühere Versionen geben HTTP 200 mit dem JSON-Body { "status": 400, "body": "Missing customer_id in query parameters" } zurück. Um sich auf den HTTP-Status zu verlassen, aktualisieren Sie auf 0.2.11 oder höher.

Webhook-Routen-Handler

Der Webhook-Routen-Handler überprüft jede Anfrage, bevor dein Code ausgeführt wird:
  • Methode: Nur POST-Requests werden unterstützt. Andere Methoden geben 405 zurück.
  • Signaturüberprüfung: Überprüft den rohen Request-Body sowie die Header webhook-id, webhook-timestamp und webhook-signature mit webhookKey gemäß der Spezifikation Standard Webhooks. Gibt 401 zurück, wenn die Überprüfung fehlschlägt.
  • Payload-Validierung: Validiert die Payload mit Zod. Gibt 400 für eine ungültige Payload zurück.
  • Fehlerbehandlung:
    • 401: Ungültige Signatur
    • 400: Ungültige Payload
    • 500: Interner Fehler während der Überprüfung
  • Ereignisweiterleitung: Ruft für jedes Ereignis onPayload und anschließend den Handler für den Ereignistyp auf und gibt 200 zurück.
Der Adapter fängt von deinen Handlern ausgelöste Fehler nicht ab. Sie werden an Nuxt weitergegeben, und die Anfrage schlägt fehl.

Unterstützte Webhook-Ereignis-Handler

Jeder Handler erhält die überprüfte 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 das Modul zu deinem Projekt hinzufügt. Um deinem Agenten außerdem die Dodo Payments-Dokumentation und -Skills bereitzustellen, installiere das Agent Plugin.
Zuletzt geändert am 26. September 2026