@dodopayments/nextjs proporciona tres controladores de rutas a tu proyecto de Next.js App Router. Checkout devuelve URL de checkout, CustomerPortal envía al cliente a Customer Portal y Webhooks verifica los eventos de webhook y los dirige a tu código. El paquete es compatible con Next.js 14, 15 y 16.
Checkout Handler
Crea URL de checkout con flujos de enlaces de pago estáticos, dinámicos y sesiones de checkout.
Customer Portal
Permite a los clientes gestionar sus suscripciones y datos.
Webhooks
Recibe y procesa eventos de webhook de Dodo Payments.
Instalación
1
Install the Package
Ejecuta este comando en la raíz de tu proyecto:El paquete también requiere Zod 3.25 o Zod 4 como dependencia peer.
2
Set Up Environment Variables
Crea un archivo
.env en la raíz de tu proyecto. Crea la API key en Developer → API Keys y el secreto del webhook en Developer → Webhooks, dentro del dashboard:DODO_PAYMENTS_RETURN_URL es la página a la que llegan los clientes después del checkout. Si no pasas un entorno, los controladores usan live_mode.Ejemplos de controladores de rutas
Todos los ejemplos asumen que utilizas Next.js App Router.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
Utiliza este controlador para añadir el checkout de Dodo Payments a tu aplicación. Un controlador
GET gestiona el checkout estático. Un controlador POST gestiona las sesiones de checkout o el checkout dinámico cuando estableces type: "dynamic".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 recaudan pagos sin código.
- Enlaces de pago dinámicos: enlaces de pago que generas con datos personalizados. Utilizan endpoints obsoletos.
- Sesiones de checkout: checkout alojado con un carrito de productos, datos del cliente y opciones de personalización. Este es el flujo recomendado.
Static Checkout (GET)
Static Checkout (GET)
Query Parameters compatibles
Fija el importe cobrado, en unidades principales de la 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.returnUrl desde su configuración al enlace como redirect_url.Formato de respuesta
El checkout estático devuelve una respuesta JSON con la URL de checkout. En modo de prueba, la URL utilizatest.checkout.dodopayments.com.Dynamic Checkout (POST)
Dynamic Checkout (POST)
Checkout Sessions (POST)
Checkout Sessions (POST)
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 body no contiene return_url, el controlador utiliza returnUrl de su configuración.Para obtener más información y consultar todos los campos compatibles, consulta la Guía de integración de Checkout Sessions.Una sesión creada con payment_method_id no devuelve una 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 indiques y redirige el navegador a ella.Query Parameters
Si se establece en
true, Dodo Payments también envía por correo electrónico el enlace del portal al cliente.customer_id y 500 si no se puede crear la sesión del portal.
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. Los demás métodos devuelven 405.
- Verificación de firma: Verifica el cuerpo sin procesar de la solicitud con respecto a los encabezados
webhook-id,webhook-timestampywebhook-signaturemediantewebhookKey. Devuelve 401 si la verificación falla. - Validación del payload: Analiza el body verificado como JSON y lo valida con Zod. Devuelve 400 cuando el payload analizado no coincide con el esquema del webhook.
- Gestión de errores:
- 401: Firma no válida
- 400: Payload no válido
- 500: Errores inesperados de verificación, JSON con formato incorrecto o errores lanzados por tus callbacks
- Enrutamiento de eventos: Llama a
onPayloadpara cada evento, después al controlador correspondiente al tipo de evento y devuelve 200.