Use this file to discover all available pages before exploring further.
El SDK de TypeScript proporciona acceso conveniente del lado del servidor a la API REST de Dodo Payments para aplicaciones de TypeScript y JavaScript. Cuenta con definiciones de tipos completas, manejo de errores, reintentos, tiempos de espera y auto-paginación para un procesamiento de pagos sin problemas.
Inicializa el cliente con tu clave API y comienza a procesar pagos:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted environment: 'test_mode', // defaults to 'live_mode'});const checkoutSessionResponse = await client.checkoutSessions.create({ product_cart: [{ product_id: 'product_id', quantity: 1 }],});console.log(checkoutSessionResponse.session_id);
Siempre guarda tus claves API de forma segura utilizando variables de entorno. Nunca las comites en el control de versiones ni las expongas en código del lado del cliente.
Configura el comportamiento de reintentos automáticos:
// Configure default for all requests (default is 2 retries)const client = new DodoPayments({ maxRetries: 0, // disable retries});// Override per-requestawait client.checkoutSessions.create( { product_cart: [{ product_id: 'product_id', quantity: 1 }] }, { maxRetries: 5 },);
El SDK vuelve a intentar automáticamente las solicitudes que fallan debido a errores de red o problemas del servidor (respuestas 5xx) con retroceso exponencial.
// Create a subscriptionconst subscription = await client.subscriptions.create({ billing: { country: 'US', city: 'San Francisco', state: 'CA', street: '1 Market St', zipcode: '94105', }, customer: { customer_id: 'cus_123', // or pass { email, name } to create a new customer }, product_id: 'pdt_456', quantity: 1,});// Charge an on-demand subscription// product_price is in the lowest currency denomination (e.g., 2500 = $25.00 USD)const chargeResponse = await client.subscriptions.charge(subscription.subscription_id, { product_price: 2500,});// Retrieve subscription usage history (for metered subscriptions)const usageHistory = await client.subscriptions.retrieveUsageHistory(subscription.subscription_id, { start_date: '2024-01-01T00:00:00Z', end_date: '2024-03-31T23:59:59Z',});
billing requiere al menos el código de país ISO de dos letras. customer es una unión de { customer_id } (para adjuntar un cliente existente) o { email, name? } (para crear uno nuevo). product_price se expresa en la denominación más baja de la moneda.
Los eventos deben tener valores únicos event_id para idempotencia. Los IDs duplicados dentro de la misma solicitud son rechazados y las solicitudes posteriores con IDs existentes son ignoradas.
// Get a specific eventconst event = await client.usageEvents.retrieve('api_call_12345');// List events with filteringconst events = await client.usageEvents.list({ customer_id: 'cus_abc123', event_name: 'api_request', start: '2024-01-14T10:30:00Z', end: '2024-01-15T10:30:00Z'});
import DodoPayments from 'dodopayments';import * as undici from 'undici';const proxyAgent = new undici.ProxyAgent('http://localhost:8888');const client = new DodoPayments({ fetchOptions: { dispatcher: proxyAgent, },});
Controla la verbosidad del registro utilizando variables de entorno u opciones del cliente:
// Via client optionconst client = new DodoPayments({ logLevel: 'debug', // Show all log messages});
# Via environment variableexport DODO_PAYMENTS_LOG=debug
Niveles de registro disponibles:
'debug' - Mostrar mensajes de depuración, información, advertencias y errores
'info' - Mostrar mensajes de información, advertencias y errores
'warn' - Mostrar advertencias y errores (predeterminado)
'error' - Mostrar solo errores
'off' - Deshabilitar todo el registro
Al nivel de depuración, se registran todas las solicitudes y respuestas HTTP, incluidas las cabeceras y los cuerpos. Algunas cabeceras de autenticación están redactadas, pero los datos sensibles en los cuerpos pueden seguir siendo visibles.
Los métodos de lista en la API de DodoPayments son paginados. Puedes usar la sintaxis for await … of para iterar a través de elementos en todas las páginas:
async function fetchAllPayments() { const allPayments = []; // Automatically fetches more pages as needed. for await (const paymentListResponse of client.payments.list()) { allPayments.push(paymentListResponse); } return allPayments;}
Alternativamente, puedes solicitar una sola página a la vez:
let page = await client.payments.list();for (const paymentListResponse of page.items) { console.log(paymentListResponse);}// Convenience methods are provided for manually paginating:while (page.hasNextPage()) { page = await page.getNextPage(); // ...}