Zum Hauptinhalt springen
Sitzungsvalidität: Checkout-Sitzungen sind standardmäßig 24 Stunden gültig. Wenn Sie confirm=true in Ihrer Anfrage übergeben, ist die Sitzung nur 15 Minuten gültig.

Voraussetzungen

1

Dodo Payments-Konto

Sie benötigen ein aktives Dodo Payments-Händlerkonto mit API-Zugriff.
2

API-Anmeldeinformationen

Generieren Sie Ihre API-Anmeldeinformationen im Dodo Payments-Dashboard:
3

Produkte einrichten

Erstellen Sie Ihre Produkte im Dodo Payments-Dashboard, bevor Sie Checkout-Sitzungen implementieren.

Erstellen Ihrer ersten Checkout-Sitzung

import DodoPayments from 'dodopayments';

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

async function createCheckoutSession() {
  try {
    const session = await client.checkoutSessions.create({
      // Products to sell - use IDs from your Dodo Payments dashboard
      product_cart: [
        {
          product_id: 'prod_123', // Replace with your actual product ID
          quantity: 1
        }
      ],
      
      // Pre-fill customer information to reduce friction
      customer: {
        email: 'customer@example.com',
        name: 'John Doe',
        phone_number: '+1234567890'
      },
      
      // Billing address for tax calculation and compliance
      billing_address: {
        street: '123 Main St',
        city: 'San Francisco',
        state: 'CA',
        country: 'US', // Required: ISO 3166-1 alpha-2 country code
        zipcode: '94102'
      },
      
      // Where to redirect after successful payment
      return_url: 'https://yoursite.com/checkout/success',
      
      // Custom data for your internal tracking
      metadata: {
        order_id: 'order_123',
        source: 'web_app'
      }
    });

    // Redirect your customer to this URL to complete payment
    console.log('Checkout URL:', session.checkout_url);
    console.log('Session ID:', session.session_id);
    
    return session;
    
  } catch (error) {
    console.error('Failed to create checkout session:', error);
    throw error;
  }
}

// Example usage in an Express.js route
app.post('/create-checkout', async (req, res) => {
  try {
    const session = await createCheckoutSession();
    res.json({ checkout_url: session.checkout_url });
  } catch (error) {
    res.status(500).json({ error: 'Failed to create checkout session' });
  }
});

API-Antwort

Alle oben genannten Methoden geben die gleiche Antwortstruktur zurück:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Holen Sie sich die Checkout-URL

Extrahieren Sie die checkout_url aus der API-Antwort.
2

Leiten Sie Ihren Kunden weiter

Leiten Sie Ihren Kunden zur Checkout-URL, um den Kauf abzuschließen.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.open(session.checkout_url, '_blank');
Alternative Integrationsoptionen: Anstatt weiterzuleiten, können Sie den Checkout direkt auf Ihrer Seite einbetten, indem Sie Overlay Checkout (Modal-Overlay) oder Inline Checkout (vollständig eingebettet) verwenden. Beide Optionen verwenden dieselbe Checkout-Sitzungs-URL.
3

Behandeln Sie die Rückkehr

Nach der Zahlung werden die Kunden zu Ihrem return_url mit zusätzlichen Abfrageparametern für den Zahlungsstatus weitergeleitet.

Anfragekörper

Erforderliche Felder

Wesentliche Felder, die für jede Checkout-Sitzung benötigt werden

Optionale Felder

Zusätzliche Konfiguration zur Anpassung Ihres Checkout-Erlebnisses

Erforderliche Felder

product_cart
array
erforderlich
Array von Produkten, die in die Checkout-Sitzung aufgenommen werden sollen. Jedes Produkt muss eine gültige product_id aus Ihrem Dodo Payments-Dashboard haben.
Gemischter Checkout: Sie können einmalige Zahlungsprodukte und Abonnementprodukte in derselben Checkout-Sitzung kombinieren. Dies ermöglicht leistungsstarke Anwendungsfälle wie Einrichtungsgebühren mit Abonnements, Hardware-Bundles mit SaaS und mehr.
Finden Sie Ihre Produkt-IDs: Sie können Produkt-IDs in Ihrem Dodo Payments-Dashboard unter Produkte → Details anzeigen finden oder die List Products API verwenden.

Optionale Felder

