# Paiements récurrents en Inde 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](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=11668) (modifiée ultérieurement en [décembre 2020](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=12002) et en [mars 2021](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=12051&Mode=0)) 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* (An e-mandate is a form of authorization provided by cardholders to issuing banks that grants permission for recurring payments on their card. Any recurring payment arrangements (for example, monthly subscriptions to OTT services) need an associated e-mandate to be successful. The e-mandate needs to be registered and then validated through AFA, such as 3DS), à l’aide d’une authentification par facteur supplémentaire telle que *3D Secure (3DS)* (3D Secure (3DS) provides an additional layer of authentication for credit card transactions that protects businesses from liability for fraudulent card payments). - 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* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) - 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. > Nous ne proposons pas actuellement l’utilisation de mandats électroniques aux utilisateurs de Stripe au Mexique. 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 n’avez pas de mandat dans le cadre d’un paiement hors session, le paiement sera refusé. ## Intégration Les réglementations de la RBI concernent les abonnements qui utilisent `collection_method=charge_automatically` pour débiter des cartes émises en Inde. > Stripe ne prend pas en charge les mandats électroniques pour les paiements récurrents en Inde avec `PaymentIntents` ou `SetupIntents`. Pour gérer les mandats de paiement récurrents, utilisez Subscriptions, comme décrit ci-dessous. ### Création d’abonnements #### Code personnalisé Lorsque vous créez un nouvel abonnement via l’API, - Si vous avez défini un moyen de paiement par défaut, l’abonnement utilise le dernier SetupIntent du moyen de paiement et tente de trouver le mandat correspondant. - Si aucun mandat n’est en place, Stripe tente automatiquement d’en créer un même si vous ne fournissez pas les paramètres appropriés dans [mandate_options](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_settings-payment_method_options-card-mandate_options). Le client doit ensuite authentifier le paiement. #### Une page hébergée par Stripe Si vous utilisez Stripe [Checkout](https://docs.stripe.com/payments/checkout.md) avec `mode=subscription` ou [Payment Links](https://docs.stripe.com/payment-links.md) pour autoriser les clients à souscrire un abonnement, Stripe crée automatiquement un mandat en récupérant les paramètres pertinents de l’abonnement. Vous ne pouvez pas personnaliser les paramètres du mandat. Pour apprendre à créer un nouvel abonnement, consultez la page [Créer une intégration pour les abonnements](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md). ### Recouvrement de revenus d’abonnements Stripe propose plusieurs fonctionnalités de récupération automatique pour vous aider à encaisser des paiements qui auraient échoué. Si vous souhaitez gérer ces échecs de paiement vous-même, consultez [Créer votre propre gestion des échecs de paiements récurrents](https://docs.stripe.com/india-recurring-payments.md#failed-payments). Sinon, voici quelques recommandations. > Les paiements effectués avec des cartes émises en Inde font l’objet d’une seule tentative. Ceci est indépendant de vos paramètres de relance de paiement. Si le paiement par carte émise en Inde échoue, l’état de votre abonnement et celui de votre facture seront tout de même mis à jour en fonction de ce que vous avez configuré dans vos [paramètres d’abonnement et d’e-mail](https://dashboard.stripe.com/settings/billing/automatic) pour « En cas d’échec de toutes les tentatives de paiement ». #### E-mails 3D Secure Si aucun mandat n’est associé au moyen de paiement par défaut lors du renouvellement ou de la mise à jour d’un abonnement, Stripe tente d’en créer un. Pour enregistrer le mandat, le client doit compléter l’authentification par facteur supplémentaire (3DS). Activez l’option « Envoyer un lien hébergé par Stripe quand une confirmation du paiement par le client est nécessaire » dans les [paramètres d’abonnement et d’e-mail](https://dashboard.stripe.com/settings/billing/automatic) pour inviter vos clients à rouvrir une session et compléter l’authentification, le cas échéant. > Stripe ne tente pas de créer un nouveau mandat si le mandat actuel de l’abonnement est à l’état `inactive`. #### Gérer les échecs de paiement Nous vous recommandons d’activer l’envoi de notifications à vos clients si le paiement de leur abonnement échoue et que leur abonnement est suspendu. Stripe peut envoyer des e-mails aux clients pour leur demander de mettre à jour les moyens de paiement par carte ayant échoué, si vous activez cette option dans les [paramètres d’abonnement et d’e-mail](https://dashboard.stripe.com/settings/billing/automatic). ### Création du mandat Si vous utilisez Stripe pour créer automatiquement le mandat, les informations relatives au mandat sont renvoyées dans le PaymentIntent sous-jacent de la facture et dans l’objet Charge correspondant, ou dans le SetupIntent si vous créez l’abonnement avec une période d’essai. 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) : - AUD - 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. Si votre client souscrit un abonnement avec [Adaptive Pricing](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing.md), et que les mandats prennent en charge la devise sélectionnée, Stripe crée automatiquement un e-mandat dans cette devise. ### État du mandat et résolution des problèmes Si Stripe ne parvient pas à créer un mandat, vous pouvez inviter votre client à utiliser une autre carte ou lui proposer une solution alternative, par exemple en attribuant la valeur `send_invoice` au paramètre [collection_method](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-collection_method) de l’objet Subscription. De plus, un mandat précédemment actif peut devenir inactif, par exemple si le client l’annule. Dans ce cas, le mandat passe à l’état `inactive` et Stripe envoie un événement `mandate.updated`. Pour en savoir plus sur la réception de webhooks, consultez la section [Procédure à suivre pour recevoir des webhooks](https://docs.stripe.com/webhooks.md#webhooks-summary). ### Mises à jour d’abonnements La notification préalable de prélèvement envoyée par la banque au titulaire de la carte indique, au minimum, les renseignements suivants : nom de l’entreprise, montant de la transaction, date ou heure du débit, numéro de référence du mandat et motif du débit. Veillez à ce que les informations de votre mandat correspondent au montant réellement facturé au client, afin d’éviter toute confusion ou tout refus. Si vous utilisez Stripe pour créer automatiquement des mandats pour vos abonnements et que vous souhaitez mettre à jour un abonnement, nous vous recommandons d’inviter votre client à rouvrir une session pour annuler l’abonnement d’origine. Cela permet de créer un nouvel abonnement dans les scénarios suivants et de créer un mandat qui reflète fidèlement les informations de l’abonnement : - Modification de la période de facturation d’un abonnement - Mise à jour d’un abonnement pour lequel le client souhaite éviter d’avoir à autoriser le paiement à chaque renouvellement. Pour information, le mandat créé par Stripe est défini sur `amount_type=maximum` par défaut. Pour facturer au client une somme supérieure au montant maximal, il est nécessaire de spécifier `amount_type=maximum`. Le client sera cependant invité à autoriser le paiement pour les montants supérieurs à la valeur `mandate_options[amount]` ou à 15 000 INR (selon le montant le moins élevé des deux). 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. ### Notification préalable de prélèvement Une fois que le PaymentIntent hors session est [confirmé](https://docs.stripe.com/api/payment_intents/confirm.md), 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é. ```json { "object": "payment_intent", ... "processing": { "card": { "customer_notification": { "approval_requested": true, "completes_at": 1677307005 } }, "type": "card" }, ... "status": "processing", ... } ``` Si [processing.card.customer_notification.approval_requested](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-processing-card-customer_notification-approval_requested) est défini sur `true`, le client doit authentifier le paiement à l’aide de la notification préalable de prélèvement envoyée par la banque émettrice. L’attribut [processing.card.customer_notification.completes_at](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-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](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) 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](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) peuvent avoir une signification plus précise que dans les [cas d’usage courants](https://docs.stripe.com/declines/codes.md) : | 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](https://docs.stripe.com/testing.md#testing-interactively) pour simuler différents scénarios. Dans un *environnement de test* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), 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éros de carte | Numéro | Scénario | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 4000003560000123 | Simule la configuration et le renouvellement d’un mandat. | | 4000003560000297 | 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. | | 4000003560000248 | 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. | | 4000003560000263 | Simule l’annulation d’un mandat par un titulaire de carte, indépendamment du montant du mandat. | #### PaymentMethods | PaymentMethod | Scénario | | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `pm_card_indiaRecurringMandateSetupAndRenewalsSuccess` | Simule la configuration et le renouvellement d’un mandat. | | `pm_card_indiaRecurringPaymentFailureAfterPreDebitNotification` | 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. | | `pm_card_indiaRecurringPaymentFailureUndeliveredDebitNotification` | 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. | | `pm_card_indiaRecurringPaymentFailureCanceledMandate` | 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](https://docs.stripe.com/api/charges.md) et [Sources](https://docs.stripe.com/api/sources.md). - Pour les Abonnements avec une devise autre que l’INR, les mandats ne sont enregistrés que si un moyen de paiement Inde est attaché au Client au moment de la création de l’Abonnement. Si vous créez un Abonnement non-INR sans moyen de paiement et que vous ajoutez plus tard une carte bancaire Inde, aucun mandat ne sera créé. Pour garantir une création correcte des mandats, attachez une carte bancaire Inde avant de créer l’Abonnement. - Il n’est pas possible de transmettre un mandat existant à un abonnement. - Vous ne pouvez pas annuler ou mettre à jour un mandat.