Saltar al contenido principal

Descripción general

El pago en línea te permite crear experiencias de pago completamente integradas que se mezclan sin problemas con tu sitio web o aplicación. A diferencia del pago en superposición, que se abre como un modal sobre tu página, el pago en línea incrusta el formulario de pago directamente en el diseño de tu página. Usando el pago en línea, puedes:
  • Crear experiencias de pago que están completamente integradas con tu aplicación o sitio web
  • Permitir que Dodo Payments capture de forma segura la información del cliente y de pago en un marco de pago optimizado
  • Mostrar artículos, totales y otra información de Dodo Payments en tu página
  • Usar métodos y eventos del SDK para construir experiencias de pago avanzadas
Inline Checkout Cover Image

Cómo funciona

El pago en línea funciona incrustando un marco seguro de Dodo Payments en tu sitio web o aplicación. El marco de pago se encarga de recopilar la información del cliente y capturar los detalles de pago. Tu página muestra la lista de artículos, totales y opciones para cambiar lo que hay en el pago. El SDK permite que tu página y el marco de pago interactúen entre sí. Dodo Payments crea automáticamente una suscripción cuando se completa un pago, lista para que la provisionen.
El marco de inline checkout gestiona de forma segura toda la información de pago sensible, garantizando el cumplimiento de PCI sin que necesites certificación adicional.

¿Qué hace que un buen pago en línea?

Es importante que los clientes sepan de quién están comprando, qué están comprando y cuánto están pagando. Para construir un pago en línea que sea conforme y optimizado para la conversión, tu implementación debe incluir:
Inline checkout example with required elements labeled
  1. Información recurrente: Si es recurrente, con qué frecuencia se repite y el total a pagar en la renovación. Si es una prueba, cuánto dura la prueba.
  2. Descripciones de artículos: Una descripción de lo que se está comprando.
  3. Totales de transacción: Totales de transacción, incluyendo subtotal, total de impuestos y total general. Asegúrate de incluir también la moneda.
  4. Pie de página de Dodo Payments: El marco completo de pago en línea, incluyendo el pie de página de pago que tiene información sobre Dodo Payments, nuestros términos de venta y nuestra política de privacidad.
  5. Política de reembolso: Un enlace a tu política de reembolso, si difiere de la política de reembolso estándar de Dodo Payments.
Siempre muestra el marco completo de inline checkout, incluido el pie de página. Eliminar u ocultar la información legal incumple los requisitos de conformidad.

Viaje del cliente

El flujo de pago está determinado por la configuración de tu sesión de pago. Dependiendo de cómo configures la sesión de pago, los clientes experimentarán un pago que puede presentar toda la información en una sola página o a través de múltiples pasos.
1

Customer opens checkout

Puedes abrir el pago en línea pasando artículos o una transacción existente. Usa el SDK para mostrar y actualizar la información en la página, y métodos del SDK para actualizar artículos basados en la interacción del cliente.Página de pago inicial con lista de artículos y formulario de pago
2

Customer enters their details

El pago en línea primero pide a los clientes que ingresen su dirección de correo electrónico, seleccionen su país y (donde sea necesario) ingresen su código postal. Este paso recopila toda la información necesaria para determinar impuestos y opciones de pago disponibles.Puedes prellenar los detalles del cliente y presentar direcciones guardadas para agilizar la experiencia.
3

Customer selects payment method

Después de ingresar sus datos, se presentan a los clientes los métodos de pago disponibles y el formulario de pago. Las opciones pueden incluir tarjeta de crédito o débito, PayPal, Apple Pay, Google Pay y otros métodos de pago locales según su ubicación.Muestra los métodos de pago guardados si están disponibles para acelerar el pago.Métodos de pago disponibles y formulario de detalles de tarjeta
4

Checkout completed

Dodo Payments dirige cada pago al mejor adquirente para esa venta para obtener la mejor oportunidad de éxito. Los clientes ingresan a un flujo de éxito que puedes construir.Pantalla de éxito con marca de verificación de confirmación
5

Dodo Payments creates subscription

Dodo Payments crea automáticamente una suscripción para el cliente, lista para que la provisionen. El método de pago que utilizó el cliente se guarda para renovaciones o cambios de suscripción.Suscripción creada con notificación de webhook

Inicio Rápido

Comienza con el Pago en Línea de Dodo Payments en solo unas pocas líneas de código:
import { DodoPayments } from "dodopayments-checkout";

