> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plantilla Go

> Comienza rápidamente con nuestra plantilla mínima de Go para integrar Dodo Payments en tus aplicaciones backend de Go

<Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/go-boilerplate">
  Boilerplate mínimo de Go + Dodo Payments
</Card>

## Descripción general

La plantilla Go proporciona un punto de partida listo para producción para integrar Dodo Payments con tu backend de Go. Esta plantilla incluye manejo de sesiones de pago, verificación de webhooks, integración del portal del cliente y sigue las mejores prácticas de Go para ayudarte a comenzar a aceptar pagos rápidamente.

<Info>
  Este boilerplate utiliza Go 1.21+ con patrones de arquitectura limpia (`cmd`, `internal`, `templates`), plantillas HTML y el SDK `dodopayments-go` para una integración de API sin fisuras.
</Info>

### Características

* **Configuración rápida** - Comienza en menos de 5 minutos
* **Integración de pagos** - Flujo de pago preconfigurado usando el SDK `dodopayments-go`
* **UI moderna** - Página de precios limpia con tema oscuro y plantillas HTML
* **Gestión de webhooks** - Verifica y procesa eventos de pago de forma segura
* **Portal del cliente** - Administración de suscripciones en autoservicio
* **Buenas prácticas de Go** - Arquitectura limpia con `cmd`, `internal` e `templates`
* **Checkout prellenado** - Demuestra cómo pasar datos del cliente para mejorar la experiencia de usuario

## Requisitos previos

Antes de comenzar, asegúrate de tener:

* **Go 1.21+**
* **Cuenta de Dodo Payments** (para acceder a las claves de API y Webhook desde el panel)

## Inicio rápido

