Skip to main content
Das @dodopayments/sveltekit-Paket stellt deiner SvelteKit-App drei Route-Handler bereit. Checkout gibt checkout-URLs zurück, CustomerPortal leitet einen Kunden zum Customer Portal weiter und Webhooks verifiziert webhook-Ereignisse und leitet sie an deinen Code weiter.

Checkout Handler

Erstelle checkout-URLs aus deiner SvelteKit-App.

Customer Portal

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

Webhooks

Empfange und verifiziere Dodo Payments webhook-Ereignisse.

Installation

1

Install the Package

Führe diesen Befehl im Stammverzeichnis deines Projekts aus:
Das Paket führt SvelteKit 2 (@sveltejs/kit 2.20.3 oder höher) und zod 3.25 oder höher als Peer-Abhängigkeiten auf.
2

Set Up Environment Variables

Erstelle eine .env-Datei im Stammverzeichnis deines Projekts:
Erstelle den API-Schlüssel unter Developer → API Keys. Füge deinen webhook-Endpunkt unter Developer → Webhooks hinzu und kopiere sein Signaturgeheimnis 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.
Committe deine .env-Datei oder Secrets niemals in die Versionsverwaltung.

Beispiele für Route-Handler

Die Beispiele sind SvelteKit +server.ts-Endpunkte unter src/routes/api/. Sie importieren deine Zugangsdaten aus $env/static/private, das SvelteKit aus clientseitigem Code heraushält.
Verwende diesen Handler, um Dodo Payments checkout zu deiner SvelteKit-App hinzuzufügen. Checkout gibt einen GET-Handler für statischen checkout und einen POST-Handler für checkout-Sitzungen zurück oder für dynamischen checkout, wenn du type: "dynamic" setzt. Exportiere GET aus einem Handler, der mit type: "static" oder ohne type erstellt wurde, da der GET-Handler eines session- oder dynamic-Handlers 400 zurückgibt.
Die Anfrage für dynamischen checkout funktioniert, wenn POST aus einem mit type: "dynamic" erstellten Handler stammt. Mit type: "session" wie in der Beispielroute sendest du die Anfrage für die checkout-Sitzung.

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 generierst. Sie verwenden veraltete Endpunkte.
  • Checkout Sessions: Gehosteter checkout mit einem Produktwarenkorb, Kundendaten und Anpassungsoptionen. Dies ist der empfohlene Ablauf.
Checkout 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
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 Vornamensfeld zu deaktivieren.
boolean
Auf true setzen, um das Nachnamensfeld 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 Stadtfeld 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ährungsselektor 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 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 ü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 geben ebenfalls 400 zurück.

Antwortformat

Statischer checkout gibt eine JSON-Antwort mit der checkout-URL zurück. Im Testmodus verwendet die URL test.checkout.dodopayments.com.
Dynamischer checkout leitet die veralteten Endpunkte POST /payments und POST /subscriptions weiter. Er funktioniert für bestehende Integrationen weiterhin, neue Integrationen sollten jedoch checkout-Sitzungen verwenden.

Antwortformat

Dynamischer 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 über alle 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-Route-Handler

Der Customer Portal-Route-Handler erstellt eine Customer Portal-Sitzung für den von dir übergebenen Kunden und leitet den Browser mit einer 302-Antwort dorthin weiter.
Der Handler prü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.
Gibt 400 zurück, wenn customer_id fehlt, und 500, wenn die Portal-Sitzung nicht erstellt werden kann.

Webhook-Route-Handler

Der webhook-Route-Handler verifiziert jede Anfrage, bevor dein Code ausgeführt wird:
  • Methode: Nur POST-Anfragen werden unterstützt. Andere Methoden geben 405 zurück.
  • Signaturüberprüfung: Überprüft den unveränderten Request-Body sowie 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 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 bei der Überprüfung
  • Ereignisweiterleitung: Ruft onPayload für jedes Ereignis und anschließend den Handler für den Ereignistyp auf und gibt 200 zurück.
Der Adapter fängt keine Fehler ab, die in deinen Handlern ausgelöst werden. Sie werden an SvelteKit weitergegeben und die Anfrage schlägt fehl.

Unterstützte Webhook-Ereignis-Handler

Jeder Handler erhält die verifizierte Payload für seinen Ereignistyp:
Welche Bedeutung die einzelnen Ereignisse haben, findest 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 -Funktionen bereitzustellen, installiere das Agent Plugin.
Zuletzt geändert am 26. September 2026