Zum Hauptinhalt springen

Voraussetzungen

Um die Dodo Payments API zu integrieren, benötigen Sie:
  • Ein Dodo Payments Händlerkonto
  • API-Anmeldeinformationen (API-Schlüssel und Webhook-Geheimschlüssel) aus dem Dashboard

Dashboard-Einrichtung

  1. Navigieren Sie zum Dodo Payments Dashboard
  2. Erstellen Sie ein Produkt (Einmalzahlung oder Abonnement)
  3. Generieren Sie Ihren API-Schlüssel:
    • Gehen Sie zu Entwickler > API
    • Detaillierte Anleitung
    • Kopieren Sie den API-Schlüssel in die Umgebungsvariable DODO_PAYMENTS_API_KEY
  4. Konfigurieren Sie Webhooks:
    • Gehen Sie zu Entwickler > Webhooks
    • Erstellen Sie eine Webhook-URL für Zahlungsbenachrichtigungen
    • Kopieren Sie den Webhook-Geheimschlüssel in die Umgebungsvariable

Integration

Wählen Sie den Integrationspfad, der zu Ihrem Anwendungsfall passt:
  • Checkout-Sitzungen (empfohlen): Am besten für die meisten Integrationen. Erstellen Sie eine Sitzung auf Ihrem Server und leiten Sie die Kunden zu einem sicheren, gehosteten Checkout weiter.
  • Overlay-Checkout (eingebettet): Verwenden Sie dies, wenn Sie eine In-Page-Erfahrung benötigen, die den gehosteten Checkout auf Ihrer Website einbettet.
  • Statische Zahlungslinks: No-Code, sofort teilbare URLs zur schnellen Zahlungsabwicklung.
  • Dynamische Zahlungslinks: Programmgesteuert erstellte Links. Checkout-Sitzungen werden jedoch empfohlen und bieten mehr Flexibilität.

1. Checkout-Sitzungen

Verwenden Sie Checkout-Sitzungen, um eine sichere, gehostete Checkout-Erfahrung für Einmalzahlungen oder Abonnements zu schaffen. Sie erstellen eine Sitzung auf Ihrem Server und leiten den Kunden dann zur zurückgegebenen checkout_url weiter.
Checkout-Sitzungen sind standardmäßig 24 Stunden gültig. Wenn Sie confirm=true übergeben, sind die Sitzungen 15 Minuten gültig und alle erforderlichen Felder müssen bereitgestellt werden.
1

Erstellen Sie eine Checkout-Sitzung

Wählen Sie Ihr bevorzugtes SDK oder rufen Sie die REST-API auf.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  customer: { email: '[email protected]', name: 'John Doe' },
  return_url: 'https://yourapp.com/checkout/success',
});
2

Leiten Sie den Kunden zum Checkout weiter

Nach der Erstellung der Sitzung leiten Sie zu checkout_url weiter, um den gehosteten Ablauf zu starten.
// Example in a browser context
window.location.href = session.checkout_url;
Bevorzugen Sie Checkout-Sitzungen für den schnellsten und zuverlässigsten Weg, um Zahlungen zu akzeptieren. Für erweiterte Anpassungen siehe den vollständigen Leitfaden zu Checkout-Sitzungen und die API-Referenz.

2. Overlay-Checkout

Für eine nahtlose In-Page-Checkout-Erfahrung erkunden Sie unsere Overlay-Checkout Integration, die es Kunden ermöglicht, Zahlungen abzuschließen, ohne Ihre Website zu verlassen. Statische Zahlungslinks ermöglichen es Ihnen, Zahlungen schnell zu akzeptieren, indem Sie eine einfache URL teilen. Sie können das Checkout-Erlebnis anpassen, indem Sie Abfrageparameter übergeben, um Kundendetails vorauszufüllen, Formularfelder zu steuern und benutzerdefinierte Metadaten hinzuzufügen.
1

Konstruktion Ihres Zahlungslinks

Beginnen Sie mit der Basis-URL und fügen Sie Ihre Produkt-ID hinzu:
https://checkout.dodopayments.com/buy/{productid}
2

Fügen Sie Kernparameter hinzu

Fügen Sie wesentliche Abfrageparameter hinzu:
  • quantity
    integer
    default:"1"
    Anzahl der zu kaufenden Artikel.
  • redirect_url
    string
    required
    URL, um nach Abschluss der Zahlung weiterzuleiten.
Die Weiterleitungs-URL enthält Zahlungsdetails als Abfrageparameter, zum Beispiel:
https://example.com/?payment_id=pay_ts2ySpzg07phGeBZqePbH&status=succeeded
3

Kundendaten vorausfüllen (optional)

Fügen Sie Kunden- oder Rechnungsfelder als Abfrageparameter hinzu, um den Checkout zu optimieren.
  • fullName
    string
    Vollständiger Name des Kunden (wird ignoriert, wenn firstName oder lastName angegeben sind).
  • firstName
    string
    Vorname des Kunden.
  • lastName
    string
    Nachname des Kunden.
  • email
    string
    E-Mail-Adresse des Kunden.
  • country
    string
    Land des Kunden.
  • addressLine
    string
    Straßenadresse.
  • city
    string
    Stadt.
  • state
    string
    Bundesland oder Provinz.
  • zipCode
    string
    Postleitzahl.
  • showDiscounts
    boolean
    true oder false
