Accéder directement au contenu
Créez un compte
ou
connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compte
Connectez-vous
Démarrer
Paiements
Revenus
Plateformes et places de marché
Gestion de fonds
Outils de développement
Aperçu
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageManaged Payments
Utiliser Payment Links
Créer une page de paiement
Développer une intégration avancée
Développer une intégration dans l'application
Moyens de paiement
Ajouter des moyens de paiement
Gérer les moyens de paiement
Paiement accéléré avec Link
Interfaces de paiement
Payment Links
Checkout
Web Elements
Elements intégrés à l'application
Scénarios de paiement
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Paiements par TPE
Terminal
    Présentation
    Accepter les paiements par TPE
    Conception d'intégration
    Choisir votre lecteur
    Concevoir une intégration
    Démarrage rapide
    Exemples d'applications
    Tests
    Configuration de Terminal
    Configurer votre intégration
    Se connecter à un lecteur
    Acceptation d'un paiement
    Encaisser des paiements par carte
      Marques de cartes prises en charge
    Autres moyens de paiement
    Accepter les paiements hors ligne
    Paiement des commande par courrier/par téléphone
    Spécificités régionales
    Lors du règlement
    Collecter des pourboires
    Collecter et enregistrer des informations de paiement pour une utilisation ultérieure
    Autorisations flexibles
    Après le paiement
    Rembourser des transactions
    Fournir des reçus
    Personnalisez Checkout
    Affichage du panier
    Collecter les données saisies à l'écran
    Collecter les données des lectures de la piste magnétique
    Collecter les données des paiements NFC sans contact
    Applications sur des appareils
    Gérer les lecteurs
    Commander, renvoyer ou remplacer des lecteurs
    Enregistrer des lecteurs
    Gérer les emplacements et les zones
    Configurer des lecteurs
    Suivre les lecteurs
    Chiffrement
    Références
    Documentation de l'API
    Lecteurs mobiles
    Lecteurs intelligents
    Guide de migration du SDK
    Liste de contrôle pour le déploiement
    Fiches produit du lecteur Stripe Terminal
Autres produits Stripe
Financial Connections
Cryptomonnaies
Climate
AccueilPaiementsTerminal

Encaissement des paiements par carte

Préparez votre application et votre back-end pour l'encaissement des paiements par carte à l'aide de Stripe Terminal.

Copier la page

En savoir plus

Vous découvrez l’API Payment Intents ? Voici quelques ressources utiles :

  • L’API Payment Intents
  • L’objet PaymentIntent
  • Autres scénarios de paiement

La définition d’un tunnel de paiement dans votre application est nécessaire pour encaisser des paiements avec Stripe Terminal. Utilisez le SDK Stripe Terminal pour créer et mettre à jour un PaymentIntent, un objet représentant une session de paiement individuelle.

Conçue pour résister aux défaillances, l’intégration Terminal divise le processus de paiement en plusieurs étapes, dont chacune peut être répétée en toute sécurité :

  1. Créer un PaymentIntent
  2. Collecter un moyen de paiement. Vous pouvez décider de capturer vos paiements automatiquement ou manuellement.
  3. Confirmer le paiement L’autorisation sur la carte du client a lieu lorsque le SDK confirme le paiement.
  4. (Facultatif) Capturer le paiement

Créer un PaymentIntent
Côté client
Côté serveur

La première étape dans l’encaissement d’un paiement consiste à démarrer le tunnel de paiement. Lorsque le client commence à payer, votre application doit créer un objet PaymentIntent. Celui-ci représente une nouvelle session de paiement sur Stripe.

Documentation sur les SDK

  • createPaymentIntent (React Native)

Vous pouvez créer un PaymentIntent côté client ou côté serveur.

Utilisez des montants test pour essayer d’obtenir des résultats différents. Un montant se terminant par 00 correspond à un paiement approuvé.

Côté client

Créez un PaymentIntent pour votre client :

Avertissement

Si votre application est connectée au Verifone P400, vous ne pouvez pas créer de PaymentIntent à partir du SDK React Native. Vous devez créer le PaymentIntent côté serveur, puis récupérer le PaymentIntent dans votre application à l’aide de la méthode retrievePaymentIntent du SDK.