<Steps>
  <Step title="Clona el repositorio">
    ```bash theme={null}
    git clone https://github.com/dodopayments/go-boilerplate.git
    cd go-boilerplate
    ```
  </Step>

  <Step title="Instala las dependencias">
    ```bash theme={null}
    make install
    ```

    O manualmente:

    ```bash theme={null}
    go mod download
    ```
  </Step>

  <Step title="Get API Credentials">
    Regístrate en [Dodo Payments](https://dodopayments.com/) y obtén tus credenciales desde el panel de control:

    * **Clave de API:** [Panel → Desarrollador → Claves de API](https://app.dodopayments.com/developer/api-keys)
    * **Clave de Webhook:** [Panel → Desarrollador → Webhooks](https://app.dodopayments.com/developer/webhooks)

    <Tip>
      ¡Asegúrate de estar en **Modo de prueba** mientras desarrollas!
    </Tip>
  </Step>

  <Step title="Configure Environment Variables">
    Crea un archivo `.env` en el directorio raíz:

    ```bash theme={null}
    cp .env.example .env
    ```

    Actualiza los valores con tus credenciales de Dodo Payments:

    ```bash .env theme={null}
    DODO_PAYMENTS_API_KEY=your_api_key_here
    DODO_PAYMENTS_WEBHOOK_KEY=your_webhook_signing_key_here
    DODO_PAYMENTS_RETURN_URL=http://localhost:8000
    DODO_PAYMENTS_ENVIRONMENT=test_mode
    ```

    <Warning>
      Nunca añadas tu archivo `.env` al control de versiones. Ya está incluido en `.gitignore`.
    </Warning>
  </Step>

  <Step title="Add Your Products">
    Actualiza `internal/lib/products.go` con tus ID de producto reales de Dodo Payments:

    ```go theme={null}
    var Products = []Product{
        {
            ProductID:   "pdt_001", // Replace with your product ID
            Name:        "Basic Plan",
            Description: "Get access to basic features and support",
            Price:       9999, // in cents
            Features: []string{
                "Access to basic features",
                "Email support",
                "1 Team member",
                "Basic analytics",
            },
        },
        // ... add more products
    }
    ```
  </Step>

  <Step title="Ejecuta el servidor de desarrollo">
    ```bash theme={null}
    make run
    ```

    O manualmente:

    ```bash theme={null}
    go run cmd/server/main.go
    ```

    Abre [http://localhost:8000](http://localhost:8000) para ver tu página de precios!

    <Check>
      Deberías ver una página de precios con tema oscuro y tus productos listos para comprar.
    </Check>
  </Step>
</Steps>

## Estructura del proyecto

```text theme={null}
go-boilerplate/
├── cmd/
│   └── server/             # Application entry point
├── internal/
│   ├── api/                # API handlers (Checkout, Portal, Webhook)
│   ├── core/               # Configuration and system core
│   └── lib/                # Shared logic (Products, Customer utils)
├── templates/              # HTML templates
├── Makefile                # Build and run commands
├── go.mod                  # Go module definition
├── go.sum                  # Dependency checksums
├── .env.example            # Environment template
└── README.md
```

## Puntos finales de la API

La plantilla incluye los siguientes puntos finales preconfigurados:

| Endpoint               | Método | Descripción                                |
| ---------------------- | ------ | ------------------------------------------ |
| `/`                    | GET    | Página de precios con listado de productos |
| `/api/checkout`        | POST   | Crear una nueva sesión de pago             |
| `/api/webhook`         | POST   | Procesar webhooks de Dodo Payments         |
| `/api/customer-portal` | POST   | Generar URL del portal del cliente         |

## Personalización

### Actualiza la información del producto

Edita `internal/lib/products.go` para modificar:

* ID de productos (desde tu panel de Dodo)
* Precios
* Características
* Descripciones

```go theme={null}
var Products = []Product{
    {
        ProductID:   "pdt_001", // Replace with your product ID
        Name:        "Basic Plan",
        Description: "Get access to basic features and support",
        Price:       9999,
        Features: []string{
            "Access to basic features",
            "Email support",
            "1 Team member",
            "Basic analytics",
        },
    },
}
```

### Pre-llenar datos del cliente

En `templates/index.html`, reemplaza los datos de cliente codificados con tus datos reales de usuario:

```javascript theme={null}
const customerData = {
    name: "John Doe",       // Replace with actual logged-in user's name
    email: "john@example.com"  // Replace with actual logged-in user's email
};
```

En una aplicación de producción, inyectarías dinámicamente estos valores desde tu sistema de autenticación.

## Eventos de Webhook

El boilerplate demuestra cómo gestionar eventos de webhook en `internal/api/webhook.go`. Los eventos compatibles incluyen:

| Evento                | Descripción                                    |
| --------------------- | ---------------------------------------------- |
| `subscription.active` | Se dispara cuando una suscripción se activa    |
| `payment.succeeded`   | Se dispara cuando un pago se realiza con éxito |

Agrega tu lógica de negocio dentro del manejador de webhook para:

* Actualizar permisos de usuario en tu base de datos
* Enviar correos electrónicos de confirmación
* Proveer acceso a productos digitales
* Rastrear analíticas y métricas

## Pruebas de Webhooks Localmente

Para el desarrollo local, utiliza herramientas como [ngrok](https://ngrok.com/) para exponer tu servidor local:

```bash theme={null}
ngrok http 8000
```

Actualiza la URL del webhook en tu [Panel de Dodo Payments](https://app.dodopayments.com/developer/webhooks):

```
https://your-ngrok-url.ngrok.io/api/webhook
```

## Despliegue

### Compilar para producción

```bash theme={null}
make build
```

O manualmente:

```bash theme={null}
go build -o bin/server cmd/server/main.go
./bin/server
```

### Desplegar en Vercel

\[

![Desplegar con Vercel](https://vercel.com/button)

]\([https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate](https://vercel.com/new/clone?repository-url=https://github.com/dodopayments/go-boilerplate))

### Docker

Crea un `Dockerfile`:

```dockerfile theme={null}
FROM golang:1.21-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o bin/server cmd/server/main.go

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/bin/server .
COPY --from=builder /app/templates ./templates

EXPOSE 8000
CMD ["./server"]
```

Compila y ejecuta:

```bash theme={null}
docker build -t go-dodo .
docker run -p 8000:8000 --env-file .env go-dodo
```

### Consideraciones para producción

<Warning>
  Antes de desplegar en producción:

  * Cambia `DODO_PAYMENTS_ENVIRONMENT` a `live_mode`
  * Usa claves de API de producción desde el panel
  * Actualiza la URL del webhook a tu dominio de producción
  * Habilita HTTPS para todos los endpoints
</Warning>

## Solución de problemas

<AccordionGroup>
  <Accordion title="Build errors or missing dependencies">
    Asegúrate de que los módulos de Go estén correctamente descargados:

    ```bash theme={null}
    go mod tidy
    go mod download
    ```
  </Accordion>

  <Accordion title="Checkout session creation fails">
    **Causas comunes:**

    * ID de producto inválido: verifica que exista en tu panel de Dodo
    * Clave de API o entorno incorrecto en `.env`
    * Consulta los registros del servidor para mensajes de error detallados
  </Accordion>

  <Accordion title="Webhooks not receiving events">
    Para pruebas locales, usa [ngrok](https://ngrok.com) para exponer tu servidor:

    ```bash theme={null}
    ngrok http 8000
    ```

    Actualiza la URL del webhook en tu [panel de Dodo](https://app.dodopayments.com/developer/webhooks) a la URL de ngrok. Asegúrate de actualizar tu archivo `.env` con la clave correcta de verificación de webhook.
  </Accordion>

  <Accordion title="Templates not loading">
    Asegúrate de ejecutar el servidor desde el directorio raíz del proyecto o de que la ruta de las plantillas esté correctamente configurada en tu código.
  </Accordion>
</AccordionGroup>

## Aprende más

<CardGroup cols={2}>
  <Card title="Go SDK" icon="golang" href="/developer-resources/sdks/go">
    Documentación completa del SDK de Go
  </Card>

  <Card title="Webhooks Documentation" icon="webhook" href="/developer-resources/webhooks">
    Conoce todos los eventos de webhook y las mejores prácticas
  </Card>

  <Card title="Checkout Sessions" icon="credit-card" href="/developer-resources/checkout-session">
    Profundiza en la configuración de sesiones de pago
  </Card>

  <Card title="API Reference" icon="book" href="/api-reference/introduction">
    Documentación completa de la API de Dodo Payments
  </Card>
</CardGroup>

## Soporte

¿Necesitas ayuda con la plantilla?

* Únete a nuestra [comunidad de Discord](https://discord.gg/bYqAp4ayYh) para preguntas y discusiones
* Revisa el [repositorio de GitHub](https://github.com/dodopayments/go-boilerplate) para problemas y actualizaciones
* Contacta a nuestro [equipo de soporte](mailto:support@dodopayments.com) para asistencia
