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: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: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.
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ñadeoption.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. Estableceoption.WithMaxRetries en el cliente o en una sola solicitud:
Operaciones comunes
Los ejemplos de esta sección también usan un context, por ejemploctx := context.Background().
Crear una sesión de checkout
Crea una sesión de checkout y, a continuación, redirige al cliente a laCheckoutURL devuelta:
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 paqueteshared:
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.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:
*url.Error que envuelve un *net.OpError. apiErr.DumpRequest(true) devuelve la solicitud serializada.
Middleware
Añade middleware conoption.WithMiddleware. Un middleware recibe cada solicitud y una función next que la enví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:- Discord: Únete al servidor de la comunidad para recibir ayuda en tiempo real.
- Email: Contacta con support@dodopayments.com.
- GitHub: Abre un issue en el repositorio.