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: '[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 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": "[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 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: '[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' } }) }); 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 umzuleiten, können Sie den Checkout direkt in Ihre 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 umgeleitet.
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.
Gemischte Kasse: Sie können Produkte mit einmaliger Zahlung und Abonnementprodukte in derselben Checkout-Sitzung kombinieren. Dies ermöglicht leistungsstarke Anwendungsfälle wie Einrichtungsgebühren mit Abonnements, Hardware-Bundles mit SaaS und mehr.
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 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 Liste der Produkte 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"
Name des Bundesstaates, der Provinz oder der Region. 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, 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.
Ü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 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.
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.
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 1,00 $ zu berechnen, übergeben Sie 100.
Optionale Überschreibung der Produktbeschreibung für die Abrechnung und Zeilenartikel. Wenn nicht angegeben, wird die gespeicherte Beschreibung des Produkts verwendet.
Ob adaptive Währungsgebühren im Produktpreis enthalten sein sollen (true) oder zusätzlich (false). 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 den Sofort-Checkout
Verwenden Sie die gespeicherte Zahlungsmethode eines Kunden, um eine Checkout-Sitzung zu erstellen, die sofort verarbeitet wird, ohne die Erfassung der Zahlungsmethode:
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 der 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 Zahlungswährung kompatibel sein. Dies ermöglicht One-Click-Käufe für wiederkehrende Kunden.
Generieren 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: '[email protected]', 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 sind perfekt für SMS, E-Mail oder das Teilen in sozialen Medien. Sie sind leichter zu merken und schaffen mehr Vertrauen bei den Kunden als lange URLs.
Verwenden Sie redirect_immediately: true, wenn Sie eine benutzerdefinierte Erfolgsseite haben, die eine bessere Benutzererfahrung bietet als die standardmäßige Zahlungserfolgsseite. Dies ist besonders nützlich für mobile Apps und eingebettete Checkout-Flows.
Wenn redirect_immediately aktiviert ist, werden die Kunden sofort nach Abschluss der Zahlung zu Ihrer return_url weitergeleitet, wobei die standardmäßige Erfolgsseite vollständig übersprungen wird.
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 weitergeben, 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 wird automatisch die fehlenden Details sammeln, 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.