PaymentScreen.tsx
const {error, paymentIntent} = await createPaymentIntent({ amount: 1000, currency: "usd", });

Côté serveur

Vous pouvez créer le PaymentIntent sur votre serveur si les informations requises pour lancer un paiement ne sont pas facilement accessibles dans votre application.

L’exemple suivant montre comment créer un PaymentIntent sur votre serveur :

Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "amount"=1000 \ -d "currency"="usd" \ -d "payment_method_types[]"="card_present" \ -d "capture_method"="manual"

Pour les paiements Terminal, le paramètre payment_method_types doit inclure l’option card_present.

Vous pouvez contrôler le tunnel de paiement de la manière suivante :

  • Pour contrôler totalement le tunnel de paiement pour les paiements card_present, définissez le paramètre capture_method sur manual. Cela vous permet d’ajouter une étape de rapprochement avant la réalisation du paiement.
  • Pour capturer et autoriser simultanément des paiements, définissez le paramètre capture_method sur automatic.

Pour accepter des paiements en Australie, vous devez définir capture_method sur automatic ou manual_preferred. Pour en savoir plus, consultez notre documentation sur l’Australie. Pour accepter les paiements Interac au Canada, vous devez également inclure interac_present dans payment_method_types. Pour en savoir plus, consultez notre documentation sur le Canada.

Le PaymentIntent contient une clé secrète du client, une clé unique propre à chaque PaymentIntent. Pour utiliser la clé secrète du client, vous devez l’obtenir du PaymentIntent sur votre serveur et la transmettre côté client.

Ruby
post '/create_payment_intent' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end

Documentation sur les SDK

  • retrievePaymentIntent (React Native)

Pour récupérer un PaymentIntent, utilisez la clé secrète du client pour appeler retrievePaymentIntent.

Après avoir récupéré le PaymentIntent, utilisez-le pour appeler collectPaymentMethod.

PaymentScreen.tsx
const { paymentIntent, error } = await retrievePaymentIntent(clientSecret); if (error) { // Placeholder for handling exception return; } // Placeholder for collecting payment method

Recueillir un moyen de paiement
Côté client

Documentation sur les SDK

  • collectPaymentMethod (React Native)

Une fois que vous avez créé un PaymentIntent, il vous faut ensuite recueillir un moyen de paiement avec le SDK.

Pour recueillir un moyen de paiement, votre application doit être connectée à un lecteur. Le lecteur connecté attend qu’une carte soit présentée une fois que votre application appelle collectPaymentMethod.

PaymentScreen.tsx
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent

Cette méthode recueille les données chiffrées du moyen de paiement à l’aide du lecteur de carte connecté, et les associe au PaymentIntent local.

Examen facultatif des informations du moyen de paiement

Documentation sur les SDK

  • CollectPaymentMethodParams (React Native)
  • CardPresentDetails (React Native)

Vous pouvez également examiner les informations de moyen de paiement de la carte présentée et effectuer votre propre logique métier avant l’autorisation, ce qui peut être utile pour les cas d’usage avancés.

Utilisez le paramètre updatePaymentIntent pour associer un PaymentMethod au PaymentIntent côté serveur. Ces données sont renvoyées dans la réponse collectPaymentMethod.

PaymentScreen.tsx
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent, updatePaymentIntent: true, }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent

Remarque

Cette méthode permet d’associer les données chiffrées collectées concernant le moyen de paiement grâce à une modification de l’objet PaymentIntent. Aucune autorisation n’est requise jusqu’à la confirmation du paiement.

Ce cas d’usage avancé n’est pas pris en charge sur le P400 de Verifone.

Une fois le moyen de paiement encaissé, vous devez autoriser le paiement ou annuler le recouvrement dans les 30 secondes.

Si le SDK fonctionne hors ligne, le champ paymentMethod n’est pas présent dans l’objet PaymentIntent.

À ce stade, vous pouvez accéder à des attributs tels que la marque de la carte, le financement et d’autres données utiles.

