Enregistrer le moyen de paiement d'un client sans effectuer de paiement
Apprenez à enregistrer un moyen de paiement et à le débiter plus tard.
Mise en garde
La réglementation sur l’authentification forte du client ou SCA vous impose d’authentifier le client dès le départ si vous avez l’intention d’encaisser d’autres paiements de sa part à l’avenir. La banque du titulaire de la carte peut refuser les paiements futurs et demander une authentification supplémentaire si aucune authentification du client n’a eu lieu initialement.
L’API Checkout Sessionsen configurationmode vous permet d’enregistrer les détails de paiement d’un client sans paiement initial. Cette fonction est utile si vous souhaitez accueillir des clients dès maintenant, configurer leurs paiements et les débiter ultérieurement à l’aide de l’API Payment Intents, lorsqu’ils ne sont pas en ligne.
Utilisez cette intégration pour configurer des paiements récurrents ou créer des paiements ponctuels dont le montant doit être déterminé ultérieurement, généralement après la réception de votre service par le client.
Transactions en présence de la carte
Les transactions effectuées par carte bancaire, telles que la collecte des informations de carte via le terminal Stripe utilisent un processus différent pour l’enregistrement du moyen de paiement.
Conformité
Lorsque vous enregistrez les informations de paiement d’un client, vous êtes responsable du respect de l’ensemble des lois, réglementations et règles du réseau en vigueur. Ces exigences s’appliquent en général si vous souhaitez enregistrer un moyen de paiement pour une utilisation future, par exemple en l’affichant dans Checkout pour un achat ultérieur ou en débitant ce moyen de paiement lorsque le client n’utilise pas activement votre site internet ou votre application. Ajoutez à votre site ou application des conditions précisant comment vous comptez enregistrer les moyens de paiement et permettant aux clients d’y consentir.
Lorsque vous enregistrez un moyen de paiement, vous ne pouvez l’utiliser que pour l’usage spécifique prévu dans vos conditions. Pour débiter un moyen de paiement lorsque le client est hors ligne et l’enregistrer comme option pour de futurs achats, assurez-vous de recueillir explicitement le consentement du client pour cet usage spécifique. Par exemple, incluez une case à cocher « Enregistrer mon moyen de paiement pour une utilisation ultérieure » afin de recueillir ce consentement.
Pour facturer un client lorsqu’il n’est pas en ligne, assurez-vous que vos conditions incluent les éléments suivants :
- Le consentement du client vous autorisant à initier un paiement ou une série de paiements en son nom pour les transactions spécifiées.
- Le calendrier et la fréquence prévus des paiements (par exemple, s’il s’agit de versements échelonnés, de paiements d’abonnements ou de recharges ponctuelles).
- La façon dont vous déterminez le montant à payer.
- Vos conditions d’annulation, si le moyen de paiement est utilisé dans le cadre d’un abonnement.
Veillez à conserver une trace écrite de l’acceptation de ces conditions par votre client.
Remarque
Si vous devez utiliser la confirmation manuelle côté serveur ou si votre intégration nécessite de présenter les moyens de paiement séparément, consultez notre guide alternatif.
Configurer StripeCôté serveur
Tout d’abord, créez un compte Stripe ou connectez-vous.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
Créer un clientCôté serveur
Pour configurer un moyen de paiement pour des paiements futurs, vous devez l’associer à un objet représentant votre client. Lorsque votre client crée un compte ou effectue sa première transaction avec votre entreprise, créez soit un objet Account configuré pour le client avec l’API Accounts v2, soit un objet Customer avec l’API Customers.
Utiliser l’API Accounts v2 pour représenter les clients
L’API Accounts v2 est généralement disponible pour les utilisateurs de Connect et en aperçu public pour les autres utilisateurs de Stripe. Si vous avez accès à l’aperçu Accounts v2, vous devez spécifier une version d’aperçu dans votre code.
Pour accéder à l’aperçu Accounts v2, rendez-vous sur aperçus et fonctionnalités de Account dans votre Dashboard et activez Moyens de paiement réutilisables pour les virements internationaux.
Dans la plupart des cas d’usage, nous vous recommandons de modéliser vos clients en tant qu’objets Account configurés par le client, plutôt que d’utiliser des objets Customer.
Utiliser le mode de configurationCôté serveur
Créez une session Checkout avec mode=setup.
Récupérer le moyen de paiementCôté serveur
Une fois que le client a terminé avec succès sa session Checkout, traitez le webhook checkout.session.completed. Récupérez l’objet Session dans le webhook, puis procédez comme suit :
- Obtenez la valeur de la clé setup_intent, qui est l’identifiant SetupIntent créé lors de la session Checkout.
- Utilisez l’ID du SetupIntent pour récupérer l’objet SetupIntent. L’objet renvoyé contient un ID de payment_method que vous pouvez associer à un client.
En savoir plus sur la configuration des webhooks.
Associer le moyen de paiement à un clientCôté serveur
Si vous n’avez pas créé la session Checkout avec un client existant, utilisez l’identifiant du PaymentMethod pour associer le moyen de paiement à un client.
Sinon, le moyen de paiement est automatiquement associé au client que vous avez fourni lors de la création de la session Checkout.
Débiter ultérieurement le moyen de paiement enregistréCôté serveur
Pour facturer le client ultérieurement, vous avez besoin de l’ID du PaymentMethod qui lui est associé. Si vous ne l’avez pas enregistré lors du traitement du webhook checkout.session.completed, listez les moyens de paiement enregistrés du client pour le récupérer :
Une fois que vous avez l’ID du PaymentMethod, vous pouvez effectuer un paiement hors session à l’aide d’un PaymentIntent :
- Définissez customer_account sur l’ID de l’
Account, et définissez payment_method sur l’ID duPaymentMethod.
- Définissez off_session sur
truepour indiquer que le client n’est pas dans votre tunnel de paiement lors d’une tentative de paiement et qu’il ne peut pas réaliser une demande d’authentification faite par un partenaire, tel qu’un émetteur de carte bancaire, une banque ou une autre institution de paiement. Si, pendant votre tunnel de paiement, un partenaire demande l’authentification, Stripe demandera des exemptions en utilisant les informations du client provenant d’une transaction on-session. Si les conditions d’exemption ne sont pas respectées, le PaymentIntent peut générer une erreur. - Attribuez la valeur
trueà la propriété confirm du PaymentIntent, ce qui entraîne une confirmation immédiate lors de la création du PaymentIntent.
curl https://api.stripe.com/v1/payment_intents \ -u ":" \ -d amount=1099 \ -d currency=usd \ -d "customer_account=sk_test_VePHdqKTYQjKNInc7u56JBrQ" \ -d "payment_method={{CUSTOMER_ACCOUNT_ID}}" \ -d off_session=true \ -d confirm=true{{PAYMENT_METHOD_ID}}
Si une tentative de paiement échoue, la requête renvoie également un code d’état HTTP 402 et l’état du PaymentIntent est requires_payment_method. Informez votre client qu’il doit revenir dans votre application (par exemple, en envoyant un e-mail ou une notification dans l’application) et redirigez-le vers une nouvelle session Checkout afin qu’il sélectionne un autre moyen de paiement.
curl https://api.stripe.com/v1/checkout/sessions \ -u ":" \ -d "customer_account=sk_test_VePHdqKTYQjKNInc7u56JBrQ" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=1099" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/return"{{CUSTOMER_ACCOUNT_ID}}