Sessionens giltighet: Kassa sessioner är giltiga i 24 timmar som standard. Om du skickar confirm=true i din begäran, 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: '[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' }); }});
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": "[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
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: '[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;});
Dirigera din kund till kassa URL 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 kassan 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 kassa-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 inkluderas i kassa sessionen. Varje produkt måste ha en giltig product_id från din Dodo Payments instrumentpanel.
Blandad Kassa: Du kan kombinera engångsbetalningsprodukter och prenumerationsprodukter i samma kassa session. Detta möjliggör kraftfulla användningsfall som installationsavgifter med prenumerationer, hårdvarubundlar med SaaS, och mer.
Beloppet 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 Lista Produkter 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 kassan. 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 kassa misslyckanden 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 US 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 insamling av minimal adress. När det är aktiverat samlar kassan endast in:
Land: Alltid obligatoriskt för skatteberäkning
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 friktionen vid kassan genom att eliminera onödiga formulärfält.
Aktivera minimal adress för snabbare kassa slutförande. Fullständig adressinsamling förblir tillgänglig för företag som kräver kompletta faktureringsuppgifter.
Aktivera läge för insamling av minimal adress. När det är aktiverat samlar kassan endast in:
Land: Alltid obligatoriskt för skatteberäkning
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 friktionen vid kassan genom att eliminera onödiga formulärfält.
Aktivera minimal adress för snabbare kassa slutförande. Fullständig adressinsamling förblir tillgänglig för företag som kräver kompletta 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.
Valfritt produktbeskrivning överskrivning för fakturering och linjeposter. Om det inte anges, kommer den lagrade beskrivningen av produkten att användas.
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 kassa
Använd en kunds sparade betalningsmetod för att skapa en kassa-session som behandlas omedelbart, utan att samla in 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 sättas till 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 engångskö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 betalningsframgångssidan. Detta är särskilt användbart för mobilappar och inbäddade kassa-flöden.
När redirect_immediately är aktiverat, omdirigeras kunder till din return_url omedelbart efter betalningsslutförande, och hoppar helt över den standardiserade framgångssidan.
Tidigare, när du skapade en betalningslänk med dynamiska länkar, var du tvungen att ange kundens fullständiga faktureringsadress.Med kassa-sessioner är detta inte längre nödvändigt. Du kan helt enkelt vidarebefordra den information du har, så tar vi hand om resten. Till exempel:
Om du bara känner till kundens faktureringsland, ange bara det.
Kassaflö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 vidarebefordra hela datamängden och inkludera confirm=true i din begäran.