Konfigurieren Sie diese Felder, um das Checkout-Erlebnis anzupassen und Geschäftslogik in Ihren Zahlungsfluss einzufügen.
customer
object
Kundeninformationen. Sie können entweder einen vorhandenen Kunden mit seiner ID anhängen oder während des Checkouts einen neuen Kundenrekord erstellen.
Hängen Sie einen vorhandenen Kunden an die Checkout-Sitzung an, indem Sie seine ID verwenden.
billing_address
object
Rechnungsadresse für eine genaue Steuerberechnung, Betrugsprävention und Einhaltung von Vorschriften.
Wenn confirm auf true gesetzt ist, werden alle Felder der Rechnungsadresse für die erfolgreiche Sitzungscreation erforderlich.
allowed_payment_method_types
array
Steuern Sie, welche Zahlungsmethoden den Kunden während des Checkouts zur Verfügung stehen. Dies hilft, spezifische Märkte oder Geschäftsanforderungen zu optimieren.Verfügbare Optionen: credit, debit, upi_collect, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, cashapp, multibanco, bancontact_card, eps, ideal, przelewy24, paypal
Kritisch: Stellen Sie immer sicher, dass credit und debit als Fallback-Optionen enthalten sind, um Checkout-Fehler zu vermeiden, wenn bevorzugte Zahlungsmethoden nicht verfügbar sind.
Beispiel:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Überschreiben Sie die standardmäßige Währungswahl mit einer festen Rechnungswährung. Verwendet ISO 4217-Währungscodes.Unterstützte Währungen: USD, EUR, GBP, CAD, AUD, INR, und mehrBeispiel: "USD" für US-Dollar, "EUR" für Euro
Dieses Feld ist nur wirksam, wenn adaptive Preisgestaltung aktiviert ist. Wenn adaptive Preisgestaltung deaktiviert ist, wird die Standardwährung des Produkts verwendet.
show_saved_payment_methods
boolean
Standard:"false"
Zeigen Sie zuvor gespeicherte Zahlungsmethoden für wiederkehrende Kunden an, um die Checkout-Geschwindigkeit und Benutzererfahrung zu verbessern.
return_url
string
URL, um Kunden nach erfolgreicher Zahlung oder Stornierung weiterzuleiten.
confirm
boolean
Standard:"false"
Wenn wahr, werden alle Sitzungsdetails sofort finalisiert. Die API gibt einen Fehler zurück, wenn erforderliche Daten fehlen.
discount_code
string
Wenden Sie einen Rabattcode auf die Checkout-Sitzung an.
metadata
object
Benutzerdefinierte Schlüssel-Wert-Paare, um zusätzliche Informationen über die Sitzung zu speichern.
force_3ds
boolean
Überschreiben Sie das standardmäßige 3DS-Verhalten des Händlers für diese Sitzung.
minimal_address
boolean
Standard:"false"
Aktivieren Sie den Modus zur minimalen Adressensammlung. Wenn aktiviert, sammelt der Checkout nur:
  • Land: Immer erforderlich zur Steuerbestimmung
  • PLZ/Postleitzahl: Nur in Regionen, in denen es für die Berechnung von Verkaufssteuern, Mehrwertsteuer oder GST erforderlich ist
Dies reduziert erheblich die Checkout-Reibung, indem unnötige Formularfelder eliminiert werden.
Aktivieren Sie die minimale Adresse für eine schnellere Checkout-Abwicklung. Die vollständige Adressensammlung bleibt für Unternehmen verfügbar, die vollständige Rechnungsdetails benötigen.
customization
object
Passen Sie das Erscheinungsbild und Verhalten der Checkout-Oberfläche an.
feature_flags
object
Konfigurieren Sie spezifische Funktionen und Verhaltensweisen für die Checkout-Sitzung.
subscription_data
object
Zusätzliche Konfiguration für Checkout-Sitzungen, die Abonnementprodukte enthalten.

Anwendungsbeispiele

Hier sind 10 umfassende Beispiele, die verschiedene Konfigurationen von Checkout-Sitzungen für verschiedene Geschäftsszenarien zeigen:

1. Einfacher Checkout für ein einzelnes Produkt

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_ebook_guide',
      quantity: 1
    }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'John Doe'
  },
  return_url: 'https://yoursite.com/success'
});

2. Warenkorb mit mehreren Produkten

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_laptop',
      quantity: 1
    },
    {
      product_id: 'prod_mouse',
      quantity: 2
    },
    {
      product_id: 'prod_warranty',
      quantity: 1
    }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'John Doe',
    phone_number: '+1234567890'
  },
  billing_address: {
    street: '123 Tech Street',
    city: 'San Francisco',
    state: 'CA',
    country: 'US',
    zipcode: '94102'
  },
  return_url: 'https://electronics-store.com/order-confirmation'
});

3. Abonnement mit Testphase

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_plan',
      quantity: 1
    }
  ],
  subscription_data: {
    trial_period_days: 14
  },
  customer: {
    email: 'user@startup.com',
    name: 'Jane Smith'
  },
  return_url: 'https://saas-app.com/onboarding',
  metadata: {
    plan_type: 'professional',
    referral_source: 'google_ads'
  }
});

4. Vorab bestätigter Checkout