// Initialize the SDK for inline mode
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    console.log("Checkout event:", event);
  },
});

// Open checkout in a specific container
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout" // ID of the container element
});
Asegúrate de tener un elemento contenedor con el id correspondiente en tu página: <div id="dodo-inline-checkout"></div>.

Guía de Integración Paso a Paso

1

Install the SDK

Instala el SDK de Dodo Payments Checkout:
npm install dodopayments-checkout
2

Initialize the SDK for Inline Display

Inicializa el SDK y especifica displayType: 'inline'. También debes escuchar el evento checkout.breakdown para actualizar tu interfaz de usuario con los cálculos de impuestos y totales en tiempo real.
import { DodoPayments } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    if (event.event_type === "checkout.breakdown") {
      const breakdown = event.data?.message;
      // Update your UI with breakdown.subTotal, breakdown.tax, breakdown.total, etc.
    }
  },
});
3

Create a Container Element

Agrega un elemento a tu HTML donde se inyectará el marco de pago:
<div id="dodo-inline-checkout"></div>
4

Open the Checkout

Llama a DodoPayments.Checkout.open() con el checkoutUrl y el elementId de tu contenedor:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
5

Test Your Integration

  1. Inicia tu servidor de desarrollo:
npm run dev
  1. Prueba el flujo de pago:
    • Ingresa tu correo electrónico y detalles de dirección en el marco en línea.
    • Verifica que tu resumen de pedido personalizado se actualice en tiempo real.
    • Prueba el flujo de pago usando credenciales de prueba.
    • Confirma que las redirecciones funcionen correctamente.
Deberías ver eventos checkout.breakdown registrados en la consola del navegador si agregaste un console.log en la devolución onEvent.
6

Go Live

Cuando estés listo para producción:
  1. Cambia el modo a 'live':
DodoPayments.Initialize({
  mode: "live",
  displayType: "inline",
  onEvent: (event) => {
    // Handle events
  }
});
  1. Actualiza tus URLs de pago para usar sesiones de pago en vivo desde tu backend.
  2. Prueba el flujo completo en producción.

Ejemplo Completo en React

Este ejemplo muestra cómo implementar un resumen de pedido personalizado junto al inline checkout, manteniéndolos sincronizados mediante el evento checkout.breakdown.
"use client";

import { useEffect, useState } from 'react';
import { DodoPayments, CheckoutBreakdownData } from 'dodopayments-checkout';

export default function CheckoutPage() {
  const [breakdown, setBreakdown] = useState<Partial<CheckoutBreakdownData>>({});

  useEffect(() => {
    // 1. Initialize the SDK
    DodoPayments.Initialize({
      mode: 'test',
      displayType: 'inline',
      onEvent: (event) => {
        // 2. Listen for the 'checkout.breakdown' event
        if (event.event_type === "checkout.breakdown") {
          const message = event.data?.message as CheckoutBreakdownData;
          if (message) setBreakdown(message);
        }
      }
    });

    // 3. Open the checkout in the specified container
    DodoPayments.Checkout.open({
      checkoutUrl: 'https://test.dodopayments.com/session/cks_123',
      elementId: 'dodo-inline-checkout'
    });

    return () => DodoPayments.Checkout.close();
  }, []);

  const format = (amt: number | null | undefined, curr: string | null | undefined) => 
    amt != null && curr ? `${curr} ${(amt/100).toFixed(2)}` : '0.00';

  const currency = breakdown.currency ?? breakdown.finalTotalCurrency ?? '';

  return (
    <div className="flex flex-col md:flex-row min-h-screen">
      {/* Left Side - Checkout Form */}
      <div className="w-full md:w-1/2 flex items-center">
        <div id="dodo-inline-checkout" className='w-full' />
      </div>

      {/* Right Side - Custom Order Summary */}
      <div className="w-full md:w-1/2 p-8 bg-gray-50">
        <h2 className="text-2xl font-bold mb-4">Order Summary</h2>
        <div className="space-y-2">
          {breakdown.subTotal && (
            <div className="flex justify-between">
              <span>Subtotal</span>
              <span>{format(breakdown.subTotal, currency)}</span>
            </div>
          )}
          {breakdown.discount && (
            <div className="flex justify-between">
              <span>Discount</span>
              <span>{format(breakdown.discount, currency)}</span>
            </div>
          )}
          {breakdown.tax != null && (
            <div className="flex justify-between">
              <span>Tax</span>
              <span>{format(breakdown.tax, currency)}</span>
            </div>
          )}
          <hr />
          {(breakdown.finalTotal ?? breakdown.total) && (
            <div className="flex justify-between font-bold text-xl">
              <span>Total</span>
              <span>{format(breakdown.finalTotal ?? breakdown.total, breakdown.finalTotalCurrency ?? currency)}</span>
            </div>
          )}
        </div>
      </div>
    </div>
  );
}

