Accéder directement au contenu
Créez un compte ou connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compteConnectez-vous
Démarrer
Paiements
Revenus
Plateformes et places de marché
Gestion de fonds
Ressources pour les développeurs
API et SDKAide
Aperçu
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageUtiliser Managed Payments
Utiliser Payment Links
Utiliser une page de paiement préconfiguré
Créer une intégration personnalisée avec Elements
Développer une intégration dans l'application
Paiements par TPE
Terminal
    Présentation
    Accepter les paiements par TPE
    Disponibilité mondiale
    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
    Paiements à plusieurs parties avec Connect
    Se connecter à un lecteur
    Acceptation d'un paiement
    Encaisser des paiements par carte
    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
    Références
    Documentation de l'API
    Lecteurs mobiles
    Lecteurs intelligents
    Lecteurs Tap to Pay
    Guide de migration du SDK
    Liste de contrôle pour le déploiement
    Fiches produit du lecteur Stripe Terminal
Moyens de paiement
Ajouter des moyens de paiement
Gérer les moyens de paiement
Paiement accéléré avec Link
Scénarios de paiement
Gérer plusieurs devises
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Commerce agentique
Financial Connections
Climate
Comprendre la fraude
Radar pour la protection contre la fraude
Gestion des litiges
Vérifier l'identité
États-Unis
Français (France)
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.

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. Traitement du paiement. L’autorisation sur la carte du client a lieu lorsque le SDK traite le paiement.
  3. (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 (Android)

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é.

Erreur fréquente

Ne recréez pas un PaymentIntent en cas de refus de carte. Réutilisez plutôt le même PaymentIntent pour éviter les doubles paiements.

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 Android. Vous devez créer le PaymentIntent côté serveur, puis récupérer le PaymentIntent dans votre application à l’aide de la méthode Terminal.retrievePaymentIntent du SDK.

PaymentActivity.kt
Kotlin
Java
No results
val params = PaymentIntentParameters.Builder() .setAmount(1000) .setCurrency("usd") .build() Terminal.getInstance().createPaymentIntent( params, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } )

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
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
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 lle paramètre capture_method sur automatic ou sur 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
Python
PHP
Java
Node.js
Go
.NET
No results
post '/create_payment_intent' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end

Documentation sur les SDK

  • retrievePaymentIntent (Android)

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

Après avoir récupéré la PaymentIntent, utilisez-la pour appeler processPaymentIntent.

PaymentActivity.kt
Kotlin
Java
No results
Terminal.getInstance().retrievePaymentIntent( clientSecret, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } )

Traiter le paiement
Côté client

Vous pouvez traiter immédiatement un paiement avec la carte présentée par un client, ou bien vérifier les informations de carte avant de procéder au traitement du paiement. Dans la plupart des cas, nous recommandons un traitement immédiat, car l’intégration est plus simple et nécessite moins d’appels à l’API. Cependant, si vous souhaitez insérer votre propre logique métier avant d’autoriser la carte, utilisez le flux en deux étapes :collecter et confirmer.

Après avoir créé une PaymentIntent, l’étape suivante consiste à traiter le paiement. Le lecteur invite le client à insérer ou à taper sa carte, puis tente d’autoriser le paiement.

Documentation sur les SDK

  • processPaymentIntent (Android)

Lors du traitement d’un paiement, le titulaire de la carte peut mettre quelques secondes à sortir sa carte de son wallet ou poser une question à l’opérateur lors du paiement.

