Saltar al contenido principal

Descripción general

El SDK de Pago de Dodo Payments proporciona una forma fluida de integrar nuestra superposición de pago en su aplicación web. Construido con TypeScript y estándares web modernos, ofrece una solución robusta para manejar pagos con manejo de eventos en tiempo real y temas personalizables.
Imagen de portada de Pago en Superposición

Demostración

Demostración Interactiva

Vea el pago en superposición en acción con nuestra demostración en vivo.

Inicio Rápido

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

// Initialize the SDK
DodoPayments.Initialize({
  mode: "test", // 'test' or 'live'
  displayType: "overlay", // Optional: defaults to 'overlay' for overlay checkout
  onEvent: (event) => {
    console.log("Checkout event:", event);
  },
});

// Open checkout
DodoPayments.Checkout.open({
  checkoutUrl: "https://checkout.dodopayments.com/session/cks_123"
});
Obtenga su URL de pago desde la API de crear sesión de pago.

Guía de Integración Paso a Paso

1

Instalar el SDK

Instale el SDK de Pago de Dodo Payments utilizando su gestor de paquetes preferido:
npm install dodopayments-checkout
2

Inicializar el SDK

Inicialice el SDK en su aplicación, típicamente en su componente principal o punto de entrada de la aplicación:
import { DodoPayments } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "test", // Change to 'live' for production
  displayType: "overlay", // Optional: defaults to 'overlay' for overlay checkout
  onEvent: (event) => {
    console.log("Checkout event:", event);
    
    // Handle different events
    switch (event.event_type) {
      case "checkout.opened":
        // Checkout overlay has been opened
        break;
      case "checkout.closed":
        // Checkout has been closed
        break;
      case "checkout.error":
        // Handle errors
        console.error("Checkout error:", event.data?.message);
        break;
    }
  },
});
Siempre inicialice el SDK antes de intentar abrir el pago. La inicialización debe ocurrir una vez cuando su aplicación se carga.
3

Crear un Componente de Botón de Pago

Cree un componente que abra la superposición de pago:
// components/CheckoutButton.tsx
"use client";

import { Button } from "@/components/ui/button";
import { DodoPayments } from "dodopayments-checkout";
import { useEffect, useState } from "react";

export function CheckoutButton() {
  const [isLoading, setIsLoading] = useState(false);

  useEffect(() => {
    // Initialize the SDK
    DodoPayments.Initialize({
      mode: "test",
      displayType: "overlay",
      onEvent: (event) => {
        switch (event.event_type) {
          case "checkout.opened":
            setIsLoading(false);
            break;
          case "checkout.error":
            setIsLoading(false);
            console.error("Checkout error:", event.data?.message);
            break;
        }
      },
    });
  }, []);

  const handleCheckout = async () => {
    try {
      setIsLoading(true);
      await DodoPayments.Checkout.open({
        checkoutUrl: "https://checkout.dodopayments.com/session/cks_123"
      });
    } catch (error) {
      console.error("Failed to open checkout:", error);
      setIsLoading(false);
    }
  };

  return (
    <Button 
      onClick={handleCheckout}
      disabled={isLoading}
    >
      {isLoading ? "Loading..." : "Checkout Now"}
    </Button>
  );
}
4

Agregar Pago a Su Página

Utilice el componente de botón de pago en su aplicación:
// app/page.tsx
import { CheckoutButton } from "@/components/CheckoutButton";

export default function Home() {
  return (
    <main className="flex min-h-screen flex-col items-center justify-center p-24">
      <h1>Welcome to Our Store</h1>
      <CheckoutButton />
    </main>
  );
}
5

Manejar Páginas de Éxito y Fallo

Cree páginas para manejar redirecciones de pago:
// app/success/page.tsx
export default function SuccessPage() {
  return (
    <div className="flex min-h-screen flex-col items-center justify-center">
      <h1>Payment Successful!</h1>
      <p>Thank you for your purchase.</p>
    </div>
  );
}