Referencia de API

Configuración

Opciones de Inicialización

interface InitializeOptions {
  mode: "test" | "live";
  displayType: "inline"; // Required for inline checkout
  onEvent: (event: CheckoutEvent) => void;
}
OpciónTipoRequeridoDescripción
mode"test" | "live"Modo de entorno.
displayType"inline" | "overlay"Debe establecerse en "inline" para incrustar el checkout.
onEventfunctionFunción de devolución para manejar eventos del checkout.

Opciones de Pago

export type FontSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
export type FontWeight = "normal" | "medium" | "bold" | "extraBold";

interface CheckoutOptions {
  checkoutUrl: string;
  elementId: string; // Required for inline checkout
  options?: {
    showTimer?: boolean;
    showSecurityBadge?: boolean;
    manualRedirect?: boolean;
    payButtonText?: string;
    fontSize?: FontSize;
    fontWeight?: FontWeight;
  };
}
OpciónTipoRequeridoDescripción
checkoutUrlstringURL de la sesión de pago.
elementIdstringEl id del elemento DOM donde se debe representar el proceso de pago.
options.showTimerbooleanNoMostrar u ocultar el temporizador de pago. Por defecto es true. Cuando está desactivado, recibirás el evento checkout.link_expired cuando la sesión expire.
options.showSecurityBadgebooleanNoMostrar u ocultar la insignia de seguridad. Por defecto es true.
options.manualRedirectbooleanNoCuando está habilitado, el proceso de pago no redirigirá automáticamente después de completarse. En su lugar, recibirás los eventos checkout.status e checkout.redirect_requested para encargarte tú mismo de la redirección.
options.payButtonTextstringNoTexto personalizado para mostrar en el botón de pago.
options.fontSizeFontSizeNoTamaño de fuente global para el proceso de pago.
options.fontWeightFontWeightNoPeso de fuente global para el proceso de pago.

Métodos

Abrir Pago

Abre el marco de pago en el contenedor especificado.
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
También puedes pasar opciones adicionales para personalizar el comportamiento del pago:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout",
  options: {
    showTimer: false,
    showSecurityBadge: false,
    manualRedirect: true,
    payButtonText: "Pay Now",
  },
});
Cuando uses manualRedirect, maneja la finalización del checkout en tu callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    if (event.event_type === "checkout.status") {
      const status = event.data?.message?.status;
      // Handle status: "succeeded", "failed", or "processing"
    }
    if (event.event_type === "checkout.redirect_requested") {
      const redirectUrl = event.data?.message?.redirect_to;
      // Redirect the customer manually
      window.location.href = redirectUrl;
    }
    if (event.event_type === "checkout.link_expired") {
      // Handle expired checkout session
    }
  },
});

Cerrar Pago

Elimina programáticamente el marco de pago y limpia los oyentes de eventos.
DodoPayments.Checkout.close();

Verificar Estado

Devuelve si el marco de pago está actualmente inyectado.
const isOpen = DodoPayments.Checkout.isOpen();
// Returns: boolean

Eventos

El SDK proporciona eventos en tiempo real a través del callback onEvent. Para el inline checkout, checkout.breakdown es especialmente útil para sincronizar tu UI.
Tipo de eventoDescripción
checkout.openedEl marco del checkout se ha cargado.
checkout.form_readyEl formulario del checkout está listo para recibir datos del usuario. Útil para ocultar estados de carga y mostrar la interfaz del checkout.
checkout.breakdownSe dispara cuando se actualizan precios, impuestos o descuentos.
checkout.customer_details_submittedLos datos del cliente han sido enviados.
checkout.pay_button_clickedSe dispara cuando el cliente hace clic en el botón de pagar. Útil para analítica y seguimiento de embudos de conversión.
checkout.redirectEl checkout realizará una redirección (por ejemplo, a una página bancaria).
checkout.errorOcurrió un error durante el checkout.
checkout.link_expiredSe dispara cuando expira la sesión del checkout. Solo se recibe cuando showTimer está establecido en false.
checkout.statusSe dispara cuando manualRedirect está habilitado. Contiene el estado del checkout (succeeded, failed o processing).
checkout.redirect_requestedSe dispara cuando manualRedirect está habilitado. Contiene la URL para redirigir al cliente.

