# Rembourser des transactions Annulez ou remboursez des paiements avec Stripe Terminal. Stripe Terminal prend en charge les captures *automatiques* (Automatically capture funds when a charge is authorized) ainsi que *manuelles* (Manually capture funds separately from an authorization). Lorsque le SDK renvoie un PaymentIntent confirmé à votre application, le paiement est autorisé, mais pas [capturé](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). Vous pouvez [annuler](https://docs.stripe.com/terminal/features/refunds.md#canceling-payments) des paiements autorisés mais non capturés. Si le PaymentIntent a déjà été capturé, vous devez [rembourser](https://docs.stripe.com/terminal/features/refunds.md#refunds) le paiement sous-jacent créé par le PaymentIntent à l’aide de l’[API Refunds](https://docs.stripe.com/api.md#create_refund) ou de votre [Dashboard](https://docs.stripe.com/refunds.md?dashboard-or-api=dashboard). Nous vous recommandons de [rapprocher les paiements](https://docs.stripe.com/terminal/payments/collect-card-payment.md#reconciling) sur votre back-end après une journée d’activité afin d’éviter les autorisations involontaires et les problèmes de fonds non collectés. ## Disponibilité **L’annulation des paiements** est disponible pour les cartes Visa, Mastercard, American Express, Discover et girocard. Pour les moyens de paiement à message unique comme [Interac](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#interac-payments) et [eftpos](https://docs.stripe.com/terminal/payments/regional.md?integration-country=AU#eftpos-payments), les PaymentIntents sont automatiquement capturés. Au lieu d’annuler le PaymentIntent, votre application doit permettre d’initier un remboursement à la fin du tunnel de paiement. **Les remboursements en ligne** sont disponibles sur tous les réseaux de cartes à l’exception d’Interac. [Les remboursements par TPE](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#refund-an-interac-payment) ne sont disponibles que sur Interac. ## Annuler des paiements (Client-side)(Server-side) - [cancelPaymentIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)cancelPaymentIntent:completion:) - [cancelPaymentIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/cancel-payment-intent.html) - [cancelPaymentIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelPaymentIntent) - [cancelPaymentIntent (Java)](https://stripe.dev/stripe-terminal-java/core/com.stripe.stripeterminal/-terminal/cancel-payment-intent.html) Vous pouvez [annuler](https://docs.stripe.com/api.md#cancel_payment_intent) un PaymentIntent `card_present` à tout moment avant sa capture. L’annulation d’un PaymentIntent débloque tous les fonds non capturés, et un PaymentIntent annulé ne peut plus être utilisé pour effectuer des paiements. Utilisez cette option si, par exemple, votre client décide d’utiliser un moyen de paiement différent ou de payer en espèces une fois que le paiement a été traité. Dans l’interface utilisateur de votre application, vous pouvez envisager de permettre à l’utilisateur d’annuler le paiement après sa [confirmation](https://docs.stripe.com/terminal/payments/collect-card-payment.md#confirm-payment), avant de finaliser le paiement et de notifier votre backend de le [capturer](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment). #### Côté client Pour annuler un `PaymentIntent` dans votre client à l’aide du SDK iOS, Android ou React Native : # Piloté par serveur > This is a Piloté par serveur for when terminal-sdk-platform is server-driven. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=server-driven. > L’annulation d’un `PaymentIntent` côté client est possible avec les SDK iOS, Android et React Native. Si vous utilisez une intégration pilotée par serveur, annulez le `PaymentIntent` côté serveur. # JavaScript > This is a JavaScript for when terminal-sdk-platform is js. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=js. > L’annulation d’un `PaymentIntent` côté client est possible avec les autres SDK clients. Si vous utilisez le SDK JavaScript pour Stripe Terminal, annulez le `PaymentIntent` côté serveur. # iOS > This is a iOS for when terminal-sdk-platform is ios. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=ios. #### Swift ```swift // Action for a "Cancel" button func cancelAction() { if let paymentIntent = self.paymentIntent { Terminal.shared.cancelPaymentIntent(paymentIntent) { cancelResult, cancelError in if let error = cancelError { print("cancelPaymentIntent failed: \(error)") } else { print("cancelPaymentIntent succeeded") } } } } ``` # Android > This is a Android for when terminal-sdk-platform is android. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=android. #### Kotlin ```kotlin Terminal.getInstance().cancelPaymentIntent(paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` # React Native > This is a React Native for when terminal-sdk-platform is react-native. View the full page at https://docs.stripe.com/terminal/features/refunds?terminal-sdk-platform=react-native. ```js const { cancelPaymentIntent } = useStripeTerminal(); const { paymentIntent, error } = await cancelPaymentIntent(paymentIntent); if (error) { // Placeholder for handling exception return; } // Placeholder for handling successful operation ``` #### Côté serveur - [Annuler un PaymentIntent](https://docs.stripe.com/api/payment_intents/cancel.md) Si vous utilisez le SDK JavaScript ou une intégration pilotée par serveur, vous devez annuler les `PaymentIntent` sur votre serveur. Pour les autres SDK clients, vous pouvez annuler le `PaymentIntent` sur votre serveur lorsque les informations requises pour initier un paiement ne sont pas immédiatement disponibles dans votre application. ```curl curl -X POST https://api.stripe.com/v1/payment_intents/pi_ANipwO3zNfjeWODtRPIg/cancel \ -u "<>:" ``` ## Effectuer des remboursements (Server-side) Lorsque vous utilisez un PaymentIntent pour encaisser le paiement d’un client, Stripe crée un [paiement](https://docs.stripe.com/api/charges/object.md) en arrière-plan. Pour rembourser le paiement du client une fois que le PaymentIntent a été traité avec succès, [créez un remboursement](https://docs.stripe.com/api.md#create_refund) en transmettant l’ID du PaymentIntent ou l’ID du paiement. Vous pouvez aussi rembourser une partie du paiement en spécifiant un montant. Vous pouvez effectuer des remboursements [via l’API](https://docs.stripe.com/refunds.md?dashboard-or-api=api) ou [le Dashboard](https://docs.stripe.com/refunds.md?dashboard-or-api=dashboard). Pour les transactions Interac au Canada, vous pouvez effectuer des [remboursements en personne](https://docs.stripe.com/terminal/payments/regional.md?integration-country=CA#refund-an-interac-payment) sur les terminaux BBPOS WisePad 3 et BBPOS WisePOS E, les lecteurs Stripe S700/S710, ou via l’application Tap to Pay sur iPhone ou Tap to Pay sur Android. Pour les remboursements en ligne, le titulaire de la carte n’a pas besoin de la présenter à nouveau au point de vente. L’exemple suivant montre comment créer un remboursement intégral en transmettant l’ID de la PaymentIntent. ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo ``` Pour procéder au remboursement partiel d’un PaymentIntent, renseignez le paramètre `amount` et définissez-le sur un entier exprimé en centimes (ou dans la plus petite unité de la devise du paiement) : ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d payment_intent=pi_Aabcxyz01aDfoo \ -d amount=1000 ``` ## See also - [Affichage du panier](https://docs.stripe.com/terminal/features/display.md) - [Reçus](https://docs.stripe.com/terminal/features/receipts.md)