// app/failure/page.tsx
export default function FailurePage() {
  return (
    <div className="flex min-h-screen flex-col items-center justify-center">
      <h1>Payment Failed</h1>
      <p>Please try again or contact support.</p>
    </div>
  );
}
6

Probar Su Integración

  1. Inicie su servidor de desarrollo:
npm run dev
  1. Pruebe el flujo de pago:
    • Haga clic en el botón de pago
    • Verifique que la superposición aparezca
    • Pruebe el flujo de pago utilizando credenciales de prueba
    • Confirme que las redirecciones funcionen correctamente
Debería ver eventos de pago registrados en la consola de su navegador.
7

Ir a Producción

Cuando esté listo para producción:
  1. Cambie el modo a 'live':
DodoPayments.Initialize({
  mode: "live",
  displayType: "overlay",
  onEvent: (event) => {
    console.log("Checkout event:", event);
  }
});
  1. Actualice sus URLs de pago para usar sesiones de pago en vivo desde su backend
  2. Pruebe el flujo completo en producción
  3. Monitoree eventos y errores

Referencia de API

Configuración

Opciones de Inicialización

interface InitializeOptions {
  mode: "test" | "live";
  displayType?: "overlay" | "inline";
  onEvent: (event: CheckoutEvent) => void;
}
OpciónTipoRequeridoDescripción
mode"test" | "live"Modo de entorno: 'test' para desarrollo, 'live' para producción
displayType"overlay" | "inline"NoTipo de visualización: 'overlay' para pago modal (predeterminado), 'inline' para pago embebido
onEventfunctionFunción de callback para manejar eventos de pago

Opciones de Pago

interface CheckoutOptions {
  checkoutUrl: string;
  options?: {
    showTimer?: boolean;
    showSecurityBadge?: boolean;
    manualRedirect?: boolean;
  };
}
OpciónTipoRequeridoDescripción
checkoutUrlstringURL de sesión de pago de la API de creación de sesión de pago
options.showTimerbooleanNoMostrar u ocultar el temporizador de pago. Por defecto es true. Cuando está deshabilitado, 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 pago no redirigirá automáticamente después de la finalización. En su lugar, recibirás los eventos checkout.status y checkout.redirect_requested para manejar la redirección tú mismo.

Métodos

Abrir Pago

Abre la superposición de pago con la URL de sesión de pago especificada.
DodoPayments.Checkout.open({
  checkoutUrl: "https://checkout.dodopayments.com/session/cks_123"
});
También puedes pasar opciones adicionales para personalizar el comportamiento del pago:
DodoPayments.Checkout.open({
  checkoutUrl: "https://checkout.dodopayments.com/session/cks_123",
  options: {
    showTimer: false,
    showSecurityBadge: false,
    manualRedirect: true,
  },
});
Al usar manualRedirect, maneja la finalización del pago en tu callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "overlay",
  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

Cierra programáticamente la superposición de pago.
DodoPayments.Checkout.close();

Verificar Estado

Devuelve si la superposición de pago está actualmente abierta.
const isOpen = DodoPayments.Checkout.isOpen();
// Returns: boolean

Eventos

El SDK proporciona eventos en tiempo real a los que puedes escuchar a través del callback onEvent:

Datos del Evento de Estado de 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 de Pago Solicitada

