Sessionens giltighet: Checkout-sessioner är giltiga i 24 timmar som standard. Om du skickar confirm=true i din förfrågan, kommer sessionen endast att vara giltig i 15 minuter.
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' }); }});
Kopiera
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
Kopiera
// 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;});
Dirigera din kund till checkout-URL:en för att slutföra sitt köp.
Kopiera
// Redirect immediatelywindow.location.href = session.checkout_url;// Or open in new windowwindow.open(session.checkout_url, '_blank');
Alternativa integrationsalternativ: Istället för att omdirigera kan du bädda in checkout direkt på din sida med hjälp av Overlay Checkout (modal overlay) eller Inline Checkout (fullständigt inbäddad). Båda alternativen använder samma checkout-session-URL.
3
Hantera återkomsten
Efter betalning omdirigeras kunder till din return_url med ytterligare frågeparametrar för betalningsstatus.
Array av produkter som ska ingå i checkout-sessionen. Varje produkt måste ha en giltig product_id från din Dodo Payments-instrumentpanel.
Blandad checkout: Du kan kombinera engångsbetalningsprodukter och prenumerationsprodukter i samma checkout-session. Detta möjliggör kraftfulla användningsfall som installationsavgifter med prenumerationer, hårdvarubundlar med SaaS och mer.
Beloppet som kunden betalar om pay_what_you_want är aktiverat. Om det är inaktiverat kommer detta fält att ignoreras.Format: Representerat i den lägsta valören av valutan (t.ex. cent för USD). Till exempel, för att ta ut $1,00, skicka 100.
Hitta dina produkt-ID:n: Du kan hitta produkt-ID:n i din Dodo Payments-instrumentpanel under Produkter → Visa detaljer, eller genom att använda List Products API.
Kundens telefonnummer i internationellt format. Obligatorisk för vissa betalningsmetoder och bedrägeriförebyggande åtgärder.Format: Inkludera landskod, t.ex. "+1234567890" för amerikanska nummer
Tvåbokstavskod för land (ISO 3166-1 alpha-2). Detta fält är alltid obligatoriskt när faktureringsadress tillhandahålls.Exempel: "US" (USA), "CA" (Kanada), "GB" (Storbritannien), "DE" (Tyskland)
Kontrollera vilka betalningsmetoder som är tillgängliga för kunder under checkout. Detta hjälper till att optimera för specifika marknader eller affärskrav.Tillgängliga alternativ: 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
Kritiskt: Inkludera alltid credit och debit som fallback-alternativ för att förhindra checkout-fel när föredragna betalningsmetoder inte är tillgängliga.
Överskriv standardvalutan med en fast faktureringsvaluta. Använder ISO 4217-valutakoder.Stödda valutor: USD, EUR, GBP, CAD, AUD, INR, och flerExempel: "USD" för amerikanska dollar, "EUR" för euro
Detta fält är endast effektivt när adaptiv prissättning är aktiverad. Om adaptiv prissättning är inaktiverad kommer produktens standardvaluta att användas.
Aktivera läge för minimal adressinsamling. När det är aktiverat samlar checkout endast in:
Land: Alltid obligatoriskt för skattebestämning
ZIP/Postnummer: Endast i regioner där det är nödvändigt för försäljningsskatt, moms eller GST-beräkning
Detta minskar avsevärt checkout-friktionen genom att eliminera onödiga formulärfält.
Aktivera minimal adress för snabbare checkout-slutförande. Fullständig adressinsamling förblir tillgänglig för företag som kräver fullständiga faktureringsuppgifter.
Aktivera läge för minimal adressinsamling. När det är aktiverat samlar checkout endast in:
Land: Alltid obligatoriskt för skattebestämning
ZIP/Postnummer: Endast i regioner där det är nödvändigt för försäljningsskatt, moms eller GST-beräkning
Detta minskar avsevärt checkout-friktionen genom att eliminera onödiga formulärfält.
Aktivera minimal adress för snabbare checkout-slutförande. Fullständig adressinsamling förblir tillgänglig för företag som kräver fullständiga faktureringsuppgifter.
Produktpris för den initiala avgiften till kunden. Om det inte anges kommer det lagrade priset för produkten att användas.Format: Representerat i den lägsta valören av valutan (t.ex. cent för USD). Till exempel, för att ta ut $1,00, skicka 100.
Den billing_currency överskrivningen träder endast i kraft när adaptiv valuta är aktiverad i dina kontoinställningar. Om adaptiv valuta är inaktiverad kommer denna parameter att ha ingen effekt.
11. Använda befintliga betalningsmetoder för omedelbar checkout
Använd en kunds sparade betalningsmetod för att skapa en checkout-session som behandlas omedelbart, vilket hoppar över insamlingen av betalningsmetod:
Kopiera
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'});
När du använder payment_method_id, måste confirm ställas in på true och en befintlig customer_id måste tillhandahållas. Betalningsmetoden kommer att valideras för berättigande med betalningens valuta.
Betalningsmetoden måste tillhöra kunden och vara kompatibel med betalningsvalutan. Detta möjliggör ett klick-köp för återkommande kunder.
Använd redirect_immediately: true när du har en anpassad framgångssida som ger en bättre användarupplevelse än den standardiserade betalningssidan. Detta är särskilt användbart för mobilappar och inbäddade checkout-flöden.
När redirect_immediately är aktiverat, omdirigeras kunder till din return_url omedelbart efter betalningsslutförande, vilket helt hoppar över den standardiserade framgångssidan.
Innan du skapar en checkout-session kan du förhandsgranska prisuppdelningen inklusive skatter, rabatter och totalsummor. Detta är användbart för att visa korrekta priser för kunder innan de går vidare till checkout.
Tidigare, när du skapade en betalningslänk med dynamiska länkar, var du tvungen att tillhandahålla kundens fullständiga faktureringsadress.Med checkout-sessioner är detta inte längre nödvändigt. Du kan helt enkelt skicka med den information du har, och vi hanterar resten. Till exempel:
Om du bara känner till kundens faktureringsland, ge bara det.
Checkout-flödet kommer automatiskt att samla in de saknade detaljerna innan kunden flyttas till betalningssidan.
Å andra sidan, om du redan har all nödvändig information och vill hoppa direkt till betalningssidan, kan du skicka hela datamängden och inkludera confirm=true i din begärningskropp.