Saltar al contenido principal
Validez de la Sesión: Las sesiones de pago son válidas por 24 horas por defecto. Si pasas confirm=true en tu solicitud, la sesión solo será válida por 15 minutos.

Requisitos Previos

1

Cuenta de Dodo Payments

Necesitarás una cuenta de comerciante activa de Dodo Payments con acceso a la API.
2

Credenciales de API

Genera tus credenciales de API desde el panel de Dodo Payments:
3

Configuración de Productos

Crea tus productos en el panel de Dodo Payments antes de implementar sesiones de pago.

Creando Tu Primera Sesión de Pago

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

Respuesta de la API

Todos los métodos anteriores devuelven la misma estructura de respuesta:
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
1

Obtener la URL de pago

Extrae el checkout_url de la respuesta de la API.
2

Redirigir a tu cliente

Dirige a tu cliente a la URL de pago para completar su compra.
// Redirect immediately
window.location.href = session.checkout_url;

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

Manejar el retorno

Después del pago, los clientes son redirigidos a tu return_url con parámetros de consulta adicionales para el estado del pago.

Cuerpo de la Solicitud

Campos Requeridos

Campos esenciales necesarios para cada sesión de pago

Campos Opcionales

Configuración adicional para personalizar tu experiencia de pago

Campos Requeridos

product_cart
array
required
Array de productos a incluir en la sesión de pago. Cada producto debe tener un product_id válido de tu panel de Dodo Payments.
Importante: Los carritos de productos múltiples solo pueden contener productos de pago único. No puedes mezclar productos de suscripción con productos de pago único en la misma sesión de pago.
Encuentra tus IDs de Producto: Puedes encontrar los IDs de producto en tu panel de Dodo Payments bajo Productos → Ver Detalles, o utilizando la API de Listar Productos.

Campos Opcionales

Configura estos campos para personalizar la experiencia de pago y agregar lógica comercial a tu flujo de pago.
customer
object
Información del cliente. Puedes adjuntar un cliente existente usando su ID o crear un nuevo registro de cliente durante el pago.
Adjunta un cliente existente a la sesión de pago usando su ID.
billing_address
object
Información de la dirección de facturación para un cálculo preciso de impuestos, prevención de fraude y cumplimiento normativo.
Cuando confirm está configurado en true, todos los campos de dirección de facturación se vuelven obligatorios para la creación exitosa de la sesión.
allowed_payment_method_types
array
Controla qué métodos de pago están disponibles para los clientes durante el pago. Esto ayuda a optimizar para mercados específicos o requisitos comerciales.Opciones Disponibles: 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: Siempre incluye credit y debit como opciones de respaldo para prevenir fallos en el pago cuando los métodos de pago preferidos no están disponibles.
Ejemplo:
["apple_pay", "google_pay", "credit", "debit"]
billing_currency
string
Sobrescribir la selección de moneda predeterminada con una moneda de facturación fija. Usa códigos de moneda ISO 4217.Monedas Soportadas: USD, EUR, GBP, CAD, AUD, INR, y másEjemplo: "USD" para Dólares Estadounidenses, "EUR" para Euros
Este campo solo es efectivo cuando la fijación de precios adaptativa está habilitada. Si la fijación de precios adaptativa está deshabilitada, se usará la moneda predeterminada del producto.
show_saved_payment_methods
boolean
default:"false"
Mostrar métodos de pago previamente guardados para clientes recurrentes, mejorando la velocidad de pago y la experiencia del usuario.
return_url
string
URL para redirigir a los clientes después de un pago exitoso o cancelación.
confirm
boolean
default:"false"
Si es verdadero, finaliza todos los detalles de la sesión de inmediato. La API generará un error si falta información requerida.
discount_code
string
Aplica un código de descuento a la sesión de pago.
metadata
object
Pares clave-valor personalizados para almacenar información adicional sobre la sesión.
force_3ds
boolean
Sobrescribir el comportamiento predeterminado de 3DS del comerciante para esta sesión.
minimal_address
boolean
default:"false"
Habilitar el modo de recopilación de dirección mínima. Cuando está habilitado, el pago solo recopila:
  • País: Siempre requerido para la determinación de impuestos
  • Código ZIP/Postales: Solo en regiones donde es necesario para el cálculo de impuestos sobre ventas, IVA o GST
Esto reduce significativamente la fricción en el pago al eliminar campos de formulario innecesarios.
Habilita la dirección mínima para completar el pago más rápido. La recopilación de dirección completa sigue estando disponible para empresas que requieren detalles de facturación completos.
customization
object
Personaliza la apariencia y el comportamiento de la interfaz de pago.
feature_flags
object
Configura características y comportamientos específicos para la sesión de pago.
subscription_data
object
Configuración adicional para sesiones de pago que contienen productos de suscripción.

Ejemplos de Uso

Aquí hay 10 ejemplos completos que muestran diferentes configuraciones de sesiones de pago para varios escenarios comerciales:

1. Pago Simple de Producto Ú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. Carrito de Múltiples Productos

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. Suscripción con Período de Prueba

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. Pago Pre-confirmado

Cuando confirm está configurado en true, el cliente será llevado directamente a la página de pago, omitiendo cualquier paso de confirmación.
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. Pago con Sobrescritura de Moneda

La sobrescritura billing_currency solo tiene efecto cuando la moneda adaptativa está habilitada en la configuración de tu cuenta. Si la moneda adaptativa está deshabilitada, este parámetro no tendrá efecto.
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 Pago Guardados para Clientes Recurrentes

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. Pago B2B con Recopilación 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. Pago con Tema Oscuro y Código de Descuento

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 Pago Regionales (UPI para 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: '[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. Pago BNPL (Compra Ahora, Paga Después)

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

Pasando de Enlaces Dinámicos a Sesiones de Pago

Diferencias Clave

Anteriormente, al crear un enlace de pago con Enlaces Dinámicos, se requería proporcionar la dirección de facturación completa del cliente. Con las Sesiones de Pago, esto ya no es necesario. Simplemente puedes pasar la información que tengas, y nosotros nos encargaremos del resto. Por ejemplo:
  • Si solo conoces el país de facturación del cliente, simplemente proporciona eso.
  • El flujo de pago recopilará automáticamente los detalles faltantes antes de mover al cliente a la página de pago.
  • Por otro lado, si ya tienes toda la información requerida y deseas saltar directamente a la página de pago, puedes pasar el conjunto de datos completo e incluir confirm=true en el cuerpo de tu solicitud.

Proceso de Migración

Migrar de Enlaces Dinámicos a Sesiones de Pago es sencillo:
1

Actualiza tu integración

Actualiza tu integración para usar el nuevo método de API o SDK.
2

Ajusta la carga útil de la solicitud

Ajusta la carga útil de la solicitud de acuerdo con el formato de Sesiones de Pago.
3

¡Eso es todo!

Sí. No se necesitan manejos adicionales ni pasos de migración especiales de tu parte.