Datos de Desglose del Pago

El evento checkout.breakdown proporciona los siguientes datos:
interface CheckoutBreakdownData {
  subTotal?: number;          // Amount in cents
  discount?: number;         // Amount in cents
  tax?: number;              // Amount in cents
  total?: number;            // Amount in cents
  currency?: string;         // e.g., "USD"
  finalTotal?: number;       // Final amount including adjustments
  finalTotalCurrency?: string; // Currency for the final total
}

Datos del Evento de Estado del Pago

Cuando manualRedirect está habilitado, recibes el evento checkout.status con los siguientes datos:
interface CheckoutStatusEventData {
  message: {
    status?: "succeeded" | "failed" | "processing";
  };
}

Datos del Evento de Redirección del Pago Solicitada

Cuando manualRedirect está habilitado, recibes el evento checkout.redirect_requested con los siguientes datos:
interface CheckoutRedirectRequestedEventData {
  message: {
    redirect_to?: string;
  };
}

Entendiendo el Evento de Desglose

El evento checkout.breakdown es la forma principal de mantener la UI de tu aplicación sincronizada con el estado del checkout de Dodo Payments. Cuándo se activa:
  • En la inicialización: Inmediatamente después de que el marco de pago se carga y está listo.
  • En el cambio de dirección: Cada vez que el cliente selecciona un país o ingresa un código postal que resulta en un recálculo de impuestos.
Detalles del Campo:
CampoDescripción
subTotalLa suma de todos los artículos de la sesión antes de aplicar descuentos o impuestos.
discountEl valor total de todos los descuentos aplicados.
taxEl importe de impuestos calculado. En el modo inline, esto se actualiza dinámicamente según el usuario interactúa con los campos de dirección.
totalEl resultado matemático de subTotal - discount + tax en la moneda base de la sesión.
currencyEl código ISO de la moneda (por ejemplo, "USD") para los valores estándar de subtotal, descuento e impuesto.
finalTotalEl importe real que se cobra al cliente. Esto puede incluir ajustes de cambio o tarifas de métodos de pago locales que no forman parte del desglose básico del precio.
finalTotalCurrencyLa moneda en la que el cliente paga realmente. Esto puede diferir de currency si se aplica paridad de poder adquisitivo o conversión a moneda local.
Consejos Clave de Integración:
  1. Formato de moneda: Los precios siempre se devuelven como enteros en la unidad monetaria más pequeña (por ejemplo, centavos para USD, yenes para JPY). Para mostrarlos, divide entre 100 (o la potencia de 10 correspondiente) o usa una biblioteca de formateo como Intl.NumberFormat.
  2. Manejo de estados iniciales: Cuando el checkout se carga por primera vez, tax e discount pueden estar 0 o null hasta que el usuario proporcione su información de facturación o aplique un código. Tu UI debe manejar estos estados con elegancia (por ejemplo, mostrando un guion u ocultando la fila).
  3. El “Total final” vs “Total”: Mientras que total te ofrece el cálculo estándar del precio, finalTotal es la fuente de verdad para la transacción. Si finalTotal está presente, refleja exactamente lo que se cobrará en la tarjeta del cliente, incluidos los ajustes dinámicos.
  4. Retroalimentación en tiempo real: Usa el campo tax para mostrar a los usuarios que los impuestos se calculan en tiempo real. Esto otorga una sensación “en vivo” a tu página de checkout y reduce la fricción durante el paso de ingreso de dirección.

Opciones de Implementación

Instalación a través de Gestores de Paquetes

Instala a través de npm, yarn o pnpm como se muestra en la Guía de Integración Paso a Paso.

Implementación CDN

Para una integración rápida sin un paso de construcción, puedes usar nuestro CDN:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dodo Payments Inline Checkout</title>
    
    <!-- Load DodoPayments -->
    <script src="https://cdn.jsdelivr.net/npm/dodopayments-checkout@latest/dist/index.js"></script>
    <script>
        // Initialize the SDK
        DodoPaymentsCheckout.DodoPayments.Initialize({
            mode: "test",
            displayType: "inline",
            onEvent: (event) => {
                console.log('Checkout event:', event);
            }
        });
    </script>
