Acceptez UPI et toutes les cartes émises en Inde avec des mandats d’abonnement conformes aux exigences de la RBI. Comprenez le délai de traitement de 48 heures, les limites des mandats et la gestion des webhooks.
L’Inde dispose d’une infrastructure de paiement unique, dominée par UPI (plus de 60 % des transactions numériques) et les cartes émises en Inde (Visa, Mastercard, Rupay, etc.). Dodo Payments prend en charge toutes ces méthodes dans le respect total des exigences de la RBI pour les mandats d’abonnement.
Pourquoi les méthodes de paiement en Inde sont importantes
UPI Dominance
UPI traite plus de 10 milliards de transactions par mois. De nombreux clients indiens ne disposent pas de cartes internationales.
Low Transaction Costs
UPI entraîne des frais de transaction quasi nuls. Cette méthode est idéale pour les transactions à volume élevé et à faible valeur.
Subscription Support
Contrairement à la plupart des méthodes de paiement alternatives, UPI et toutes les cartes émises en Inde (Visa, Mastercard, Rupay, etc.) prennent en charge les paiements récurrents via des mandats de la RBI.
*Les abonnements nécessitent des mandats conformes aux exigences de la RBI et soumis à des règles de traitement particulières. Le délai de traitement de 48 heures s’applique à toutes les cartes émises en Inde et à UPI.
Les abonnements utilisant des méthodes de paiement indiennes sont régis par les réglementations de la RBI (Reserve Bank of India), qui imposent des exigences particulières.
Le montant enregistré auprès de la banque du client est max(mandate_floor, billing_amount). Le seuil constitue donc effectivement le plafond d’autorisation visible par le client lorsque la facturation est inférieure à ce seuil.Important pour les changements de forfait : si une mise à niveau entraîne des frais supérieurs à la limite du mandat existant, le débit échouera et le client devra s’authentifier à nouveau.
Le seuil de mandat pour les e-mandats en INR peut être configuré via le champ mandate_min_amount_inr_paise (en paise INR — 1 INR = 100 paise). Vous pouvez remplacer la valeur par défaut du système, ₹15 000, à trois niveaux :
Niveau
Où le définir
Portée
Par requête
mandate_min_amount_inr_paise sur une session de checkout, un paiement ou un abonnement
Une transaction
Marchand
Paramètres de l’entreprise
Tous vos abonnements en INR
Système
—
Valeur par défaut de ₹15 000
Ordre de priorité : remplacement par requête → paramètre du marchand → valeur par défaut du système.
Abonnements en INR par carte indienne sur des connecteurs autres qu’Airwallex
La définition d’un seuil plus élevé vous permet de prendre en charge ultérieurement des débits ponctuels plus importants (par exemple, les mises à niveau de forfait ou les dépassements facturés à l’usage) sans obliger les clients à s’authentifier à nouveau. Un seuil plus faible rapproche l’autorisation du client du montant réellement facturé, mais limite la marge disponible pour de futurs débits variables.
Ce paramètre affecte uniquement les e-mandats enregistrés pour les cartes émises en Inde (Visa, Mastercard, RuPay) associés à des abonnements en INR. Les abonnements UPI suivent leur propre flux AutoPay et ne sont pas concernés.
Il s’agit de la différence la plus importante par rapport aux paiements internationaux par carte :
1
Charge Initiated (Day 0)
À la date de renouvellement prévue, Dodo initie le débit auprès de la banque.
2
Pre-Debit Notification
Le client reçoit une notification de sa banque concernant le débit à venir.
3
48-Hour Window
Le client peut annuler le mandat pendant cette période via son application bancaire.
4
Debit Completed (~48-51 hours)
Après 48 heures (plus 3 heures supplémentaires au maximum pour le traitement bancaire), les fonds sont débités.
5
Webhook Sent
Le webhook payment.succeeded est envoyé après le débit effectif, et non lors de son initialisation.
N’accordez pas les avantages au moment de l’initialisation du débit. Attendez le webhook payment.succeeded, qui arrive environ 48 à 51 heures après la date de débit prévue.
// 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); }}
Concevez votre application pour gérer l’écart entre l’initialisation du débit et le paiement effectif. Envisagez les éléments suivants :
Des périodes de grâce pour l’accès à l’abonnement
Une communication claire aux clients concernant le délai de traitement
Une gestion de l’accès pilotée par les webhooks, et non par les dates
Handle mandate cancellations
Les clients peuvent annuler leurs mandats à tout moment via l’application de leur banque. Surveillez les webhooks subscription.on_hold et invitez les clients à se réabonner ou à mettre à jour leurs méthodes de paiement.
Set appropriate mandate amounts
Pour une tarification variable (par exemple, basée sur l’usage), vérifiez si un mandat à la demande de 15 000 Rs est suffisant. Si les débits peuvent dépasser ce montant, les clients devront s’authentifier à nouveau.
Offer UPI prominently
Pour les clients indiens, UPI devrait être l’option de paiement principale. De nombreux utilisateurs la préfèrent aux cartes en raison de sa familiarité et de sa simplicité.
Pour un marchand non indien : Adaptive Currency est-il activé ?
upi_collect est-il inclus dans allowed_payment_method_types ?
Solution : vérifiez que l’adresse de facturation contient country: "IN" et billing_currency: "INR".
Subscription charge failed after upgrade
Cause : le montant du nouveau débit dépasse la limite du mandat existant (seuil de 15 000 Rs).Solution : le client doit mettre à jour sa méthode de paiement afin d’établir un nouveau mandat avec la limite appropriée.
Subscription on hold but customer claims they didn't cancel
Cause : le client a peut-être annulé le mandat pendant la fenêtre de 48 heures, ou sa banque a refusé le débit.Solution : le client doit à nouveau autoriser le mandat ou mettre à jour sa méthode de paiement.
Payment deduction delayed beyond 48 hours
Cause : les délais de l’API bancaire peuvent prolonger le traitement de 2 à 3 heures supplémentaires.Solution : ce comportement est attendu. Concevez votre système pour gérer des délais variables pouvant atteindre environ 51 heures au total.
Mandate cancelled but subscription still active
Cause : cas particulier des réglementations de la RBI : l’annulation d’un mandat pendant la fenêtre de traitement n’annule pas immédiatement l’abonnement.Solution : le prochain débit échouera et l’abonnement passera à on_hold. Surveillez les webhooks pour détecter payment.failed.