Erstellen Sie sichere, gehostete Checkout-Erlebnisse, die den vollständigen Zahlungsfluss sowohl für einmalige Käufe als auch für Abonnements mit vollständiger Anpassungssteuerung abwickeln.
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.
import DodoPayments from 'dodopayments';// Initialize the Dodo Payments clientconst 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 routeapp.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' }); }});
Kopieren
import osfrom dodopayments import DodoPayments# Initialize the Dodo Payments clientclient = DodoPayments( bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"), # This is the default and can be omitted environment="test_mode", # defaults to "live_mode")def create_checkout_session(): """ Create a checkout session for a single product with customer data pre-filled. Returns the session object containing checkout_url for customer redirection. """ try: session = client.checkout_sessions.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 checkout 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 print(f"Checkout URL: {session.checkout_url}") print(f"Session ID: {session.session_id}") return session except Exception as error: print(f"Failed to create checkout session: {error}") raise error# Example usage in a Flask routefrom flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/create-checkout', methods=['POST'])def create_checkout(): try: session = create_checkout_session() return jsonify({"checkout_url": session.checkout_url}) except Exception as error: return jsonify({"error": "Failed to create checkout session"}), 500
Kopieren
// Direct API call using fetch - useful for any JavaScript environmentasync function createCheckoutSession() { try { const response = await fetch('https://test.dodopayments.com/checkouts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}` }, body: JSON.stringify({ // 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 checkout 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' } }) }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const session = await response.json(); // 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: Redirect user to checkoutcreateCheckoutSession().then(session => { window.location.href = session.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.
Kopieren
// Redirect immediatelywindow.location.href = session.checkout_url;// Or open in new windowwindow.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.
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.
Anzeigen Eigenschaften des Produkt-Warenkorbartikels
Betrag, den der Kunde zahlt, wenn pay_what_you_want aktiviert ist. Wenn deaktiviert, wird dieses Feld ignoriert.Format: Wird in der niedrigsten Währungseinheit dargestellt (z. B. Cent für USD). Um beispielsweise 1,00 $ zu berechnen, übergeben Sie 100.
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.
Kundeninformationen. Sie können entweder einen vorhandenen Kunden mit seiner ID anhängen oder während des Checkouts einen neuen Kundenrekord erstellen.
Vorhandenen Kunden anhängen
Neuer Kunde
Hängen Sie einen vorhandenen Kunden an die Checkout-Sitzung an, indem Sie seine ID verwenden.
Die eindeutige Kennung eines vorhandenen Kunden. Verwenden Sie dies, um die Checkout-Sitzung an einen vorhandenen Kunden anzuhängen, anstatt einen neuen zu erstellen.
Erstellen Sie während des Checkouts einen neuen Kundenrekord.
Telefonnummer des Kunden im internationalen Format. Erforderlich für einige Zahlungsmethoden und zur Betrugsprävention.Format: Einschließlich Ländervorwahl, z. B. "+1234567890" für US-Nummern
Vollständige Straßenadresse einschließlich Hausnummer, Straßenname und Wohnungs-/Einheitsnummer, falls zutreffend.Beispiel: "123 Main St, Apt 4B" oder "456 Oak Avenue"
Bundesland, Provinz oder Regionsname. Verwenden Sie vollständige Namen oder standardisierte Abkürzungen.Beispiel: "California" oder "CA", "Ontario" oder "ON"
Zweibuchstabiger ISO-Ländercode (ISO 3166-1 alpha-2). Dieses Feld ist immer erforderlich, wenn billing_address bereitgestellt wird.Beispiele: "US" (Vereinigte Staaten), "CA" (Kanada), "GB" (Vereinigtes Königreich), "DE" (Deutschland)
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.
Ü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.
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.
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.
Produktpreis für die erste Abbuchung des Kunden. Wenn nicht angegeben, wird der gespeicherte Preis des Produkts verwendet.Format: Wird in der niedrigsten Währungseinheit dargestellt (z. B. Cent für USD). Um beispielsweise 1,00 $ zu berechnen, übergeben Sie 100.
Optionale Überschreibung der Produktbeschreibung für Abrechnung und Positionen. Wenn nicht angegeben, wird die gespeicherte Beschreibung des Produkts verwendet.
Ob adaptive Währungsgebühren im Produktpreis enthalten sein sollen (wahr) oder zusätzlich berechnet werden sollen (falsch). Wird ignoriert, wenn adaptive Preisgestaltung nicht aktiviert ist.
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.
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:
Kopieren
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:
Kopieren
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 linkconsole.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.
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.
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.
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.