Vai al contenuto principale
Validità della Sessione: Le sessioni di checkout sono valide per 24 ore per impostazione predefinita. Se passi confirm=true nella tua richiesta, la sessione sarà valida solo per 15 minuti.

Requisiti

1

Account Dodo Payments

Avrai bisogno di un account commerciante Dodo Payments attivo con accesso API.
2

Credenziali API

Genera le tue credenziali API dal dashboard di Dodo Payments:
3

Impostazione Prodotti

Crea i tuoi prodotti nel dashboard di Dodo Payments prima di implementare le sessioni di checkout.

Creare la tua Prima 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' });
  }
});

Risposta API

Tutti i metodi sopra restituiscono la stessa struttura di risposta:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Ottieni l'URL di checkout

Estrai il checkout_url dalla risposta API.
2

Reindirizza il tuo cliente

Dirigi il tuo cliente all’URL di checkout per completare il suo acquisto.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.open(session.checkout_url, '_blank');
Opzioni di Integrazione Alternative: Invece di reindirizzare, puoi incorporare il checkout direttamente nella tua pagina utilizzando Overlay Checkout (overlay modale) o Inline Checkout (completamente incorporato). Entrambe le opzioni utilizzano lo stesso URL della sessione di checkout.
3

Gestisci il ritorno

Dopo il pagamento, i clienti vengono reindirizzati al tuo return_url con parametri di query aggiuntivi per lo stato del pagamento.

Corpo della Richiesta

Campi Obbligatori

Campi essenziali necessari per ogni sessione di checkout

Campi Facoltativi

Configurazione aggiuntiva per personalizzare la tua esperienza di checkout

Campi Obbligatori

product_cart
array
obbligatorio
Array di prodotti da includere nella sessione di checkout. Ogni prodotto deve avere un valido product_id dal tuo dashboard di Dodo Payments.
Checkout Misto: Puoi combinare prodotti di pagamento una tantum e prodotti in abbonamento nella stessa sessione di checkout. Questo consente casi d’uso potenti come le spese di attivazione con abbonamenti, bundle hardware con SaaS e altro ancora.
Trova i tuoi ID Prodotto: Puoi trovare gli ID prodotto nel tuo dashboard di Dodo Payments sotto Prodotti → Visualizza Dettagli, o utilizzando l’API Elenco Prodotti.

Campi Facoltativi

Configura questi campi per personalizzare l’esperienza di checkout e aggiungere logica aziendale al tuo flusso di pagamento.
customer
object
Informazioni sul cliente. Puoi allegare un cliente esistente utilizzando il loro ID o creare un nuovo record cliente durante il checkout.
Allega un cliente esistente alla sessione di checkout utilizzando il loro ID.
billing_address
object
Informazioni sull’indirizzo di fatturazione per un calcolo accurato delle tasse, prevenzione delle frodi e conformità normativa.
Quando confirm è impostato su true, tutti i campi dell’indirizzo di fatturazione diventano obbligatori per la creazione della sessione con successo.
allowed_payment_method_types
array
Controlla quali metodi di pagamento sono disponibili per i clienti durante il checkout. Questo aiuta a ottimizzare per mercati specifici o requisiti aziendali.Opzioni Disponibili: 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
Critico: Includi sempre credit e debit come opzioni di fallback per prevenire fallimenti del checkout quando i metodi di pagamento preferiti non sono disponibili.
Esempio:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Sovrascrivi la selezione della valuta predefinita con una valuta di fatturazione fissa. Usa i codici di valuta ISO 4217.Valute Supportate: USD, EUR, GBP, CAD, AUD, INR, e altroEsempio: "USD" per Dollari Statunitensi, "EUR" per Euro
Questo campo è efficace solo quando la tariffazione adattiva è abilitata. Se la tariffazione adattiva è disabilitata, verrà utilizzata la valuta predefinita del prodotto.
show_saved_payment_methods
boolean
predefinito:"false"
Visualizza i metodi di pagamento precedentemente salvati per i clienti di ritorno, migliorando la velocità di checkout e l’esperienza utente.
return_url
string
URL per reindirizzare i clienti dopo un pagamento o una cancellazione riusciti.
confirm
boolean
predefinito:"false"
Se vero, finalizza immediatamente tutti i dettagli della sessione. L’API restituirà un errore se i dati richiesti mancano.
discount_code
string
Applica un codice sconto alla sessione di checkout.
metadata
object
Coppie chiave-valore personalizzate per memorizzare informazioni aggiuntive sulla sessione.
force_3ds
boolean
Sovrascrivi il comportamento predefinito 3DS del commerciante per questa sessione.
minimal_address
boolean
predefinito:"false"
Abilita la modalità di raccolta indirizzo minimale. Quando abilitata, il checkout raccoglie solo:
  • Paese: Sempre richiesto per la determinazione delle tasse
  • Codice ZIP/Postale: Solo nelle regioni in cui è necessario per il calcolo delle tasse sulle vendite, IVA o GST
