Skip to main content
El módulo @dodopayments/nuxt proporciona a tu aplicación Nuxt tres controladores de rutas de servidor. checkoutHandler devuelve URL de checkout, customerPortalHandler envía al cliente a Customer Portal y Webhooks verifica los eventos de webhook y los dirige a tu código.

Checkout API Route

Crea URL de checkout desde una ruta de servidor de Nuxt.

Customer Portal API Route

Permite que los clientes gestionen sus suscripciones y datos desde una ruta de servidor de Nuxt.

Webhooks API Route

Recibe y verifica eventos de webhook de Dodo Payments en Nuxt.

Descripción general

El módulo registra sus controladores como auto-imports de servidor de Nuxt, por lo que tus rutas de servidor llaman a checkoutHandler, customerPortalHandler y Webhooks sin instrucciones de importación. Cada ruta lee tus credenciales desde runtimeConfig. Nuxt expone únicamente runtimeConfig.public al navegador, por lo que la clave de API y el secreto del webhook permanecen en el servidor.

Instalación

1

Install the Nuxt Module

Ejecuta este comando en la raíz de tu proyecto:
El módulo especifica Nuxt 3 (3.13.1 o posterior) y zod 3.25 o posterior como dependencias peer.
2

Register the Module in nuxt.config.ts

Añade @dodopayments/nuxt a tu array modules y asigna tus credenciales a runtimeConfig:
nuxt.config.ts
Define estas variables de entorno, por ejemplo en un archivo .env en la raíz de tu proyecto:Un servidor Nuxt compilado no lee tu archivo .env. En runtime, Nuxt sobrescribe un valor de runtimeConfig únicamente a partir de la variable que coincide con su ruta, como NUXT_PRIVATE_RETURN_URL para private.returnUrl, así que define también estas variables en el entorno de alojamiento.
Nunca confirmes tu archivo .env ni tus secretos en el control de versiones.

Ejemplos de controladores de rutas de API

Los ejemplos crean rutas de servidor en el directorio server/routes/api/. Nuxt asigna cada archivo según su nombre y sufijo de método, por lo que checkout.get.ts gestiona GET /api/checkout.
Usa este controlador para añadir checkout de Dodo Payments a tu aplicación Nuxt. Una ruta GET proporciona checkout estático. Una ruta POST proporciona sesiones de checkout o checkout dinámico cuando defines type: "dynamic".
Crea una ruta GET para checkout estático:
checkout.post.ts proporciona un flujo POST. Usa el ejemplo de checkout dinámico o el ejemplo de sesión de checkout:
Si productId falta o no es válido, el controlador devuelve una respuesta 400.
Para probar las rutas, envía estas solicitudes:

Controlador de rutas de checkout

El controlador de checkout admite las tres formas de aceptar pagos con Dodo Payments:
  • Enlaces de pago estáticos: URL que se pueden compartir y que cobran pagos sin código.
  • Enlaces de pago dinámicos: Enlaces de pago que generas con datos personalizados. Usan endpoints obsoletos.
  • Sesiones de checkout: Checkout alojado con carrito de productos, datos del cliente y opciones de personalización. Este es el flujo recomendado.
checkoutHandler acepta estas opciones:

Parámetros de consulta compatibles

string
requerido
Identificador del producto, por ejemplo ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
predeterminado:"1"
Cantidad del producto.
string
Nombre completo del cliente. Se ignora si se proporciona firstName o lastName.
string
Nombre del cliente.
string
Apellido del cliente.
string
Dirección de correo electrónico del cliente.
string
País del cliente, como código alpha-2 ISO 3166-1.
string
Línea de dirección del cliente.
string
Ciudad del cliente.
string
Estado o provincia del cliente.
string
Código ZIP o postal del cliente.
boolean
Establécelo en true para desactivar el campo de nombre completo.
boolean
Establécelo en true para desactivar el campo de nombre.
boolean
Establécelo en true para desactivar el campo de apellido.
boolean
Establécelo en true para desactivar el campo de correo electrónico.
boolean
Establécelo en true para desactivar el campo de país.
boolean
Establécelo en true para desactivar el campo de línea de dirección.
boolean
Establécelo en true para desactivar el campo de ciudad.
boolean
Establécelo en true para desactivar el campo de estado.
boolean
Establécelo en true para desactivar el campo de código ZIP.
string
Moneda del pago, por ejemplo USD.
boolean
predeterminado:"true"
Muestra u oculta el selector de moneda.
number
Fija el importe cobrado, en unidades principales de moneda, por ejemplo 12.5 para $12.50. Solo funciona con productos Pay What You Want y se ignora si está por debajo del precio mínimo del producto.
boolean
predeterminado:"true"
Muestra u oculta la sección de descuentos.
string
Cualquier parámetro de consulta que comience con metadata_ se pasa como metadatos.
El controlador añade returnUrl de su configuración al enlace como redirect_url.
Si productId falta, el controlador devuelve una respuesta 400. Los parámetros de consulta no válidos y los ID de producto inexistentes también devuelven 400.

