Pular para o conteúdo principal
Validade da Sessão: As sessões de checkout são válidas por 24 horas por padrão. Se você passar confirm=true em sua solicitação, a sessão será válida apenas por 15 minutos.

Pré-requisitos

1

Conta Dodo Payments

Você precisará de uma conta de comerciante Dodo Payments ativa com acesso à API.
2

Credenciais da API

Gere suas credenciais da API no painel do Dodo Payments:
3

Configuração de Produtos

Crie seus produtos no painel do Dodo Payments antes de implementar sessões de checkout.

Criando Sua Primeira Sessão de Checkout

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: '[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 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' });
  }
});

Resposta da API

Todos os métodos acima retornam a mesma estrutura de resposta:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Obter a URL de checkout

Extraia o checkout_url da resposta da API.
2

Redirecionar seu cliente

Direcione seu cliente para a URL de checkout para concluir a compra.
// Redirect immediately
window.location.href = session.checkout_url;

// Or open in new window
window.open(session.checkout_url, '_blank');
3

Lidar com o retorno

Após o pagamento, os clientes são redirecionados para seu return_url com parâmetros de consulta adicionais para o status do pagamento.

Corpo da Solicitação

Campos Obrigatórios

Campos essenciais necessários para cada sessão de checkout

Campos Opcionais

Configuração adicional para personalizar sua experiência de checkout

Campos Obrigatórios

product_cart
array
required
Array de produtos a serem incluídos na sessão de checkout. Cada produto deve ter um product_id válido do seu painel do Dodo Payments.
Importante: Cestos de produtos múltiplos podem conter apenas produtos de pagamento único. Você não pode misturar produtos de assinatura com produtos de pagamento único na mesma sessão de checkout.
Encontre Seus IDs de Produto: Você pode encontrar os IDs dos produtos no seu painel do Dodo Payments em Produtos → Ver Detalhes, ou usando a API List Products.

Campos Opcionais

Configure esses campos para personalizar a experiência de checkout e adicionar lógica de negócios ao seu fluxo de pagamento.
customer
object
Informações do cliente. Você pode anexar um cliente existente usando seu ID ou criar um novo registro de cliente durante o checkout.
Anexe um cliente existente à sessão de checkout usando seu ID.
billing_address
object
Informações do endereço de cobrança para cálculo preciso de impostos, prevenção de fraudes e conformidade regulatória.
Quando confirm é definido como true, todos os campos do endereço de cobrança se tornam obrigatórios para a criação bem-sucedida da sessão.
allowed_payment_method_types
array
Controle quais métodos de pagamento estão disponíveis para os clientes durante o checkout. Isso ajuda a otimizar para mercados ou requisitos de negócios específicos.Opções Disponíveis: 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
Crítico: Sempre inclua credit e debit como opções de fallback para evitar falhas no checkout quando os métodos de pagamento preferidos não estão disponíveis.
Exemplo:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Substitua a seleção de moeda padrão por uma moeda de cobrança fixa. Usa códigos de moeda ISO 4217.Moedas Suportadas: USD, EUR, GBP, CAD, AUD, INR, e maisExemplo: "USD" para Dólares Americanos, "EUR" para Euros
Este campo só é eficaz quando a precificação adaptativa está habilitada. Se a precificação adaptativa estiver desabilitada, a moeda padrão do produto será usada.
show_saved_payment_methods
boolean
default:"false"
Exibir métodos de pagamento salvos anteriormente para clientes que retornam, melhorando a velocidade do checkout e a experiência do usuário.
return_url
string
URL para redirecionar os clientes após pagamento ou cancelamento bem-sucedido.
confirm
boolean
default:"false"
Se verdadeiro, finaliza todos os detalhes da sessão imediatamente. A API lançará um erro se dados obrigatórios estiverem ausentes.
discount_code
string
Aplique um código de desconto à sessão de checkout.
metadata
object
Pares de chave-valor personalizados para armazenar informações adicionais sobre a sessão.
force_3ds
boolean
Substitua o comportamento padrão de 3DS do comerciante para esta sessão.
minimal_address
boolean
default:"false"
Habilite o modo de coleta de endereço mínimo. Quando habilitado, o checkout coleta apenas:
  • País: Sempre necessário para determinação de impostos
  • Código ZIP/Postal: Apenas em regiões onde é necessário para cálculo de imposto sobre vendas, VAT ou GST
Isso reduz significativamente a fricção do checkout ao eliminar campos de formulário desnecessários.
Habilite o endereço mínimo para uma conclusão de checkout mais rápida. A coleta de endereço completo permanece disponível para empresas que exigem detalhes de cobrança completos.
customization
object
Personalize a aparência e o comportamento da interface de checkout.
feature_flags
object
Configure recursos e comportamentos específicos para a sessão de checkout.
subscription_data
object
Configuração adicional para sessões de checkout contendo produtos de assinatura.

Exemplos de Uso

Aqui estão 10 exemplos abrangentes mostrando diferentes configurações de sessão de checkout para vários cenários de negócios:

1. Checkout Simples de Produto Único

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

2. Cesto de Múltiplos Produtos

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: '[email protected]',
    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. Assinatura com Período de Teste

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

4. Checkout Pré-confirmado

Quando confirm é definido como true, o cliente será levado diretamente à página de checkout, pulando quaisquer etapas de confirmação.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_premium_course',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    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 com Substituição de Moeda

A substituição billing_currency só tem efeito quando a moeda adaptativa está habilitada nas configurações da sua conta. Se a moeda adaptativa estiver desabilitada, este parâmetro não terá efeito.
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_consulting_service',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    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. Métodos de Pagamento Salvos para Clientes Retornantes

const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_monthly_subscription',
      quantity: 1
    }
  ],
  customer: {
    email: '[email protected]',
    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 com Coleta de ID Fiscal

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

8. Checkout com Tema Escuro e Código de Desconto

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: '[email protected]',
    name: 'Mike Chen'
  },
  return_url: 'https://gaming-store.com/order-complete'
});

9. Métodos de Pagamento Regionais (UPI para a Índia)

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: '[email protected]',
    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 (Compre Agora, Pague Depois)

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: '[email protected]',
    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'
  }
});

Principais Diferenças

Anteriormente, ao criar um link de pagamento com Links Dinâmicos, você era obrigado a fornecer o endereço de cobrança completo do cliente. Com as Sessões de Checkout, isso não é mais necessário. Você pode simplesmente passar as informações que possui, e nós cuidaremos do resto. Por exemplo:
  • Se você só souber o país de cobrança do cliente, basta fornecer isso.
  • O fluxo de checkout coletará automaticamente os detalhes ausentes antes de mover o cliente para a página de pagamento.
  • Por outro lado, se você já tiver todas as informações necessárias e quiser pular diretamente para a página de pagamento, pode passar o conjunto completo de dados e incluir confirm=true no corpo da sua solicitação.

Processo de Migração

Migrar de Links Dinâmicos para Sessões de Checkout é simples:
1

Atualize sua integração

Atualize sua integração para usar o novo método da API ou SDK.
2

Ajuste a carga útil da solicitação

Ajuste a carga útil da solicitação de acordo com o formato das Sessões de Checkout.
3

É isso!

Sim. Nenhum manuseio adicional ou etapas de migração especiais são necessárias do seu lado.