Skip to main content
El Go SDK proporciona a las aplicaciones Go acceso tipado a la REST API de Dodo Payments. Cada método recibe un context.Context, los parámetros de solicitud usan un envoltorio Field que separa los valores cero de los campos omitidos, y puedes añadir middleware a cada solicitud.

Instalación

Añade el módulo a tu proyecto:
Para fijar una versión específica:
El SDK requiere Go 1.22 o una versión posterior.

Inicio Rápido

Crea un cliente y, a continuación, crea una sesión de checkout:
Si omites option.WithBearerToken, NewClient lee la variable de entorno DODO_PAYMENTS_API_KEY. Si omites option.WithEnvironmentTestMode(), el cliente se conecta al modo live. Una clave de API del modo test solo funciona en el modo test.
Guarda las claves de API en variables de entorno o en un gestor de secretos. Nunca las incluyas directamente en el código fuente.

Funciones principales

Context Support

Cada método recibe un context.Context para cancelaciones y timeouts.

Strong Typing

Parámetros de solicitud y estructuras de respuesta tipados para realizar comprobaciones en tiempo de compilación.

Middleware

Añade middleware con option.WithMiddleware para el registro, las métricas y la lógica personalizada.

Goroutine Safe

Comparte un cliente entre goroutines.

Configuración

NewClient lee DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (tu secreto de firma de webhook) y DODO_PAYMENTS_BASE_URL desde el entorno. Las opciones que pasas, como option.WithBearerToken, option.WithWebhookKey e option.WithBaseURL, las sustituyen. Para verificar un webhook, pasa el cuerpo sin procesar de la solicitud y los encabezados a client.Webhooks.Unwrap(rawBody, r.Header). Comprueba la firma con tu clave de webhook y devuelve el evento analizado. client.Webhooks.UnsafeUnwrap(rawBody) analiza el cuerpo sin verificarlo, así que úsalo únicamente para pruebas. Consulta Webhooks. Los ejemplos de esta página usan el client de Inicio rápido.

Context y timeouts

Las solicitudes no tienen timeout de forma predeterminada. Un plazo límite de context limita la llamada completa, incluidos los reintentos. Para limitar cada intento, añade option.WithRequestTimeout():

Configuración de reintentos

El SDK reintenta los errores de conexión y las respuestas con status 408, 409, 429 o 500 y superiores. De forma predeterminada, realiza dos reintentos con backoff exponencial. Establece option.WithMaxRetries en el cliente o en una sola solicitud:

Operaciones comunes

Los ejemplos de esta sección también usan un context, por ejemplo ctx := context.Background().

Crear una sesión de checkout

Crea una sesión de checkout y, a continuación, redirige al cliente a la CheckoutURL devuelta:
Cada URL de checkout funciona una sola vez y caduca después de 24 horas. Consulta Sesiones de checkout para ver todas las opciones de sesión.

Gestionar clientes

Crea un cliente con una dirección de email y un nombre y, a continuación, recupéralo por ID. Los valores de metadata usan los tipos unión del paquete shared:

Gestionar suscripciones

Crea una suscripción, realiza un cargo en una suscripción on-demand y lee el historial de uso de una suscripción.
POST /subscriptions (el método Subscriptions.New del SDK) está obsoleto. Sigue funcionando para integraciones existentes, pero las integraciones nuevas deben crear suscripciones mediante una sesión de checkout.
Billing solo requiere Country, un código de país ISO de dos letras. Customer es un CustomerRequestUnionParam: pasa AttachExistingCustomerParam{CustomerID: ...} para un cliente existente o NewCustomerParam{Email: ..., Name: ...} para crear uno. Charge se utiliza para suscripciones on-demand, e ProductPrice está expresado en la unidad monetaria más pequeña. GetUsageHistory devuelve una página de resultados; GetUsageHistoryAutoPaging itera por todas las páginas.

Facturación basada en el uso

Ingerir eventos de uso

Envía eventos de uso para un cliente:
El EventID es la clave de idempotencia, así que asigna a cada evento un valor único. Si el mismo EventID aparece dos veces en una solicitud, se rechaza la solicitud completa. Si ya se había ingerido un EventID, se ignora el evento nuevo. Una solicitud acepta hasta 1.000 eventos. Timestamp toma de forma predeterminada la hora actual y se rechaza si es de hace más de 1 hora o si está más de 5 minutos en el futuro.

Enumerar eventos de uso

Enumera los eventos filtrados por cliente y nombre del evento:
List devuelve una página. Para iterar por todas las páginas, llama a client.UsageEvents.ListAutoPaging(ctx, params) y usa un bucle con iter.Next(), iter.Current() e iter.Err(). Otros métodos de enumeración tienen la misma variante AutoPaging, y cada página tiene un método GetNextPage().

Gestión de errores

Cuando la API devuelve un status code que no indica éxito, el SDK devuelve un error de tipo *dodopayments.Error. Contiene StatusCode, *http.Request e *http.Response, además del JSON del cuerpo del error. Usa errors.As para inspeccionarlo y usa StatusCode para gestionar casos específicos:
Los demás errores se devuelven sin envoltorio. Por ejemplo, si falla el transporte HTTP, podrías recibir un *url.Error que envuelve un *net.OpError. apiErr.DumpRequest(true) devuelve la solicitud serializada.

Middleware

Añade middleware con option.WithMiddleware. Un middleware recibe cada solicitud y una función next que la envía:
Varios middleware en una llamada a option.WithMiddleware se ejecutan de izquierda a derecha. El middleware que se pasa a NewClient se ejecuta antes que el middleware que se pasa a una sola solicitud.

Concurrencia

El cliente es seguro para su uso concurrente, por lo que puedes compartir un cliente entre goroutines:

Recursos

GitHub Repository

Código fuente, versiones y lista completa de métodos.

API Reference

Todos los endpoints, parámetros y respuestas.

Discord Community

Haz preguntas y habla con otros desarrolladores.

Report Issues

Informa de errores o solicita funciones.

Soporte

Para obtener ayuda con el Go SDK:

Contribuciones

Para contribuir, lee las directrices de contribución.
Última modificación el 26 de septiembre de 2026