DodoPayments, y un cliente asíncrono, AsyncDodoPayments, ambos basados en httpx. Los parámetros de solicitud anidados son diccionarios tipados y las respuestas son modelos de Pydantic.
Instalación
Instala el SDK con pip:aiohttp:
client.webhooks.unwrap(), instala también el extra webhooks: pip install "dodopayments[webhooks]".
El SDK requiere Python 3.9 o posterior. Usa la versión estable más reciente de Python para recibir actualizaciones de seguridad.
Inicio rápido
Cliente síncrono
Crea un cliente y, después, crea una sesión de checkout:bearer_token, el cliente lee la variable de entorno DODO_PAYMENTS_API_KEY. Si omites environment, el cliente se conecta al modo live. Una clave de API del modo de prueba solo funciona con environment="test_mode".
Cliente asíncrono
AsyncDodoPayments tiene los mismos métodos que DodoPayments. Usa await en cada llamada:
Funciones principales
Pythonic Interface
Argumentos de palabra clave para los parámetros, tipos
TypedDict para objetos anidados y modelos de Pydantic para las respuestas.Async/Await
AsyncDodoPayments para asyncio, con aiohttp como backend HTTP opcional.Type Hints
Sugerencias de tipo en todos los métodos, para el autocompletado del editor y la comprobación de tipos con mypy.
Auto-Pagination
Los métodos de listado devuelven iteradores que obtienen la página siguiente mientras recorres los resultados.
Configuración
Variables de entorno
Guarda tu clave de API en una variable de entorno:.env
Si se establece
DODO_PAYMENTS_BASE_URL y también pasas environment, el constructor genera un error de “URL ambigua”. Para usar environment en ese caso, pasa base_url=None.
Para verificar un webhook, pasa el cuerpo sin procesar de la solicitud y los encabezados a client.webhooks.unwrap(payload, headers=headers). Comprueba la firma con tu clave de webhook y devuelve el evento analizado. client.webhooks.unsafe_unwrap(payload) analiza el cuerpo sin verificarlo, así que úsalo solo para pruebas. Consulta Webhooks.
Tiempos de espera
Las solicitudes agotan el tiempo de espera después de 1 minuto de forma predeterminada, con un tiempo de espera de conexión de 5 segundos. Pasatimeout en segundos o un httpx.Timeout para establecer límites independientes de lectura, escritura y conexión:
APITimeoutError. Las solicitudes cuyo tiempo de espera se agotó se reintentan, por lo que una llamada puede tardar más que timeout antes de fallar.
Reintentos
Establecemax_retries en el cliente o en una sola solicitud con with_options():
dodopayments.APIError:
Las excepciones de estado heredan de
dodopayments.APIStatusError, que tiene los atributos status_code y response. APITimeoutError es una subclase de APIConnectionError.
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 lacheckout_url devuelta:
checkout_url funciona una vez y caduca después de 24 horas. Para consultar todas las opciones de la sesión, visita Sesiones de Checkout.
Gestionar clientes
Crea un cliente con una dirección de correo electrónico y un nombre y, después, recupéralo por ID:Gestionar suscripciones
Crea una suscripción, cobra una suscripción on-demand y consulta el historial de uso de una suscripción.billing solo requiere country, un código de país ISO de dos letras. customer acepta {"customer_id": ...} para asociar un cliente existente o {"email": ..., "name": ...} para crear uno. charge es para suscripciones on-demand, e product_price está expresado en la unidad monetaria más pequeña. retrieve_usage_history devuelve una lista paginada que puedes recorrer como se muestra en Paginación.Facturación basada en el uso
Ingerir eventos de uso
Envía eventos de uso para un cliente:event_id es la clave de idempotencia, así que asigna un valor único a cada evento. Si el mismo event_id aparece dos veces en una solicitud, se rechaza toda la solicitud. Si un event_id ya se había ingerido, el evento nuevo se ignora. Una solicitud acepta hasta 1.000 eventos. timestamp utiliza 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 y recuperar eventos
Recupera un evento individual por suevent_id o enumera los eventos filtrados por cliente y nombre del evento:
usage_events.list también acepta los filtros meter_id, start y end.
Paginación
Paginación automática
Los métodos de listado devuelven un iterador que obtiene la página siguiente mientras recorres los resultados:Paginación asíncrona
Con el cliente async, recorre los resultados conasync for:
Paginación manual
Para trabajar con una página a la vez, leeitems y llama a has_next_page() y get_next_page(). next_page_info() devuelve los parámetros para la siguiente solicitud:
Configuración del cliente HTTP
Para añadir un proxy, un transporte personalizado u otra configuración dehttpx, pasa tu propio http_client. DefaultHttpxClient conserva los límites de conexión, el tiempo de espera y la configuración de redirecciones predeterminados del SDK:
client.with_options(http_client=...).
Async con AIOHTTP
De forma predeterminada, el cliente async envía solicitudes conhttpx. Para obtener una mejor concurrencia, instala el extra aiohttp y pasa DefaultAioHttpClient() como http_client:
Registro
El SDK registra eventos mediante el módulologging de la biblioteca estándar. Para activar el registro, establece DODO_PAYMENTS_LOG en info:
debug:
Integración con frameworks
Estos ejemplos crean una sesión de checkout desde un endpoint web y devuelven su URL.FastAPI
Este endpoint usa el cliente async:Django
Esta vista usa el cliente sync:Recursos
GitHub Repository
Código fuente, versiones y lista completa de métodos.
API Reference
Cada endpoint, parámetro y respuesta.
Discord Community
Haz preguntas y conversa con otros desarrolladores.
Report Issues
Informa de errores o solicita funciones.
Soporte
Para obtener ayuda con el SDK de Python:- 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.