Sequence para iterar resultados y funciones suspend para llamadas asíncronas.
Instalación
Gradle (Kotlin DSL)
Agrega la dependencia a tubuild.gradle.kts:
build.gradle.kts
Maven
Agrega la dependencia a tupom.xml:
pom.xml
El SDK requiere Java 8 o una versión posterior. Se ejecuta en la JVM y en Android, e incluye reglas de conservación para ProGuard y R8.
Inicio Rápido
Crea un cliente y, después, una sesión de checkout:fromEnv() se conecta al modo activo, a menos que DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl indiquen lo contrario. Para usar el modo de prueba, consulta Modo de prueba. Una clave de API del modo de prueba solo funciona en el modo de prueba.
Funciones principales
Coroutines
Los métodos del cliente asíncrono son funciones
suspend que llamas desde una coroutine.Null Safety
Los campos que pueden faltar son tipos anulables, no
Optional.Sequences
En el cliente síncrono,
autoPager() devuelve un Sequence que obtiene más páginas a medida que iteras. En el cliente asíncrono, devuelve un Flow.Immutable Models
Las clases de modelo son inmutables, e
toBuilder() devuelve un builder para una copia modificada.Configuración
Desde variables de entorno
fromEnv() lee tu configuración de las variables de entorno o de las propiedades del sistema. Las propiedades del sistema tienen prioridad:
DODO_PAYMENTS_API_KEY o dodopayments.apiKey. El secreto de firma del webhook proviene de DODO_PAYMENTS_WEBHOOK_KEY o dodopayments.webhookKey, y la URL base de DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl. Crea un cliente y reutilízalo, porque cada cliente tiene su propio grupo de conexiones y sus propios grupos de hilos.
Para verificar un webhook, pasa el cuerpo sin procesar de la solicitud y los encabezados a client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), donde headers es un com.dodopayments.api.core.http.Headers. Comprueba la firma con tu clave de webhook y devuelve el evento analizado, o lanza DodoPaymentsWebhookException. Sin encabezados, unwrap no verifica la firma. client.webhooks().unsafeUnwrap(rawBody) analiza el cuerpo sin verificarlo, así que úsalo únicamente para pruebas. Consulta Webhooks.
Configuración manual
Establece cada opción en el builder:Modo de prueba
Para usar el modo de prueba (https://test.dodopayments.com), llama a testMode() en el builder:
Tiempos de espera y reintentos
De forma predeterminada, el cliente reintenta dos veces y agota el tiempo de espera después de 1 minuto. Reintenta los errores de conexión y las respuestas con estado 408, 409, 429 o 500 y superiores, con retroceso exponencial. Establece los valores predeterminados en el cliente o pasaRequestOptions a una sola llamada:
Operaciones comunes
Los ejemplos de esta sección usan elclient de Inicio rápido.
Crear una sesión de checkout
Crea una sesión de checkout y, después, redirige al cliente a la URL de checkout devuelta:checkoutUrl() devuelve un String? anulable. Cada URL de checkout funciona una sola vez y caduca después de 24 horas. Para consultar todas las opciones de sesión, visita Sesiones de checkout.
Crear un producto
Crea un producto de suscripción mensual con un precio de $29.99:price está expresado en la unidad monetaria más pequeña. discountBps establece el descuento en puntos básicos y reemplaza el campo obsoleto discount.
Activar una clave de licencia
Activa una clave de licencia para un dispositivo o una instalación. Si la clave ha alcanzado su límite de activaciones, la API devuelve422 y el SDK lanza UnprocessableEntityException. Una clave inactiva devuelve 403 (PermissionDeniedException), y una clave desconocida devuelve 404 (NotFoundException):
Gestionar suscripciones
Crea una suscripción y, después, cóbrala si es una suscripción bajo demanda.billing solo requiere country, un código de país ISO de dos letras. Usa AttachExistingCustomer para asociar un cliente existente o NewCustomer para crear uno. charge es para suscripciones bajo demanda, e productPrice está expresado en la unidad monetaria más pequeña.Facturación basada en el uso
Registrar eventos de uso
Envía un evento de uso para un cliente. Los medidores que registran sueventName lo agregan:
eventId es la clave de idempotencia, así que asigna un valor único a cada evento. Una solicitud acepta hasta 1.000 eventos.
Operaciones asíncronas
Cliente asíncrono
El cliente asíncrono tiene los mismos métodos que el cliente síncrono, pero la mayoría son funcionessuspend. Llámalas desde una coroutine:
client.async() en un cliente síncrono para obtener su versión asíncrona.
Gestión de errores
Para un estado de error, el SDK lanza una subclase deDodoPaymentsServiceException que tiene statusCode(), headers() y body(). Las subclases son BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) y UnexpectedStatusCodeException para otros estados, como 409:
DodoPaymentsIoException, y las respuestas que el SDK no puede interpretar lanzan DodoPaymentsInvalidDataException. Todas las excepciones del SDK extienden DodoPaymentsException.
Gestión funcional de errores
UsaResult para la gestión funcional de errores:
Integración con Android
El Kotlin SDK es un server SDK. Se autentica con tu secret API key, y cualquiera que tenga tu APK puede extraer una clave compilada en él, así que nunca lo uses dentro de una aplicación Android. Para aceptar pagos en una aplicación Android:- En tu servidor, crea la sesión de checkout con este SDK (consulta Integración con Ktor) y devuelve su
checkout_url. - En la aplicación, obtén ese
checkout_urldesde tu servidor y ábrelo con el Android SDK, que no contiene ninguna API key.
Validación de respuestas
De forma predeterminada, el SDK lanzaDodoPaymentsInvalidDataException únicamente cuando lees una propiedad con un tipo inesperado. Para comprobar toda la respuesta de antemano, habilita la validación para una solicitud o llama a validate() en una respuesta:
Funciones avanzadas
Configuración del proxy
Para enviar solicitudes a través de un proxy, pasa unjava.net.Proxy al builder:
Configuración temporal
withOptions devuelve un cliente con ajustes modificados que comparte las conexiones y los pools de hilos del cliente original. El cliente original no cambia:
Integración con Ktor
Crea el cliente una vez y llámalo desde una ruta:Recursos
GitHub Repository
Código fuente, versiones y la lista completa de métodos.
API Reference
Cada endpoint, parámetro y respuesta.
Discord Community
Haz preguntas y habla con otros desarrolladores.
Report Issues
Informa de errores o solicita funciones.
Soporte
Para obtener ayuda con el Kotlin SDK:- Discord: Únete al servidor de la comunidad para recibir ayuda en tiempo real.
- Correo electrónico: Contacta con support@dodopayments.com.
- GitHub: Abre un issue en el repositorio.