Remarque

Stripe tente de détecter si un portefeuille mobile est utilisé dans une transaction, comme indiqué dans l’attribut wallet.type. Cependant, l’attribut n’est pas renseigné si la banque émettrice de la carte ne prend pas en charge l’identification par lecteur d’un portefeuille mobile, une détection précise n’est donc pas garantie. Après l’autorisation à l’étape de confirmation, Stripe reçoit des réseaux des informations actualisées afin de mettre à jour wallet.type de manière fiable.

Annuler la collecte

Annulation programmatique

Documentation sur les SDK

  • cancelCollectPaymentMethod (React Native)

Vous pouvez annuler le débit du moyen de paiement en appelant cancelCollectPaymentMethod dans le SDK React Native.

Annulation initiée par le client

Documentation sur les SDK

  • enableCustomerCancellation (React Native)

Lorsque vous définissez enableCustomerCancellation sur la valeur « true » pour une transaction, les utilisateurs de lecteurs intelligents voient apparaître un bouton d’annulation.

Appuyer sur le bouton d’annulation annule la transaction active.

PaymentScreen.tsx
const { paymentIntent, error } = await collectPaymentMethod({ paymentIntent: paymentIntent, enableCustomerCancellation: true }); if (error) { // Placeholder for handling exception } // Placeholder for processing PaymentIntent

Gérer les événements

Documentation sur les SDK

  • UserCallbacks (React Native)

Lorsque vous collectez un moyen de paiement à l’aide d’un lecteur tel que le Stripe M2, sans écran intégré, votre application doit être en mesure d’afficher aux utilisateurs les événements du processus de collecte du moyen de paiement. Ces événements aident les utilisateurs à terminer les paiements (par exemple, réessayer une carte, essayer une autre carte ou utiliser une autre méthode de lecture).

Au début d’une transaction, le SDK adresse une valeur ReaderInputOptions au gestionnaire d’affichage du lecteur de votre application, précisant les types de saisie acceptables (par exemple, le glissement, l’insertion, la présentation). Dans l’interface de paiement de l’application, invitez l’utilisateur à effectuer son paiement par carte selon l’une de ces options.

Au cours de la transaction, le SDK peut recourir à l’application pour afficher d’autres messages à l’attention de l’utilisateur (« Réessayer la carte », par exemple) en transmettant une valeur ReaderDisplayMessage au gestionnaire d’affichage du lecteur de votre application. Vérifiez que l’interface de paiement relaie bien ces messages à l’utilisateur.

Remarque

Votre application n’a pas besoin de présenter les événements du processus de collecte du moyen de paiement aux utilisateurs, car c’est le lecteur qui s’en charge. Pour effacer le moyen de paiement d’une transaction, vous pouvez annuler la requête.

ReaderScreen.tsx
useStripeTerminal({ onDidRequestReaderInput: (options) => { // Placeholder for updating your app's checkout UI Alert.alert(options.join('/')); }, onDidRequestReaderDisplayMessage: (message) => { Alert.alert(message); }, });

Confirmer le paiement
Côté client

Documentation sur les SDK

  • confirmPaymentIntent (React Native)

Après avoir collecté un moyen de paiement auprès du client, vous devez confirmer le paiement avec le SDK. Au moment de procéder au paiement, appelez confirmPaymentIntent avec le PaymentIntent mis à jour lors de l’étape 2.

  • Pour la capture manuelle des paiements, un appel réussi à confirmPaymentIntent génère un PaymentIntent avec l’état requires_capture.
  • En cas de capture automatique d’un paiement, le PaymentIntent passe à l’état succeeded.
PaymentScreen.tsx
const { paymentIntent, error } = await confirmPaymentIntent(paymentIntent); if (error) { // Placeholder for handling exception return; } // Placeholder for notifying your backend to capture paymentIntent.id

Avertissement

Vous devez capturer un PaymentIntent manuellement sous deux jours, faute de quoi l’autorisation expire et les fonds sont restitués au client.

Gérer les échecs

Documentation sur les SDK

  • StripeError (React Native)

Lorsque la confirmation d’un paiement échoue, le SDK renvoie une erreur qui inclut le PaymentIntent mis à jour. Votre application doit inspecter le PaymentIntent pour déterminer comment résoudre l’erreur.

État du PaymentIntentSignificationRésolution
requires_payment_methodMoyen de paiement refuséEssayez de collecter un autre moyen de paiement en rappelant collectPaymentMethod avec le même PaymentIntent.
requires_confirmationProblème de connectivité temporaireAppelez confirmPaymentIntent à nouveau avec le même PaymentIntent pour relancer la requête.
PaymentIntent est nilLa requête envoyée à Stripe a expiré, l’état de PaymentIntent est inconnuRéessayez de confirmer le PaymentIntent initial. N’en créez pas un nouveau, car cela pourrait entraîner des autorisations multiples pour le titulaire de la carte.

Si vous rencontrez plusieurs expirations du délai paiement à la suite, il se peut qu’il y ait un problème de connectivité. Assurez-vous que votre application est connectée à Internet.

Éviter les doublons de paiement

L’objet PaymentIntent active les mouvements de fonds sur Stripe : utilisez un seul PaymentIntent pour représenter une transaction.

Réutilisez le même PaymentIntent même après le refus d’une carte (par exemple, pour fonds insuffisants), afin que votre client puisse réessayer avec une autre carte.

Si vous modifiez le PaymentIntent, vous devez appeler collectPaymentMethod pour mettre à jour les informations de paiement sur le lecteur.

Pour que Stripe puisse confirmer un PaymentIntent, il doit être à l’état requires_payment_method. Un PaymentIntent autorisé, capturé ou annulé ne peut pas être confirmé par un lecteur.

Capturer le paiement
Côté serveur

Si vous avez défini capture_method sur manual lors de la création du PaymentIntent à l’étape 1, le SDK renvoie à votre application un PaymentIntent autorisé, mais non capturé. En savoir plus sur la différence entre autorisation et capture.

Assurez-vous que votre application demande à votre back-end de capturer le paiement lorsqu’elle reçoit du SDK un PaymentIntent confirmé. Créez dans votre back-end un endpoint qui accepte un ID de PaymentIntent et envoie à l’API Stripe une demande de capture correspondante :

Command Line
cURL
curl -X POST https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/capture \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"

Si l’appel de capture réussit, l’état du PaymentIntent passe à succeeded.

Remarque

Pour débiter les comptes connectés des frais de plateforme appropriés, inspectez chaque PaymentIntent et modifiez les frais de plateforme, si nécessaire, avant de capturer le paiement manuellement.

Rapprocher les paiements

Pour vérifier l’activité de paiement de votre entreprise, vous pouvez rapprocher les PaymentIntents avec votre système de commande interne sur votre serveur à la fin de chaque journée.

Un PaymentIntent conservant l’état requires_capture peut signifier deux choses :

Autorisation inutile sur le relevé de carte bancaire de votre client

  • Cause : l’utilisateur abandonne le tunnel de paiement de votre application au milieu d’une transaction
  • Solution : si le PaymentIntent non capturé n’est associé à aucune commande terminée sur votre serveur, vous pouvez l’annuler. Vous ne pouvez pas utiliser un PaymentIntent annulé pour effectuer des paiements.

Encaissement de fonds incomplet auprès d’un client

  • Cause : échec de la requête de votre application signalant à votre back-end de capturer le paiement
  • Solution : si le PaymentIntent non capturé est associé à une commande terminée sur votre serveur, et aucun autre paiement n’a été encaissé pour la commande (par exemple, un paiement en espèces), vous pouvez le capturer.

Encaisser les pourboires États-Unis uniquement

Aux États-Unis, les utilisateurs admissibles peuvent encaisser des pourboires lors de la capture des paiements.

Cette page vous a-t-elle été utile ?
OuiNon
Besoin d'aide ? Contactez le service Support.
Rejoignez notre programme d'accès anticipé.
Consultez notre log des modifications.
Des questions ? Contactez l'équipe commerciale.
LLM ? Lire llms.txt.
Propulsé par Markdoc