Cuando manualRedirect está habilitado, recibes el evento checkout.redirect_requested con los siguientes datos:
interface CheckoutRedirectRequestedEventData {
  message: {
    redirect_to?: string;
  };
}
DodoPayments.Initialize({
  onEvent: (event: CheckoutEvent) => {
    switch (event.event_type) {
      case "checkout.opened":
        // Checkout overlay has been opened
        break;
      case "checkout.payment_page_opened":
        // Payment page has been displayed
        break;
      case "checkout.customer_details_submitted":
        // Customer and billing details submitted
        break;
      case "checkout.closed":
        // Checkout has been closed
        break;
      case "checkout.redirect":
        // Checkout will perform a redirect
        break;
      case "checkout.error":
        // An error occurred
        console.error("Error:", event.data?.message);
        break;
      case "checkout.link_expired":
        // Checkout session has expired (only when showTimer is false)
        break;
      case "checkout.status":
        // Checkout status update (only when manualRedirect is enabled)
        const status = event.data?.message?.status;
        break;
      case "checkout.redirect_requested":
        // Redirect requested (only when manualRedirect is enabled)
        const redirectUrl = event.data?.message?.redirect_to;
        break;
    }
  }
});
Tipo de EventoDescripción
checkout.openedLa superposición de pago se ha abierto
checkout.payment_page_openedLa página de pago se ha mostrado
checkout.customer_details_submittedLos detalles del cliente y de facturación se han enviado
checkout.closedLa superposición de pago se ha cerrado
checkout.redirectEl pago realizará una redirección
checkout.errorOcurrió un error durante el pago
checkout.link_expiredSe activa cuando la sesión de pago expira. Solo se recibe cuando showTimer está configurado en false.
checkout.statusSe activa cuando manualRedirect está habilitado. Contiene el estado del pago (succeeded, failed, o processing).
checkout.redirect_requestedSe activa cuando manualRedirect está habilitado. Contiene la URL a la que redirigir al cliente.

Opciones de Implementación

Instalación a través de Gestor 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 nuestra 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 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", // Change to 'live' for production
            displayType: "overlay",
            onEvent: (event) => {
                console.log('Checkout event:', event);
            }
        });
    </script>
</head>
<body>
    <button onclick="openCheckout()">Checkout Now</button>

    <script>
        function openCheckout() {
            DodoPaymentsCheckout.DodoPayments.Checkout.open({
                checkoutUrl: "https://checkout.dodopayments.com/session/cks_123"
            });
        }
    </script>
</body>
</html>

Soporte para TypeScript

El SDK está escrito en TypeScript e incluye definiciones de tipo completas. Todas las API públicas están completamente tipadas para una mejor experiencia de desarrollador y soporte de IntelliSense.
import { DodoPayments, CheckoutEvent } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "test",
  displayType: "overlay",
  onEvent: (event: CheckoutEvent) => {
    // event is fully typed
    console.log(event.event_type, event.data);
  },
});

Manejo de Errores

El SDK proporciona información detallada sobre errores a través del sistema de eventos. Siempre implementa un manejo adecuado de errores en tu callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "overlay",
  onEvent: (event: CheckoutEvent) => {
    if (event.event_type === "checkout.error") {
      console.error("Checkout error:", event.data?.message);
      // Handle error appropriately
      // You may want to show a user-friendly error message
      // or retry the checkout process
    }
    if (event.event_type === "checkout.link_expired") {
      // Handle expired checkout session
      console.warn("Checkout session has expired");
    }
  }
});
Siempre maneja el evento checkout.error para proporcionar una buena experiencia de usuario cuando ocurren errores.

Mejores Prácticas

  1. Inicializa una vez: Inicializa el SDK una vez cuando tu aplicación se carga, no en cada intento de pago
  2. Manejo de errores: Siempre implementa un manejo adecuado de errores en tu callback de eventos
  3. Modo de prueba: Usa el modo test durante el desarrollo y cambia a live solo cuando estés listo para producción
  4. Manejo de eventos: Maneja todos los eventos relevantes para una experiencia de usuario completa
  5. URLs válidas: Siempre usa URLs de pago válidas de la API de creación de sesión de pago
  6. TypeScript: Usa TypeScript para una mejor seguridad de tipos y experiencia de desarrollador
  7. Estados de carga: Muestra estados de carga mientras se abre el pago para mejorar la experiencia de usuario
  8. Redirecciones manuales: Usa manualRedirect cuando necesites control personalizado sobre la navegación posterior al pago
  9. Manejo de temporizadores: Desactiva el temporizador (showTimer: false) si deseas manejar la expiración de la sesión manualmente