Questo riduce significativamente l’attrito del checkout eliminando campi di modulo non necessari.
Abilita l’indirizzo minimale per un completamento più veloce del checkout. La raccolta dell’indirizzo completo rimane disponibile per le aziende che richiedono dettagli di fatturazione completi.
customization
object
Personalizza l’aspetto e il comportamento dell’interfaccia di checkout.
feature_flags
object
Configura funzionalità e comportamenti specifici per la sessione di checkout.
subscription_data
object
Configurazione aggiuntiva per le sessioni di checkout contenenti prodotti in abbonamento.

Esempi di Utilizzo

Ecco 10 esempi completi che mostrano diverse configurazioni della sessione di checkout per vari scenari aziendali:

1. Checkout Semplice per un Prodotto Singolo

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. Carrello Multi-Prodotto

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. Abbonamento con Periodo di Prova

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. Checkout Pre-confermato

Quando confirm è impostato su true, il cliente verrà portato direttamente alla pagina di checkout, saltando eventuali passaggi di conferma.
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 con Sovrascrittura della Valuta

La sovrascrittura billing_currency ha effetto solo quando la valuta adattiva è abilitata nelle impostazioni del tuo account. Se la valuta adattiva è disabilitata, questo parametro non avrà effetto.
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. Metodi di Pagamento Salvati per Clienti di Ritorno

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. Checkout B2B con Raccolta ID Fiscale

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. Checkout con Tema Scuro e Codice Sconto

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. Metodi di Pagamento Regionali (UPI per l’India)

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. Checkout BNPL (Compra Ora Paga Dopo)

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. Utilizzo di Metodi di Pagamento Esistenti per Checkout Immediato

Utilizza un metodo di pagamento salvato dal cliente per creare una sessione di checkout che elabora immediatamente, saltando la raccolta del metodo di pagamento:
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'
});
Quando utilizzi payment_method_id, confirm deve essere impostato su true e deve essere fornito un esistente customer_id. Il metodo di pagamento sarà convalidato per idoneità con la valuta del pagamento.
Il metodo di pagamento deve appartenere al cliente ed essere compatibile con la valuta del pagamento. Questo consente acquisti con un clic per i clienti di ritorno.
Genera link di pagamento accorciati e condivisibili con slugs personalizzati:
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
I link brevi sono perfetti per SMS, email o condivisione sui social media. Sono più facili da ricordare e costruiscono più fiducia nei clienti rispetto a URL lunghi.

13. Salta la Pagina di Successo del Pagamento con Reindirizzamento Immediato

Reindirizza i clienti immediatamente dopo il completamento del pagamento, saltando la pagina di successo predefinita:
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'
  }
});
Usa redirect_immediately: true quando hai una pagina di successo personalizzata che offre un’esperienza utente migliore rispetto alla pagina di successo del pagamento predefinita. Questo è particolarmente utile per app mobili e flussi di checkout incorporati.
Quando redirect_immediately è abilitato, i clienti vengono reindirizzati al tuo return_url immediatamente dopo il completamento del pagamento, saltando completamente la pagina di successo predefinita.

Anteprima delle Sessioni di Checkout

Prima di creare una sessione di checkout, puoi visualizzare il riepilogo dei prezzi, comprese tasse, sconti e totali. Questo è utile per visualizzare prezzi accurati ai clienti prima che procedano al 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);

Riferimento API Anteprima

Visualizza la documentazione completa dell’endpoint di anteprima.

Differenze Chiave

In precedenza, quando creavi un link di pagamento con Link Dinamici, era necessario fornire l’indirizzo di fatturazione completo del cliente. Con le Sessioni di Checkout, questo non è più necessario. Puoi semplicemente passare le informazioni che hai e noi ci occuperemo del resto. Ad esempio:
  • Se conosci solo il paese di fatturazione del cliente, fornisci solo quello.
  • Il flusso di checkout raccoglierà automaticamente i dettagli mancanti prima di spostare il cliente alla pagina di pagamento.
  • D’altra parte, se hai già tutte le informazioni richieste e vuoi saltare direttamente alla pagina di pagamento, puoi passare l’intero set di dati e includere confirm=true nel corpo della tua richiesta.

Processo di Migrazione

La migrazione da Link Dinamici a Sessioni di Checkout è semplice:
1

Aggiorna la tua integrazione

Aggiorna la tua integrazione per utilizzare il nuovo metodo API o SDK.
2

Regola il payload della richiesta

Regola il payload della richiesta secondo il formato delle Sessioni di Checkout.
3

Ecco fatto!

Sì. Non sono necessari ulteriori gestioni o passaggi di migrazione speciali da parte tua.