Wenn confirm auf true gesetzt ist, wird der Kunde direkt zur Checkout-Seite geleitet, wobei alle Bestätigungsschritte umgangen werden.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_course',
      quantity: 1
    }
  ],
  customer: {
    email: 'student@university.edu',
    name: 'Alex Johnson',
    phone_number: '+1555123456'
  },
  billing_address: {
    street: '456 University Ave',
    city: 'Boston',
    state: 'MA',
    country: 'US',
    zipcode: '02134'
  },
  confirm: true,
  return_url: 'https://learning-platform.com/course-access',
  metadata: {
    course_category: 'programming',
    enrollment_date: '2024-01-15'
  }
});

5. Checkout mit Währungsüberschreibung

Die billing_currency Überschreibung tritt nur in Kraft, wenn die adaptive Währung in Ihren Kontoeinstellungen aktiviert ist. Wenn die adaptive Währung deaktiviert ist, hat dieser Parameter keine Auswirkungen.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_consulting_service',
      quantity: 1
    }
  ],
  customer: {
    email: 'client@company.co.uk',
    name: 'Oliver Williams'
  },
  billing_address: {
    street: '789 Business Park',
    city: 'London',
    state: 'England',
    country: 'GB',
    zipcode: 'SW1A 1AA'
  },
  billing_currency: 'GBP',
  feature_flags: {
    allow_currency_selection: true,
    allow_tax_id: true
  },
  return_url: 'https://consulting-firm.com/service-confirmation'
});

6. Gespeicherte Zahlungsmethoden für wiederkehrende Kunden

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  customer: {
    email: 'returning.customer@example.com',
    name: 'Robert Johnson',
    phone_number: '+1555987654'
  },
  show_saved_payment_methods: true,
  feature_flags: {
    allow_phone_number_collection: true,
    always_create_new_customer: false
  },
  return_url: 'https://subscription-service.com/welcome-back',
  metadata: {
    customer_tier: 'premium',
    account_age: 'returning'
  }
});

7. B2B-Checkout mit Steuer-ID-Sammlung

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_enterprise_license',
      quantity: 5
    }
  ],
  customer: {
    email: 'procurement@enterprise.com',
    name: 'Sarah Davis',
    phone_number: '+1800555000'
  },
  billing_address: {
    street: '1000 Corporate Blvd',
    city: 'New York',
    state: 'NY',
    country: 'US',
    zipcode: '10001'
  },
  feature_flags: {
    allow_tax_id: true,
    allow_phone_number_collection: true,
    always_create_new_customer: false
  },
  return_url: 'https://enterprise-software.com/license-delivery',
  metadata: {
    customer_type: 'enterprise',
    contract_id: 'ENT-2024-001',
    sales_rep: 'john.sales@company.com'
  }
});

8. Checkout im Dunkelmodus mit Rabattcode

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_gaming_chair',
      quantity: 1
    }
  ],
  discount_code: 'BLACKFRIDAY2024',
  customization: {
    theme: 'dark',
    show_order_details: true,
    show_on_demand_tag: false
  },
  feature_flags: {
    allow_discount_code: true
  },
  customer: {
    email: 'gamer@example.com',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

9. Regionale Zahlungsmethoden (UPI für Indien)

Für detaillierte Informationen zur UPI-Konfiguration und -Tests siehe die Indien Zahlungsmethoden Seite.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_online_course_hindi',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'upi_collect',
    'credit',
    'debit'
  ],
  customer: {
    email: 'student@example.in',
    name: 'Priya Sharma',
    phone_number: '+919876543210'
  },
  billing_address: {
    street: 'MG Road',
    city: 'Bangalore',
    state: 'Karnataka',
    country: 'IN',
    zipcode: '560001'
  },
  billing_currency: 'INR',
  return_url: 'https://education-platform.in/course-access',
  metadata: {
    region: 'south_india',
    language: 'hindi'
  }
});

10. BNPL (Jetzt kaufen, später bezahlen) Checkout

Für detaillierte Informationen zur BNPL-Konfiguration und -Tests siehe die Jetzt kaufen, später bezahlen (BNPL) Seite.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_luxury_watch',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'klarna',
    'afterpay_clearpay',
    'credit',
    'debit'
  ],
  customer: {
    email: 'fashion.lover@example.com',
    name: 'Emma Thompson',
    phone_number: '+1234567890'
  },
  billing_address: {
    street: '555 Fashion Ave',
    city: 'Los Angeles',
    state: 'CA',
    country: 'US',
    zipcode: '90210'
  },
  feature_flags: {
    allow_phone_number_collection: true
  },
  return_url: 'https://luxury-store.com/purchase-confirmation',
  metadata: {
    product_category: 'luxury',
    price_range: 'high_value'
  }
});