PaymentActivity.kt
Kotlin
Java
No results
val cancelable = Terminal.getInstance().processPaymentIntent( paymentIntent = paymentIntent, collectConfig = CollectPaymentIntentConfiguration.Builder().build(), confirmConfig = ConfirmPaymentIntentConfiguration.Builder().build(), callback = object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { println("processPaymentIntent succeeded") // Notify your backend to capture the PaymentIntent if (paymentIntent.id != null) { ApiClient.capturePaymentIntent(paymentIntent.id) { error -> if (error != null) { println("capturePaymentIntent failed: $error") } else { println("capturePaymentIntent succeeded") } } } else { println("Payment collected offline") } } override fun onFailure(e: TerminalException) { println("processPaymentIntent failed: $e") } } )

Annuler la collecte

Annulation programmatique

Documentation sur les SDK

  • Cancelable (Android)

Vous pouvez annuler le traitement d’une PaymentIntent à l’aide de l’objet Cancelable renvoyé par le SDK Android.

Annulation initiée par le client

Documentation sur les SDK

  • setCustomerCancellation (Android)
  • Annulation de la part du client (Android)

Par défaut, les lecteurs intelligents affichent aux clients un bouton d’annulation. Vous pouvez le désactiver en définissant customerCancellation sur DISABLE_IF_AVAILABLE.

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

PaymentActivity.kt
Kotlin
Java
No results
Terminal.getInstance().collectPaymentMethod( paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } }, CollectPaymentIntentConfiguration.Builder() .setCustomerCancellation(CustomerCancellation.DISABLE_IF_AVAILABLE) // turn OFF the cancel button, ON by default .build(), )

Gérer les événements

Documentation sur les SDK

  • MobileReaderListener (Android)

Lorsque vous collectez un moyen de paiement à l’aide d’un lecteur tel que le Stripe M2sans écran intégré, votre application doit être en mesure d’afficher les événements du processus de collecte du moyen de paiement aux utilisateurs. Ces événements aident les utilisateurs à encaisser 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, Swipe, Insert, ou Tap`). 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.

ReaderActivity.kt
Kotlin
Java
No results
class ReaderActivity : AppCompatActivity(), MobileReaderListener { // ... override fun onRequestReaderInput(options: ReaderInputOptions) { Toast.makeText(activity, options.toString(), Toast.LENGTH_SHORT).show() } override fun onRequestReaderDisplayMessage(message: ReaderDisplayMessage) { Toast.makeText(activity, message.toString(), Toast.LENGTH_SHORT).show() } // ... }

Encaisser des paiements avec Tap to Pay sur Android

When your application is ready to collect a payment, the Stripe Android SDK takes over the display to handle the collection process. After calling the process payment method, your application remains running. The Android device displays a full-screen prompt to the cardholder, instructing them to present their card or NFC-based mobile wallet. If there’s an error reading the card, a prompt for retry displays. A successful presentation returns a success indication, and then control returns to your application.

Tap to Pay sur Android

Encaissement des paiements

  • En cas de capture manuelle des paiements, un appel processPayment réussi génère une PaymentIntentà l’état requires_capture.
  • En cas de capture automatique d’un paiement, le PaymentIntent passe à l’état succeeded.

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

  • TerminalException (Android)

Lorsque le traitement d’un paiement échoue, le SDK renvoie une erreur comprenant la PaymentIntent mise à jour. Votre application doit examiner la PaymentIntent pour décider de la manière de résoudre l’erreur.

État de la PaymentIntentSignificationRésolution
requires_payment_methodMoyen de paiement refuséEssayez de recueillir un moyen de paiement différent en appelant à nouveau processPaymentIntent avec la même PaymentIntent.
requires_confirmationProblème de connectivité temporaireAppelez à nouveau processPaymentIntent avec la même PaymentIntent pour retenter la requête.
PaymentIntent est nilLa requête envoyée à Stripe a expiré, l’état de PaymentIntent est inconnuRéessayez de traiter la PaymentIntent initiale. N’en créez pas une nouvelle, car cela pourrait entraîner plusieurs autorisations 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.

Évitez les doubles facturations

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 la PaymentIntent, vous devez appeler processPaymentIntent pour mettre à jour les informations de paiement sur le lecteur.

Pour pouvoir être traitée par Stripe, une PaymentIntent doit être à l’état requires_payment_method. Une PaymentIntent autorisée, capturée ou annulée ne pourra pas être traitée par le 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
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
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.
  • Consultez notre log des modifications.
  • Des questions ? Contactez l'équipe commerciale.
  • LLM ? Lire llms.txt.
  • Propulsé par Markdoc