4

Formularfelder steuern (optional)

Sie können bestimmte Felder deaktivieren, um sie für den Kunden schreibgeschützt zu machen. Dies ist nützlich, wenn Sie bereits die Kundendaten haben (z. B. bei angemeldeten Benutzern).
Um ein Feld zu deaktivieren, geben Sie seinen Wert an und setzen Sie das entsprechende disable… Flag auf true:
&[email protected]&disableEmail=true
FeldDeaktivierungsflagErforderlicher Parameter
Vollständiger NamedisableFullNamefullName
VornamedisableFirstNamefirstName
NachnamedisableLastNamelastName
E-MaildisableEmailemail
LanddisableCountrycountry
AdresszeiledisableAddressLineaddressLine
StadtdisableCitycity
BundeslanddisableStatestate
PLZdisableZipCodezipCode
Das Deaktivieren von Feldern hilft, versehentliche Änderungen zu verhindern und die Datenkonsistenz sicherzustellen.
Das Setzen von showDiscounts=false deaktiviert und verbirgt den Rabattbereich im Checkout-Formular. Verwenden Sie dies, wenn Sie verhindern möchten, dass Kunden während des Checkouts Gutscheine oder Aktionscodes eingeben.
5

Fügen Sie erweiterte Steuerungen hinzu (optional)

  • paymentCurrency
    string
    Gibt die Zahlungswährung an. Standardmäßig die Währung des Rechnungslandes.
  • showCurrencySelector
    boolean
    default:"true"
    Währungsauswahl anzeigen oder ausblenden.
  • paymentAmount
    integer
    Betrag in Cent (nur für Pay What You Want-Preise).
  • metadata_*
    string
    Benutzerdefinierte Metadatenfelder (z. B. metadata_orderId=123).
6

Teilen Sie den Link

Senden Sie den vollständigen Zahlungslink an Ihren Kunden. Wenn sie ihn besuchen, werden alle Abfrageparameter gesammelt und mit einer Sitzungs-ID gespeichert. Die URL wird dann vereinfacht, um nur den Sitzungsparameter zu enthalten (z. B. ?session=sess_1a2b3c4d). Die gespeicherten Informationen bleiben bei Seitenaktualisierungen erhalten und sind während des gesamten Checkout-Prozesses zugänglich.
Das Checkout-Erlebnis des Kunden ist jetzt optimiert und basierend auf Ihren Parametern personalisiert.
Bevorzugen Sie Checkout-Sitzungen für die meisten Anwendungsfälle, sie bieten mehr Flexibilität und Kontrolle.
Erstellt über einen API-Aufruf oder unser SDK mit Kundendaten. Hier ist ein Beispiel: Es gibt zwei APIs zur Erstellung dynamischer Zahlungslinks: Der folgende Leitfaden bezieht sich auf die Erstellung von Einmal-Zahlungslinks. Für detaillierte Anweisungen zur Integration von Abonnements siehe diesen Leitfaden zur Abonnementintegration.
Stellen Sie sicher, dass Sie payment_link = true übergeben, um den Zahlungslink zu erhalten.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
const payment = await client.payments.create({
payment_link: true,
billing: { city: 'city', country: 'AF', state: 'state', street: 'street', zipcode: 0 },
customer: { email: '[email protected]', name: 'name' },
product_cart: [{ product_id: 'product_id', quantity: 0 }],
});

console.log(payment.payment_id);
}

main();
Nach der Erstellung des Zahlungslinks leiten Sie Ihre Kunden weiter, um ihre Zahlung abzuschließen.

Implementierung von Webhooks

Richten Sie einen API-Endpunkt ein, um Zahlungsbenachrichtigungen zu empfangen. Hier ist ein Beispiel mit Next.js:
import { Webhook } from "standardwebhooks";
import { headers } from "next/headers";
import { WebhookPayload } from "@/types/api-types";

const webhook = new Webhook(process.env.DODO_WEBHOOK_KEY!); // Replace with your secret key generated from the Dodo Payments Dashboard

export async function POST(request: Request) {
  const headersList = headers();
  const rawBody = await request.text();

  const webhookHeaders = {
    "webhook-id": headersList.get("webhook-id") || "",
    "webhook-signature": headersList.get("webhook-signature") || "",
    "webhook-timestamp": headersList.get("webhook-timestamp") || "",
  };

  await webhook.verify(rawBody, webhookHeaders);
  const payload = JSON.parse(rawBody) as WebhookPayload;
  
  // Process the payload according to your business logic
}
Unsere Webhook-Implementierung folgt der Standard-Webhooks Spezifikation. Für die Definitionen der Webhook-Typen siehe unseren Webhook-Ereignisleitfaden. Sie können dieses Projekt mit einer Demo-Implementierung auf GitHub mit Next.js und TypeScript einsehen. Sie können die Live-Implementierung hier ansehen.