GitHub Repository
Boilerplate mínimo de Go + Dodo Payments
Descripción general
El boilerplate de Go es un servidor Go mínimo que vende tus productos de Dodo Payments desde una página de precios. Crea sesiones de checkout, verifica y gestiona webhooks, y abre el Customer Portal. Clónalo como punto de partida para tu propio backend de Go.El boilerplate requiere Go 1.24.4 o posterior, la versión establecida en su
go.mod. Utiliza un diseño con cmd, internal y templates, renderiza la página de precios con plantillas HTML de Go y llama a la API de Dodo Payments mediante el SDK dodopayments-go.Características
- Configuración rápida: clona el repositorio, añade tus API keys a
.enve inicia el servidor conmake run. - Integración de pagos: un flujo de checkout que crea sesiones de checkout con el SDK
dodopayments-go. - UI moderna: una página de precios con tema oscuro creada con plantillas HTML de Go y Tailwind CSS.
- Gestión de webhooks: verifica la firma de cada webhook antes de procesar el evento.
- Customer Portal: gestión de suscripciones mediante autoservicio a través del Customer Portal.
- Buenas prácticas de Go: una estructura de proyecto limpia con
cmd,internalytemplates. - Checkout precompletado: envía el nombre y el email del cliente al checkout para que no tenga que escribirlos de nuevo.
Requisitos previos
Antes de comenzar, necesitas:- Go 1.24.4 o posterior. Comprueba tu versión con
go version. - Una cuenta de Dodo Payments, para crear una API key y una clave de firma de webhook en el dashboard.
- Al menos un producto, creado en Products en el dashboard.
Inicio rápido
1
Clona el repositorio
2
Instala las dependencias
make install ejecuta go mod download y luego go mod tidy. Para descargar los módulos sin make, ejecuta:3
Get API Credentials
Regístrate en Dodo Payments y copia ambas claves desde el dashboard:
- API Key: Developer → API Keys
- Webhook Key: Developer → Webhooks. Cada endpoint de webhook tiene su propia clave de firma. Para crear un endpoint que llegue a tu servidor local, consulta Probar webhooks localmente.
4
Configure Environment Variables
Crea un archivo Establece estos valores en El servidor lee estas variables al iniciarse:
.env en la raíz del proyecto a partir de la plantilla:.env:.env
El servidor se cierra al iniciarse si falta alguna de las claves obligatorias.
.env.example establece PORT y DODO_PAYMENTS_RETURN_URL en el puerto 8080. Esta página utiliza el puerto 8000, así que establece ambos en 8000 como se muestra, o reemplaza 8000 por 8080 en los comandos de esta página.5
Add Your Products
Reemplaza el producto de ejemplo en
internal/lib/products.go por tus productos. Copia el ID de cada producto desde Products en el dashboard:Price establece únicamente el precio que muestra la página de precios, en la unidad monetaria más pequeña: 9999 se muestra como $99.99. Checkout cobra el precio del producto en Dodo Payments.6
Run the Development Server
make run compila el servidor en bin/server y lo inicia. Para ejecutar el servidor sin compilar primero un binario, ejecuta:Verás una página de precios con tema oscuro que muestra tus productos, lista para realizar compras.
Estructura del proyecto
El repositorio tiene esta estructura:Endpoints de la API
El boilerplate incluye los siguientes endpoints preconfigurados:Personalización
Actualizar la información de los productos
Editainternal/lib/products.go para cambiar:
- IDs de productos (desde Products en tu dashboard de Dodo Payments)
- Nombres
- Precios mostrados en la página de precios
- Funciones
- Descripciones
/mo a cada precio y muestra Custom en lugar de un precio cuando Price es 100000 o superior. Para cambiar esto, edita templates/index.html.
Precompletar los datos del cliente
En.env, la función handleCheckout envía datos de cliente codificados directamente a /api/checkout. Sustitúyela por los datos de tu usuario autenticado:
handlePortal reutiliza estos datos del cliente y recurre al mismo nombre y email de ejemplo. En una aplicación de producción, inyecta estos valores desde tu sistema de autenticación en ambas funciones.
Eventos de webhook
internal/api/webhook.go verifica cada solicitud con client.Webhooks.Unwrap y la clave de DODO_PAYMENTS_WEBHOOK_KEY, y luego enruta el evento según su type. Estos eventos tienen un handler, y cada handler registra los datos del evento:
El handler también acepta
subscription.on_hold, subscription.failed, subscription.expired e subscription.plan_changed sin realizar ninguna acción, y registra cualquier otro tipo de evento como no gestionado. Responde con 200 a cada evento verificado. Para consultar todos los tipos de evento, consulta la Guía de eventos de webhook.
Añade tu lógica de negocio a las funciones handler para:
- Actualizar los permisos de usuario en tu base de datos
- Enviar emails de confirmación
- Provisionar acceso a productos digitales
- Realizar un seguimiento de analytics y métricas
Probar webhooks localmente
Dodo Payments no puede acceder alocalhost. Para recibir webhooks durante el desarrollo, expón tu servidor local con un túnel como ngrok:
/api/webhook:
DODO_PAYMENTS_WEBHOOK_KEY y reinicia el servidor.
Implementación
Compilar para producción
make build compila el servidor en bin/server:
make, ejecuta:
Implementar en Vercel
[.env a la configuración del proyecto de Vercel, porque .env no está en el repositorio. Después, establece tu endpoint de webhook en el dashboard como https://yourdomain.com/api/webhook.
Docker
Crea unDockerfile en la raíz del proyecto. La etapa de compilación debe utilizar Go 1.24.4 o posterior para coincidir con go.mod:
templates/ junto al binario, porque el servidor carga las plantillas desde el directorio de trabajo. Compila y ejecuta la imagen:
PORT de .env, así que mantén PORT=8000 para que coincida con la asignación de puertos.
Consideraciones para producción
Solución de problemas
Build errors or missing dependencies
Build errors or missing dependencies
Comprueba que
go version indique Go 1.24.4 o posterior y vuelve a descargar los módulos:Checkout session creation fails
Checkout session creation fails
Causas comunes:
- El ID del producto no es válido. Comprueba que exista en Products en el mismo modo que tu API key.
- La API key o
DODO_PAYMENTS_ENVIRONMENTen.enves incorrecta. Una clave de modo de prueba necesitatest_mode. - Para consultar el error exacto, revisa los logs del servidor. El handler registra cada solicitud fallida antes de devolver
500.
Webhooks not receiving events
Webhooks not receiving events
Para realizar pruebas locales, expón tu servidor con ngrok:Establece la URL del webhook en tu dashboard de Dodo Payments como la URL de ngrok. Después, establece
DODO_PAYMENTS_WEBHOOK_KEY en .env como la clave de firma de ese endpoint. Si los logs del servidor muestran webhook verification failed, la clave no coincide con la del endpoint.Templates not loading
Templates not loading
El servidor carga
templates/base.html e templates/index.html desde el directorio de trabajo. Inicia el servidor desde la raíz del proyecto o cambia las rutas de las plantillas en cmd/server/main.go.Más información
Go SDK
Documentación completa del SDK de Go
Webhooks Documentation
Conoce todos los eventos de webhook y las buenas prácticas
Checkout Sessions
Análisis detallado de la configuración de las sesiones de checkout
API Reference
Documentación completa de la API de Dodo Payments
Soporte
Para obtener ayuda con el boilerplate:- Haz preguntas en la comunidad de Discord.
- Consulta el repositorio de GitHub para ver incidencias y actualizaciones.
- Contacta con el equipo de soporte.