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: '[email protected]',
        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');
3

Behandeln Sie die Rückkehr

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

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
required
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.
Wichtig: Mehrere Produktkörbe dürfen nur einmalige Zahlungsprodukte enthalten. Sie können Abonnementprodukte nicht mit einmaligen Produkten in derselben Checkout-Sitzung mischen.
Finden Sie Ihre Produkt-IDs: Sie können Produkt-IDs in Ihrem Dodo Payments-Dashboard unter Produkte → Details anzeigen finden oder die Liste der Produkte 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, für bestimmte Märkte oder Geschäftsanforderungen zu optimieren.Verfügbare Optionen: credit, debit, upi_collect, upi_intent, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, sepa, ach, 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
default:"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
default:"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 zur Sitzung zu speichern.
force_3ds
boolean
Überschreiben Sie das standardmäßige 3DS-Verhalten des Händlers für diese Sitzung.
minimal_address
boolean
default:"false"
Aktivieren Sie den Modus zur minimalen Adresssammlung. 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 Adresssammlung 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: '[email protected]',
    name: 'John Doe'
  },
  return_url: 'https://yoursite.com/success'
});

2. Multi-Produkt-Warenkorb

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: '[email protected]',
    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: '[email protected]',
    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: '[email protected]',
    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: '[email protected]',
    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: '[email protected]',
    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: '[email protected]',
    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: '[email protected]'
  }
});

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: '[email protected]',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

9. Regionale Zahlungsmethoden (UPI für Indien)

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_online_course_hindi',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'upi_collect',
    'upi_intent',
    'credit',
    'debit'
  ],
  customer: {
    email: '[email protected]',
    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

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_luxury_watch',
      quantity: 1
    }
  ],
  allowed_payment_method_types: [
    'klarna',
    'affirm',
    'afterpay_clearpay',
    'credit',
    'debit'
  ],
  customer: {
    email: '[email protected]',
    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'
  }
});

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 erforderlich. Sie können einfach die Informationen übergeben, die Sie haben, und wir kümmern uns um den Rest. Zum Beispiel:
  • Wenn Sie nur das Rechnungsland des Kunden kennen, geben Sie nur das an.
  • Der Checkout-Prozess sammelt automatisch die fehlenden Details, bevor der Kunde zur Zahlungsseite weitergeleitet wird.
  • Wenn Sie hingegen bereits alle erforderlichen Informationen haben und direkt zur Zahlungsseite springen 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 der Anfrage-Nutzlast

Passen Sie die Anfrage-Nutzlast gemäß dem Format der Checkout-Sitzungen an.
3

Das war's!

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