11. Verwendung vorhandener Zahlungsmethoden für sofortigen Checkout

Verwenden Sie eine gespeicherte Zahlungsmethode des Kunden, um eine Checkout-Sitzung zu erstellen, die sofort verarbeitet wird, wobei die Erfassung der Zahlungsmethode übersprungen wird:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_plan',
      quantity: 1
    }
  ],
  customer: {
    customer_id: 'cus_123'  // Required when using payment_method_id
  },
  payment_method_id: 'pm_abc123',  // Use customer's saved payment method
  confirm: true,  // Required when using payment_method_id
  return_url: 'https://yourapp.com/success'
});
Bei Verwendung von payment_method_id, muss confirm auf true gesetzt werden, und eine vorhandene customer_id muss bereitgestellt werden. Die Zahlungsmethode wird auf ihre Berechtigung in Bezug auf die Währung der Zahlung validiert.
Die Zahlungsmethode muss dem Kunden gehören und mit der Zahlungsmethode kompatibel sein. Dies ermöglicht Eins-Click-Käufe für wiederkehrende Kunden.
Erzeugen Sie verkürzte, teilbare Zahlungslinks mit benutzerdefinierten Slugs:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  short_link: true,  // Generate a shortened payment link
  return_url: 'https://yourapp.com/success',
  customer: {
    email: 'customer@example.com',
    name: 'John Doe'
  }
});

// The checkout_url will be a shortened, cleaner link
console.log(session.checkout_url);  // e.g., https://checkout.dodopayments.com/buy/abc123
Kurze Links eignen sich perfekt für SMS-, E-Mail- oder soziale Medienübertragungen. Sie sind leichter zu merken und schaffen mehr Kundenvertrauen als lange URLs.

13. Zahlungserfolgsseite mit sofortiger Weiterleitung überspringen

Leiten Sie Kunden sofort nach Abschluss der Zahlung weiter und umgehen Sie die Standard-Erfolgsseite:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_digital_product',
      quantity: 1
    }
  ],
  feature_flags: {
    redirect_immediately: true  // Skip success page, redirect immediately
  },
  return_url: 'https://yourapp.com/success',
  customer: {
    email: 'customer@example.com',
    name: 'Jane Smith'
  }
});
Verwenden Sie redirect_immediately: true, wenn Sie eine benutzerdefinierte Erfolgsseite haben, die eine bessere Benutzererfahrung bietet als die Standard-Zahlungserfolgsseite. Dies ist besonders nützlich für mobile Apps und eingebettete Checkout-Flows.
Wenn redirect_immediately aktiviert ist, werden die Kunden direkt nach Abschluss der Zahlung zu Ihrem return_url weitergeleitet, wodurch die Standard-Erfolgsseite vollständig übersprungen wird.

Vorschau von Checkout-Sitzungen

Bevor Sie eine Checkout-Sitzung erstellen, können Sie eine Preisübersicht einschließlich Steuern, Rabatten und Gesamtsummen anzeigen. Dies ist nützlich, um den Kunden vor dem Checkout genaue Preise anzuzeigen.
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'prod_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.subtotal);
console.log('Tax:', preview.tax);
console.log('Discount:', preview.discount);
console.log('Total:', preview.total);

Vorschau API-Referenz

Sehen Sie sich die vollständige Dokumentation des Vorschauendpunkts an.

Wichtige Unterschiede

Früher mussten Sie beim Erstellen eines Zahlungslinks mit dynamischen Links die vollständige Rechnungsadresse des Kunden angeben. Mit Checkout-Sitzungen ist dies nicht mehr notwendig. Sie können einfach die Informationen, die Sie haben, weitergeben, und wir kümmern uns um den Rest. Zum Beispiel:
  • Wenn Sie nur das Rechnungsland des Kunden kennen, geben Sie nur dieses an.
  • Der Checkout-Flow sammelt automatisch die fehlenden Details, bevor der Kunde zur Zahlungsseite weitergeleitet wird.
  • Andererseits, wenn Sie bereits alle erforderlichen Informationen haben und direkt zur Zahlungsseite überspringen möchten, können Sie den vollständigen Datensatz übergeben und confirm=true in Ihrem Anfragekörper einfügen.

Migrationsprozess

Die Migration von dynamischen Links zu Checkout-Sitzungen ist unkompliziert:
1

Aktualisieren Sie Ihre Integration

Aktualisieren Sie Ihre Integration, um die neue API oder SDK-Methode zu verwenden.
2

Anpassung des Anfrage-Payloads

Passen Sie den Anfrage-Payload gemäß dem Format für Checkout-Sitzungen an.
3

Das war's!

Ja. Es sind keine zusätzlichen Handhabungen oder speziellen Migrationsschritte erforderlich.