</head>
<body>
    <div id="dodo-inline-checkout"></div>

    <script>
        // Open the checkout
        DodoPaymentsCheckout.DodoPayments.Checkout.open({
            checkoutUrl: "https://test.dodopayments.com/session/cks_123",
            elementId: "dodo-inline-checkout"
        });
    </script>
</body>
</html>

Actualizar método de pago

El proceso de pago en línea admite actualizaciones de método de pago para suscripciones. Cuando un cliente necesita actualizar su método de pago —ya sea para una suscripción activa o para reactivar una suscripción en espera— puedes mostrar el flujo de actualización directamente dentro del diseño de la página.

Cómo funciona

  1. Llama a la API de actualización de método de pago para obtener un payment_link:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});
  1. Pasa el payment_link devuelto como checkoutUrl para abrir el proceso de pago en línea:
DodoPayments.Checkout.open({
  checkoutUrl: response.payment_link,
  elementId: "dodo-inline-checkout"
});
El marco en línea solo representa el formulario de recopilación del método de pago. Los clientes pueden ingresar nuevos datos de tarjeta o seleccionar un método de pago guardado sin salir de tu página.

Para suscripciones en espera

Al actualizar el método de pago de una suscripción en estado on_hold, Dodo Payments crea automáticamente un cargo por cualquier saldo pendiente. Supervisa los webhooks payment.succeeded e subscription.active para confirmar la reactivación.
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

if (response.payment_id) {
  // Charge created for remaining dues
  // Open inline checkout for payment collection
  DodoPayments.Checkout.open({
    checkoutUrl: response.payment_link,
    elementId: "dodo-inline-checkout"
  });
}
También puedes usar un método de pago guardado existente en lugar de recopilar nuevos datos pasando type: 'existing' con un payment_method_id a la API de actualización de método de pago.

Manejo de errores

El SDK proporciona información detallada de errores a través del sistema de eventos. Siempre implementa un manejo adecuado de errores en tu callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event: CheckoutEvent) => {
    if (event.event_type === "checkout.error") {
      console.error("Checkout error:", event.data?.message);
      // Handle error appropriately
    }
  }
});
Siempre maneja el evento checkout.error para brindar una buena experiencia al usuario cuando ocurran problemas.

Mejores prácticas

  1. Diseño responsivo: Asegúrate de que el elemento contenedor tenga suficiente ancho y alto. El iframe normalmente se expandirá para llenar su contenedor.
  2. Sincronización: Usa el evento checkout.breakdown para mantener tu resumen de pedido personalizado o las tablas de precios sincronizadas con lo que el usuario ve en el marco de pago.
  3. Estados esqueléticos: Muestra un indicador de carga en tu contenedor hasta que se dispare el evento checkout.opened.
  4. Limpieza: Llama a DodoPayments.Checkout.close() cuando tu componente se desmonte para limpiar el iframe y los escuchadores de eventos.
Para implementaciones en modo oscuro, se recomienda usar #0d0d0d como color de fondo para una integración visual óptima con el marco de pago en línea.

Validación del estado del pago

No dependas exclusivamente de los eventos del proceso de pago en línea para determinar el éxito o fracaso del pago. Siempre implementa validación del lado del servidor usando webhooks y/o sondeos.

Por qué la validación del lado del servidor es esencial

Aunque eventos del proceso de pago en línea como checkout.status brindan retroalimentación en tiempo real, no deben ser tu única fuente de verdad para el estado del pago. Problemas de red, fallas del navegador o que los usuarios cierren la página pueden causar que los eventos se pierdan. Para garantizar una validación de pago confiable:
  1. Tu servidor debe escuchar eventos de webhooks - Dodo Payments envía webhooks para los cambios en el estado de pago
  2. Implementa un mecanismo de sondeo - Tu frontend debe sondear a tu servidor para obtener actualizaciones de estado
  3. Combina ambos enfoques - Usa webhooks como fuente primaria y los sondeos como respaldo

Arquitectura recomendada

Pasos de implementación

