Acepta UPI y todas las tarjetas emitidas en India con mandatos de suscripción compatibles con el RBI. Comprende el retraso de procesamiento de 48 horas, los límites de mandato y el manejo de webhooks.
India tiene una infraestructura de pago única dominada por UPI (más del 60% de las transacciones digitales) y tarjetas emitidas en India (Visa, Mastercard, Rupay, etc.). Dodo Payments admite todos estos métodos con total cumplimiento del RBI para mandatos de suscripción.
UPI procesa 10B+ transacciones/mes. Muchos clientes indios no tienen tarjetas internacionales.
Low Transaction Costs
UPI tiene tarifas de transacción prácticamente nulas. Excelente para transacciones de alto volumen y bajo valor.
Subscription Support
A diferencia de la mayoría de los métodos de pago alternativos, UPI y todas las tarjetas emitidas en India (Visa, Mastercard, Rupay, etc.) admiten pagos recurrentes a través de mandatos del RBI.
*Las suscripciones requieren mandatos compatibles con el RBI con reglas de procesamiento especiales. El retraso de procesamiento de 48 horas se aplica a todas las tarjetas emitidas en India y UPI.
La cantidad registrada con el banco del cliente es max(mandate_floor, billing_amount). Así que el piso es efectivamente el techo de autorización para el cliente siempre que la facturación sea menor que el piso.Importante para cambios de plan: Si una actualización resulta en un cargo que excede el límite del mandato existente, el cargo fallará y el cliente debe reautorizar.
El piso de mandato para e-mandatos en INR es configurable a través del campo mandate_min_amount_inr_paise (en INR paise — 1 INR = 100 paise). Puedes sobreescribir el valor por defecto del sistema de ₹15,000 en tres niveles:
Nivel
Dónde configurar
Alcance
Por solicitud
mandate_min_amount_inr_paise en una sesión de pago, pago o suscripción
Una transacción
Comerciante
Configuración de negocio
Todas tus suscripciones en INR
Sistema
—
₹15,000 por defecto
Prioridad de resolución: sobreescritura por solicitud → configuración del comerciante → valor por defecto del sistema.
Suscripciones de tarjetas indias en INR en conectores no-Airwallex
Establecer un piso más alto te permite admitir cargos únicos más grandes más adelante (por ejemplo, actualizaciones de plan o excesos basados en el uso) sin obligar a los clientes a reautorizar. Establecer un piso más bajo acerca la autorización del cliente al monto real de facturación, pero limita el margen para futuros cargos variables.
Esta configuración solo afecta a los e-mandatos registrados para tarjetas emitidas en India (Visa, Mastercard, RuPay) en suscripciones en INR. Las suscripciones UPI siguen su propio flujo AutoPay y no se ven afectadas.
Esta es la diferencia más importante respecto a los pagos con tarjetas internacionales:
1
Charge Initiated (Day 0)
En la fecha de renovación programada, Dodo inicia el cargo con el banco.
2
Pre-Debit Notification
El cliente recibe notificación de su banco sobre el próximo débito.
3
48-Hour Window
El cliente puede cancelar el mandato durante este período vía su aplicación bancaria.
4
Debit Completed (~48-51 hours)
Después de 48 horas (más hasta 3 horas adicionales por procesamiento bancario), los fondos son debitados.
5
Webhook Sent
payment.succeeded webhook se envía después del débito real, no en la iniciación.
No otorgues beneficios en la iniciación del cargo. Espera al webhook payment.succeeded, que llega aproximadamente de 48 a 51 horas después de la fecha de cargo programada.
// DON'T do this:async function handleSubscriptionRenewal(subscription) { // ❌ Bad: Granting access immediately when charge is initiated grantPremiumAccess(subscription.customer_id);}// DO this:async function handlePaymentWebhook(event) { if (event.type === 'payment.succeeded') { // ✅ Good: Only grant access after payment is confirmed grantPremiumAccess(event.data.customer_id); } if (event.type === 'payment.failed') { // Handle failed payment (mandate cancelled, insufficient funds) revokePremiumAccess(event.data.customer_id); }}
Construye tu aplicación para manejar la brecha entre la iniciación del cargo y el pago real. Considera:
Períodos de gracia para el acceso a suscripciones
Comunicación clara a los clientes sobre el tiempo de procesamiento
Cumplimiento basado en webhooks, no en fechas
Handle mandate cancellations
Los clientes pueden cancelar mandatos a través de sus aplicaciones bancarias en cualquier momento. Monitorea los webhooks subscription.on_hold y pide a los clientes que se resuscriban o actualicen los métodos de pago.
Set appropriate mandate amounts
Para tarifas variables (por ejemplo, basadas en uso), considera si un mandato a demanda de Rs 15,000 es suficiente. Si los cargos pueden exceder esto, los clientes necesitarán reautorizar.
Offer UPI prominently
Para clientes indios, UPI debería ser la opción de pago principal. Muchos usuarios lo prefieren sobre las tarjetas debido a su familiaridad y menor fricción.
Si no es comerciante indio: ¿Moneda Adaptativa habilitada?
¿upi_collect incluido en allowed_payment_method_types?
Solución: Verifica que la dirección de facturación tenga country: "IN" e billing_currency: "INR".
Subscription charge failed after upgrade
Causa: El nuevo monto del cargo excede el límite del mandato existente (umbral de Rs 15,000).Solución: El cliente debe actualizar el método de pago para establecer un nuevo mandato con el límite correcto.
Subscription on hold but customer claims they didn't cancel
Causa: El cliente pudo haber cancelado el mandato durante el período de 48 horas, o su banco rechazó el débito.Solución: El cliente necesita reautorizar el mandato o actualizar su método de pago.
Payment deduction delayed beyond 48 hours
Causa: Los retrasos en la API del banco pueden extender el procesamiento en 2-3 horas adicionales.Solución: Esto es esperado. Construye tu sistema para manejar retrasos variables de hasta ~51 horas en total.
Mandate cancelled but subscription still active
Causa: Caso límite en las regulaciones del RBI — la cancelación del mandato durante la ventana de procesamiento no cancela inmediatamente la suscripción.Solución: El próximo cargo fallará y la suscripción pasará a on_hold. Monitorea los webhooks para payment.failed.