Formato de respuesta

El checkout estático devuelve una respuesta JSON con la URL de checkout. En modo de prueba, la URL usa test.checkout.dodopayments.com.
El checkout dinámico actúa como proxy de los endpoints obsoletos POST /payments y POST /subscriptions. Sigue funcionando para integraciones existentes, pero las integraciones nuevas deben usar sesiones de checkout.

Formato de respuesta

El checkout dinámico devuelve una respuesta JSON con la URL de checkout:
Las sesiones de checkout crean un checkout alojado para compras únicas y suscripciones, con control total sobre la personalización. product_cart es el único campo obligatorio. Si el cuerpo no contiene return_url, el controlador usa returnUrl de su configuración.Para obtener más detalles y consultar todos los campos compatibles, visita la Guía de integración de Checkout Sessions.Una sesión creada con payment_method_id no devuelve ninguna URL de checkout, por lo que el controlador responde con 400. Para cobrar con un método de pago guardado, crea la sesión con el SDK.

Formato de respuesta

Las sesiones de checkout devuelven una respuesta JSON con la URL de checkout:

Controlador de rutas de Customer Portal

El controlador de rutas de Customer Portal crea una sesión de Customer Portal para el cliente que proporciones y redirige el navegador a ella.
El controlador no comprueba quién realiza la llamada. Cualquiera que lo solicite con un ID de cliente obtiene el portal de ese cliente. Protege la ruta con tu propia autenticación y pasa únicamente el ID de cliente del usuario que ha iniciado sesión.

Parámetros de consulta

string
requerido
El ID del cliente para la sesión del portal, por ejemplo ?customer_id=cus_123.
boolean
Si se establece en true, Dodo Payments también envía por correo electrónico el enlace del portal al cliente.
A partir de @dodopayments/nuxt 0.2.11, el controlador devuelve HTTP 400 si falta customer_id y HTTP 500 si no se puede crear la sesión del portal. Las versiones anteriores devuelven HTTP 200 con el cuerpo JSON { "status": 400, "body": "Missing customer_id in query parameters" }. Para basarte en el estado HTTP, actualiza a la versión 0.2.11 o posterior.

Controlador de rutas de webhook

El controlador de rutas de webhook verifica cada solicitud antes de ejecutar tu código:
  • Método: Solo se admiten solicitudes POST. Otros métodos devuelven 405.
  • Verificación de firma: Verifica el cuerpo de la solicitud sin procesar y los encabezados webhook-id, webhook-timestamp y webhook-signature con webhookKey, siguiendo la especificación de Standard Webhooks. Devuelve 401 si la verificación falla.
  • Validación de payload: Valida el payload con Zod. Devuelve 400 si el payload no es válido.
  • Gestión de errores:
    • 401: Firma no válida
    • 400: Payload no válido
    • 500: Error interno durante la verificación
  • Enrutamiento de eventos: Llama a onPayload para cada evento, después al controlador correspondiente al tipo de evento y devuelve 200.
El adaptador no captura los errores generados en tus controladores. Estos se propagan a Nuxt y la solicitud falla.

Controladores de eventos de webhook compatibles

Cada controlador recibe el payload verificado correspondiente a su tipo de evento:
Para saber qué significa cada evento, consulta la Guía de eventos de webhook.

Prompt para LLM

Copia este prompt en tu asistente de programación con IA para que añada el módulo a tu proyecto. Para proporcionar también a tu agente la documentación y las skills de Dodo Payments, instala el Agent Plugin.
Última modificación el 26 de septiembre de 2026