Comment mettre à jour une intégration afin de prendre en charge les mandats électroniques RBI.
La Reserve Bank of India (RBI) a émis une directive (modifiée ultérieurement en décembre 2020 et en mars 2021) qui prévoit des mesures de sécurité supplémentaires pour les paiements récurrents effectués avec des cartes émises en Inde, parmi lesquelles :
Les banques doivent suivre un processus unique pour enregistrer les titulaires de cartes et créer un mandat électronique, à l’aide d’une authentification par facteur supplémentaire telle que 3D Secure (3DS).
Les banques doivent alerter les titulaires de carte au moins 24 heures avant les paiements en leur permettant de refuser les transactions.
Les transactions récurrentes de plus de 15 000 INR (ou équivalent dans une autre devise) nécessitent systématiquement l’authentification par facteur supplémentaire.
Si vous êtes un utilisateur Stripe basé en Inde ou un utilisateur Stripe international (non IN), votre activité est concernée si certains de vos clients utilisent des cartes indiennes pour :
Paiements hors session
Objets Subscription ou Invoice dont le paramètre collection_method est défini sur charge_automatically
Fonctionnement des paiements avec un mandat électronique
Stripe s’est associé à une plateforme partenaire pour prendre en charge l’enregistrement des mandats électroniques et l’envoi de notifications préalables de prélèvement aux clients.
Note
À l’heure actuelle, les mandats électroniques ne sont pas disponibles pour les utilisateurs Stripe au Mexique et au Japon.
En fonction de la manière dont vous avez intégré Stripe, Stripe est susceptible de vous demander des informations supplémentaires pour établir un mandat. Le client doit compléter l’authentification par facteur supplémentaire (3DS) pour enregistrer le mandat.
Les paiements ultérieurs hors session ou les prélèvements automatiques pour un abonnement subissent un changement important. Les clients doivent recevoir une notification préalable de prélèvement indiquant le montant exact au moins 24 heures avant le prélèvement réel. Cette notification contient des informations relatives au paiement et une option pour annuler le mandat. Si le montant du paiement est supérieur à 15 000 INR ou au montant maximal, la notification préalable de prélèvement contient un lien permettant de procéder à l’authentification par facteur supplémentaire (3DS) pour autoriser le paiement.
Étant donné l’intégration de Stripe avec une plateforme partenaire, nous attendons 26 heures à partir de la réception d’une demande de paiement avant de débiter le client (nous ajoutons un délai pour d’éventuels problèmes en aval, d’où la nécessité d’une notification préalable de 26 heures). Cela signifie que Stripe retarde de 26 heures l’encaissement des paiements.
Si vous ne présentez pas de mandat pour un paiement hors session, il est probable que l’émetteur de la carte refuse le paiement.
Intégration
Si vous utilisez des PaymentIntents ou des SetupIntents pour créer des paiements hors session avec des cartes émises en Inde, vous devez mettre à jour votre intégration.
Créer un mandat
Pour créer un mandat, renseignez les paramètres suivants sur les objets PaymentIntent ou SetupIntent (en plus des paramètres existants).
Soit fixed, soit maximum. S’il est défini sur fixed, le paramètre amount fait référence au montant exact qui sera facturé lors des paiements ultérieurs. S’il est défini sur maximum, le client peut être débité d’une somme supérieure au montant maximal. Les paiements d’un montant supérieur à la valeur maximale ou à 15 000 INR (selon le montant le moins élevé des deux) sont soumis à l’authentification par facteur supplémentaire (3DS).
Ce paramètre ne concerne que les SetupIntents. Il définit la devise pour les paiements ultérieurs. Stripe prend en charge les mandats en INR pour toutes les entreprises. Les devises suivantes ne sont prises en charge que pour les entreprises internationales (non IN) : USD, EUR, GBP, SGD, CAD, CHF, SEK, AED, JPY, NOK, MYR, HKD.
La date de début du mandat ou de l’abonnement, spécifiée sous forme d’un horodatage epoch. Elle doit être définie sur la date du jour ou toute date ultérieure.
La date de fin du mandat ou de l’abonnement, spécifiée sous forme d’un horodatage epoch antérieur à l’année 2051. Si elle n’est pas fournie, le mandat reste actif jusqu’à son annulation.
La fréquence des paiements. Par exemple, interval=month et interval_count=3 indiquent un paiement tous les trois mois. La fréquence maximale autorisée est d’un an (1 an, 12 mois ou 52 semaines). Ce paramètre est facultatif uniquement lorsque interval=sporadic.
Un tableau indiquant les types de mandats pris en charge pour ce paiement. [‘india’] est la seule valeur possible.
Note
Vous pouvez transmettre le paramètre payment_method_options[card][mandate_options] dans toutes vos requêtes. Stripe ignore ces paramètres si la carte utilisée par votre client n’a pas été émise en Inde, étant donné que la réglementation ne s’applique pas à ces cartes.
Si le montant facturé varie, spécifiez le paramètre amount_type=maximum pour le mandat. Vous ne pouvez pas facturer au client un montant supérieur à la limite définie dans un mandat de type amount_type=fixed. Toutefois, le paramètre amount_type=maximum vous permet de facturer une somme supérieure au montant maximal. Seule particularité à prendre en compte : les transactions supérieures au montant maximal ou à 15 000 INR (selon le montant le moins élevé des deux) nécessitent de procéder à une authentification par facteur supplémentaire (3DS).
Exemples :
Si amount_type=maximum et amount=100000 sont présents, le client devra s’authentifier pour les montants supérieurs à 1 000 INR.
Si amount=2000000 est présent, le client devra s’authentifier pour les montants supérieurs à 15 000 INR.
Une fois le PaymentIntent confirmé avec un moyen de paiement, il passe à l’état requires_action. Le titulaire de la carte doit alors effectuer l’authentification par facteur supplémentaire (3DS) avant que le PaymentIntent ne passe à l’état succeeded et qu’un mandat ne soit créé. Les mandats électroniques nécessitent une authentification complète. Les résultats tels que attempt_acknowledged ou les erreurs de traitement sont considérés comme des échecs.
Stripe ne renvoie pas d’ID de mandat si au moins l’une des conditions suivantes est remplie :
La carte n’a pas été émise en Inde.
La devise du mandat n’est pas prise en charge par l’émetteur ou par le pays du compte Stripe.
La carte émise en Inde n’est ni une carte Visa ni une carte Mastercard. Stripe ne prend en charge les mandats que pour ces deux marques de cartes.
Stripe prend en charge les mandats en INR pour toutes les entreprises. Les devises suivantes ne sont prises en charge que pour les entreprises internationales (non IN) :
USD
EUR
GBP
SGD
CAD
CHF
SEK
AED
JPY
NOK
MYR
HKD
L’Inde comptant une centaine de banques émettrices, l’adaptation complète aux nouvelles exigences devrait prendre un certain temps. Il se peut que des émetteurs ne prennent pas encore en charge les mandats électroniques pour des devises spécifiques. Dans ce cas, Stripe ne renvoie pas d’ID de mandat.
{"id":"ch_xxxxxxxxxxxxxxxxxxxxxxxx","object":"charge","payment_intent":"pi_xxxxxxxxxxxxxxxxxxxxxxxx","payment_method":"pm_xxxxxxxxxxxxxxxxxxxxxxxx","payment_method_details":{"card":{"brand":"visa","country":"IN","mandate":"mandate_xxxxxxxxxxxxxxxxxxxxxxxx",// id of the mandate created
...
},
...
"status":"succeeded",
...
}
Webhooks relatifs aux mandats
Écoutez l’événement mandate.updated pour vous assurer que le mandat est à l’état active avant de débiter le moyen de paiement enregistré hors session.
Même si le PaymentIntent ou le SetupIntent est passé à l’état réussi (status=succeeded), cela ne signifie pas forcément que le mandat est passé à l’état active. Stripe crée l’objet Mandate à l’état pending. Lorsque le mandat passe à l’état active, nous envoyons un événement mandate.updated. Dans de rares cas, un mandat peut prendre jusqu’à 30 minutes pour passer à l’état active en mode production. Si après 30 minutes, le mandat n’est toujours pas actif, partez du principe qu’il est inutilisable.
{"object":{"id":"mandate_xxxxxxxxxxxxxxxxxxxxxxxx","object":"mandate","customer_acceptance":{"accepted_at":1677301688,"online":{"ip_address":"xx.xxx.xx.xxx","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"},"type":"online"},"livemode":false,"multi_use":{},"payment_method":"pm_xxxxxxxxxxxxxxxxxxxxxxxx","payment_method_details":{"card":{},"type":"card"},"status":"active","type":"multi_use"},"previous_attributes":{"status":"pending"}}
S’il n’est pas possible de créer un mandat, vous pouvez inviter votre client à utiliser une autre carte ou lui proposer une solution alternative, telle qu’un paiement en session sur votre site ou un lien vers une page de facturation hébergée.
Débiter ultérieurement le moyen de paiement enregistré
Au moment de facturer votre client hors session, utilisez l’objet Customer, l’ID du PaymentMethod et l’ID du mandat correspondant pour créer un PaymentIntent.
Une fois que le PaymentIntent hors session est confirmé, la banque émettrice envoie au client la notification préalable de prélèvement. Le PaymentIntent passe à l’état processing pendant toute la durée de la notification préalable de prélèvement (c’est-à-dire 26 heures) et il ne peut pas être annulé.
L’attribut processing.card.customer_notification.completes_at spécifie l’heure à laquelle Stripe tente de débiter la carte. Si le traitement du paiement nécessite l’approbation du client, celui-ci doit authentifier le paiement avant l’heure spécifiée.
Codes d’erreur et de refus
Nous renvoyons des codes d’erreur dans les situations suivantes :
Code d’erreur
Description
payment_intent_mandate_invalid
Toute tentative de paiement récurrent à l’aide d’un mandat inactif renvoie ce code. Pour éviter cela, vous pouvez vérifier l’état du mandat avant d’effectuer une tentative de prélèvement.
india_recurring_payment_mandate_canceled
Toute tentative de paiement récurrent à l’aide d’un mandat annulé renvoie ce code. Cela peut se produire lorsque nous ignorions qu’un mandat avait été annulé.
processing_error
La détection d’une erreur de traitement (généralement temporaire) renvoie ce code.
En ce qui concerne les mandats électroniques, certains codes de refus peuvent avoir une signification plus précise que dans les cas d’usage courants :
Code de refus de paiement
Description
transaction_not_approved
Toute tentative de paiement ultérieure, alors que le client a suspendu les autorisations de prélèvement automatique ou qu’il n’authentifie pas le paiement lorsqu’il y est invité, renvoie ce code.
Tests
Vous pouvez utiliser ces numéros de carte de test pour simuler différents scénarios.
En mode test, un PaymentIntent hors session met environ 15 minutes à quitter l’état processing. Pendant une session, le PaymentIntent d’un paiement initial n’est jamais à l’état processing.
Numéro de carte bancaire de test
Scénario
Simule la configuration et le renouvellement d’un mandat.
Simule la réception d’une notification préalable de prélèvement par un titulaire de carte choisissant d’annuler ou de suspendre la transaction, indépendamment du montant du mandat.
Simule l’échec de l’envoi d’une notification préalable de prélèvement pour un paiement hors session par la banque émettrice au titulaire de la carte, indépendamment du montant du mandat.
Simule l’annulation d’un mandat par un titulaire de carte, indépendamment du montant du mandat.
Limitations
Notez les restrictions suivantes :
Stripe tente de créer automatiquement des mandats pour les abonnements créés après le 1er octobre 2021 uniquement. Pour les abonnements dont la création est antérieure à cette date, annulez et créez un nouvel abonnement pour vous assurer qu’un mandat est créé.
Vous ne pouvez pas créer de mandat en utilisant les API Charges et Sources. Si vous souhaitez créer un mandat, vous devez utiliser les API Payment Intents ou Setup Intents.
Il n’est pas possible de transmettre un mandat existant à un abonnement.
Vous ne pouvez pas annuler ou mettre à jour un mandat.
Welcome to the Stripe Shell!
Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your
Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe
resources in test mode.
- View supported Stripe commands:
- Find webhook events:
- Listen for webhook events:
- Call Stripe APIs: stripe [api resource] [operation] (e.g., )
Le shell Stripe est plus optimisé sur la version bureau.