Hoppa till huvudinnehåll
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.

Förutsättningar

1

Dodo Payments-konto

Du behöver ett aktivt Dodo Payments-handelskonto med API-åtkomst.
2

API-uppgifter

Generera dina API-uppgifter från Dodo Payments-instrumentpanelen:
3

Produktinställningar

Skapa dina produkter i Dodo Payments-instrumentpanelen innan du implementerar checkout-sessioner.

Skapa din första Checkout-session

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: '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 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-svar

Alla metoder ovan returnerar samma svarstruktur:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Hämta checkout-URL

Extrahera checkout_url från API-svaret.
2

Omdirigera din kund

Dirigera din kund till checkout-URL:en för att slutföra sitt köp.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.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.

Begärningskropp

Obligatoriska fält

Viktiga fält som behövs för varje checkout-session

Valfria fält

Ytterligare konfiguration för att anpassa din checkout-upplevelse

Obligatoriska fält

product_cart
array
obligatorisk
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.
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.

Valfria fält

Konfigurera dessa fält för att anpassa checkout-upplevelsen och lägga till affärslogik i din betalningsflöde.
customer
object
Kundinformation. Du kan antingen koppla en befintlig kund med deras ID eller skapa en ny kundpost under checkout.
Koppla en befintlig kund till checkout-sessionen med deras ID.
billing_address
object
Faktureringsadressinformation för noggrann skatteberäkning, bedrägeriförebyggande och efterlevnad av regler.
När confirm är inställt på true, blir alla faktureringsadressfält obligatoriska för att skapa sessionen framgångsrikt.
allowed_payment_method_types
array
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.
Exempel:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Ö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.
show_saved_payment_methods
boolean
standard:"false"
Visa tidigare sparade betalningsmetoder för återkommande kunder, vilket förbättrar checkout-hastigheten och användarupplevelsen.
return_url
string
URL för att omdirigera kunder efter lyckad betalning eller avbokning.
confirm
boolean
standard:"false"
Om sant, avslutar alla sessionsdetaljer omedelbart. API:et kommer att kasta ett fel om nödvändig data saknas.
discount_code
string
Tillämpa en rabattkod på checkout-sessionen.
metadata
object
Anpassade nyckel-värde-par för att lagra ytterligare information om sessionen.
force_3ds
boolean
Överskriv handelsstandard 3DS-beteende för denna session.
minimal_address
boolean
standard:"false"
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.
customization
object
Anpassa utseendet och beteendet hos checkout-gränssnittet.
feature_flags
object
Konfigurera specifika funktioner och beteenden för checkout-sessionen.
subscription_data
object
Ytterligare konfiguration för checkout-sessioner som innehåller prenumerationsprodukter.

Användningsexempel

Här är 10 omfattande exempel som visar olika konfigurationer av checkout-sessioner för olika affärsscenarier:

1. Enkel checkout för en produkt

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_ebook_guide',
      quantity: 1
    }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'John Doe'
  },
  return_url: 'https://yoursite.com/success'
});

2. Multi-produktvagn

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: 'customer@example.com',
    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. Prenumeration med provperiod

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_plan',
      quantity: 1
    }
  ],
  subscription_data: {
    trial_period_days: 14
  },
  customer: {
    email: 'user@startup.com',
    name: 'Jane Smith'
  },
  return_url: 'https://saas-app.com/onboarding',
  metadata: {
    plan_type: 'professional',
    referral_source: 'google_ads'
  }
});

4. Förhandsbekräftad checkout

När confirm är inställt på true, kommer kunden att tas direkt till checkout-sidan, vilket omgår eventuella bekräftelsesteg.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_course',
      quantity: 1
    }
  ],
  customer: {
    email: 'student@university.edu',
    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 med valutöverskrivning

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.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_consulting_service',
      quantity: 1
    }
  ],
  customer: {
    email: 'client@company.co.uk',
    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. Sparade betalningsmetoder för återkommande kunder

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  customer: {
    email: 'returning.customer@example.com',
    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 med skatte-ID-insamling

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_enterprise_license',
      quantity: 5
    }
  ],
  customer: {
    email: 'procurement@enterprise.com',
    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: 'john.sales@company.com'
  }
});

8. Mörkt tema checkout med rabattkod

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: 'gamer@example.com',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

9. Regionala betalningsmetoder (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: 'student@example.in',
    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 (Köp nu, betala senare) 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: 'fashion.lover@example.com',
    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'
  }
});

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:
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.

12. Kortlänkar för renare betalnings-URL:er

Generera förkortade, delbara betalningslänkar med anpassade slugs:
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 link
console.log(session.checkout_url);  // e.g., https://checkout.dodopayments.com/buy/abc123
Kortlänkar är perfekta för SMS, e-post eller delning på sociala medier. De är lättare att komma ihåg och bygger mer kundförtroende än långa URL:er.

13. Hoppa över betalningssidan för framgång med omedelbar omdirigering

Omdirigera kunder omedelbart efter betalningsslutförande, vilket omgår den standardiserade framgångssidan:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_digital_product',
      quantity: 1
    }
  ],
  feature_flags: {
    redirect_immediately: true  // Skip success page, redirect immediately
  },
  return_url: 'https://yourapp.com/success',
  customer: {
    email: 'customer@example.com',
    name: 'Jane Smith'
  }
});
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.

Förhandsgranska checkout-sessioner

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.
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'prod_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.subtotal);
console.log('Tax:', preview.tax);
console.log('Discount:', preview.discount);
console.log('Total:', preview.total);

Förhandsgranska API-referens

Visa den kompletta dokumentationen för förhandsgranskningsändpunkten.

Flytta från dynamiska länkar till checkout-sessioner

Viktiga skillnader

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.

Migreringsprocess

Att migrera från dynamiska länkar till checkout-sessioner är enkelt:
1

Uppdatera din integration

Uppdatera din integration för att använda den nya API- eller SDK-metoden.
2

Justera begärningspayload

Justera begärningspayloaden enligt checkout-sessionernas format.
3

Det är allt!

Ja. Ingen ytterligare hantering eller speciella migreringssteg behövs från din sida.