Solución de Problemas

Causas posibles:
  • SDK no inicializado antes de llamar a open()
  • URL de pago no válida
  • Errores de JavaScript en la consola
  • Problemas de conectividad de red
Soluciones:
  • Verifica que la inicialización del SDK ocurra antes de abrir el pago
  • Revisa si hay errores en la consola
  • Asegúrate de que la URL de pago sea válida y provenga de la API de creación de sesión de pago
  • Verifica la conectividad de red
Causas posibles:
  • Manejador de eventos no configurado correctamente
  • Errores de JavaScript que impiden la propagación de eventos
  • SDK no inicializado correctamente
Soluciones:
  • Confirma que el manejador de eventos esté configurado correctamente en Initialize()
  • Revisa la consola del navegador en busca de errores de JavaScript
  • Verifica que la inicialización del SDK se haya completado con éxito
  • Prueba primero con un manejador de eventos simple
Causas posibles:
  • Conflictos de CSS con los estilos de tu aplicación
  • Configuraciones de tema no aplicadas correctamente
  • Problemas de diseño responsivo
Soluciones:
  • Revisa si hay conflictos de CSS en las herramientas de desarrollo del navegador
  • Verifica que las configuraciones de tema sean correctas
  • Prueba en diferentes tamaños de pantalla
  • Asegúrate de que no haya conflictos de z-index con la superposición

Habilitando Apple Pay

Apple Pay permite a los clientes completar pagos de manera rápida y segura utilizando sus métodos de pago guardados. Cuando está habilitado, los clientes pueden lanzar el modal de Apple Pay directamente desde la superposición de pago en dispositivos compatibles.
Apple Pay es compatible con iOS 17+, iPadOS 17+ y Safari 17+ en macOS.
Para habilitar Apple Pay para tu dominio en producción, sigue estos pasos:
1

Descargar y subir el archivo de asociación de dominio de Apple Pay

Descarga el archivo de asociación de dominio de Apple Pay.Sube el archivo a tu servidor web en /.well-known/apple-developer-merchantid-domain-association. Por ejemplo, si tu sitio web es example.com, haz que el archivo esté disponible en https://example.com/well-known/apple-developer-merchantid-domain-association.
2

Solicitar activación de Apple Pay

Envía un correo electrónico a [email protected] con la siguiente información:
  • La URL de tu dominio de producción (por ejemplo, https://example.com)
  • Solicitud para habilitar Apple Pay para tu dominio
Recibirás confirmación dentro de 1-2 días hábiles una vez que Apple Pay haya sido habilitado para tu dominio.
3

Verificar disponibilidad de Apple Pay

Después de recibir la confirmación, prueba Apple Pay en tu pago:
  1. Abre tu pago en un dispositivo compatible (iOS 17+, iPadOS 17+, o Safari 17+ en macOS)
  2. Verifica que el botón de Apple Pay aparezca como una opción de pago
  3. Prueba el flujo completo de pago
Apple Pay debe estar habilitado para tu dominio antes de que aparezca como una opción de pago en producción. Contacta al soporte antes de salir en vivo si planeas ofrecer Apple Pay.

Soporte de 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+

Pago en Superposición vs Pago en Línea

Elige el tipo de pago adecuado para tu caso de uso:
CaracterísticaPago en SuperposiciónPago en Línea
Profundidad de integraciónModal sobre la páginaTotalmente embebido en la página
Control de diseñoLimitadoControl total
MarcaSeparado de la páginaSin costuras
Esfuerzo de implementaciónMenorMayor
Mejor paraIntegración rápida, páginas existentesPáginas de pago personalizadas, flujos de alta conversión
Usa pago en superposición para una integración más rápida con cambios mínimos en tus páginas existentes. Usa pago en línea cuando desees el máximo control sobre la experiencia de pago y una marca sin costuras.

Recursos Relacionados

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