1. Escucha los eventos de pago - Cuando el usuario hace clic en pagar, comienza a prepararte para verificar el estado:
onEvent: (event) => {
  if (event.event_type === 'checkout.status') {
    // Start polling your server for confirmed status
    startPolling();
  }
}
2. Sondea a tu servidor - Crea un endpoint que revise tu base de datos para el estado de pago (actualizado mediante webhooks):
// Poll every 2 seconds until status is confirmed
const interval = setInterval(async () => {
  const { status } = await fetch(`/api/payments/${paymentId}/status`).then(r => r.json());
  if (status === 'succeeded' || status === 'failed') {
    clearInterval(interval);
    handlePaymentResult(status);
  }
}, 2000);
3. Maneja los webhooks del lado del servidor - Actualiza tu base de datos cuando Dodo envía los webhooks payment.succeeded o payment.failed. Consulta nuestra documentación de webhooks para más detalles.

Manejo de redirecciones (3DS, Google Pay, UPI)

Al usar manualRedirect: true, ciertos métodos de pago requieren redirigir al usuario fuera de tu página para autenticación:
  • 3D Secure (3DS) - Autenticación de tarjeta
  • Google Pay - Autenticación de billetera en algunos flujos
  • UPI - Redirecciones de métodos de pago indios
Cuando se requiere una redirección, recibirás el evento checkout.redirect_requested. Redirige al usuario a la URL proporcionada:
if (event.event_type === 'checkout.redirect_requested') {
  const redirectUrl = event.data?.message?.redirect_to;
  // Save payment ID before redirect, then redirect
  sessionStorage.setItem('pendingPaymentId', paymentId);
  window.location.href = redirectUrl;
}
Después de que se completa la autenticación (éxito o fracaso), el usuario regresa a tu página. No asumas éxito solo porque el usuario regresó. En su lugar:
  1. Verifica si el usuario regresa tras una redirección (por ejemplo, mediante sessionStorage)
  2. Comienza a sondear a tu servidor por el estado de pago confirmado
  3. Muestra un estado de “Verificando el pago…” mientras sondeas
  4. Muestra una interfaz de éxito o fallo basada en el estado confirmado por el servidor
Siempre verifica el estado del pago del lado del servidor después de las redirecciones. Que el usuario vuelva a tu página solo significa que la autenticación se completó, no indica si el pago fue exitoso o no.

Solución de problemas

  • Verifica que elementId coincida con el id de un div que realmente exista en el DOM.
  • Asegúrate de que displayType: 'inline' fue pasado a Initialize.
  • Comprueba que el checkoutUrl sea válido.
  • Asegúrate de estar escuchando el evento checkout.breakdown.
  • Los impuestos solo se calculan después de que el usuario ingresa un país y código postal válidos en el marco de pago.

Activar billeteras digitales

Para obtener información detallada sobre cómo configurar Apple Pay, Google Pay y otras billeteras digitales, consulta la página de Billeteras digitales.

Configuración rápida de Apple Pay

1

Download domain association file

2

Request activation

Envía un correo electrónico a support@dodopayments.com con la URL de tu dominio de producción y solicita la activación de Apple Pay.
3

Test after confirmation

Una vez confirmado, verifica que Apple Pay aparezca en el proceso de pago y prueba el flujo completo.
Apple Pay requiere verificación de dominio antes de que aparezca en producción. Contacta al soporte antes de salir en vivo si planeas ofrecer Apple Pay.

Compatibilidad con navegadores

El SDK de Dodo Payments Checkout es compatible con los siguientes navegadores:
  • Chrome (última versión)
  • Firefox (última versión)
  • Safari (última versión)
  • Edge (última versión)
  • IE11+

Proceso de pago en línea vs superposición

Elige el tipo de proceso de pago adecuado para tu caso de uso:
FuncionalidadProceso de pago en líneaProceso de pago en superposición
Profundidad de integraciónTotalmente integrado en la páginaModal sobre la página
Control de diseñoControl totalLimitado
BrandingSin fisurasIndependiente de la página
Esfuerzo de implementaciónMayorMenor
Ideal paraPáginas de pago personalizadas, flujos de alta conversiónIntegración rápida, páginas existentes
Usa el proceso de pago en línea cuando quieras el máximo control sobre la experiencia de pago y una integración de marca sin fisuras. Usa el proceso de pago en superposición para una integración más rápida con cambios mínimos en tus páginas existentes.

Recursos relacionados

Para más ayuda, visita nuestra comunidad de Discord o contacta a nuestro equipo de soporte para desarrolladores.