# Autorisations complémentaires Augmentez le montant autorisé avant la capture d'un paiement. Les autorisations complémentaires vous permettent d’augmenter le [montant](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount) autorisé sur un [PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) confirmé avant de le capturer. Cette fonction s’avère très utile si le tarif total change ou si le client ajoute des biens ou des services et que vous devez mettre à jour le montant pour le paiement. Selon le fonctionnement de la banque émettrice, les titulaires de cartes peuvent voir le montant de l’autorisation en attente initiale augmenter, ou bien chaque incrément faire l’objet d’une autorisation supplémentaire en attente. Après la capture, le montant total capturé apparaît sous la forme d’une seule entrée. ## Disponibilité Lorsque vous utilisez des autorisations complémentaires, veuillez prêter attention aux restrictions suivantes : - Elles ne sont disponibles qu’avec Visa, Mastercard, American Express ou Discover. - Certaines marques de cartes bancaires imposent des restrictions sur des catégories de marchand (voir ci-dessous). - Vous pouvez uniquement incrémenter une transaction effectuée avec le PDV et le lecteur entièrement en ligne. - Vous disposez au maximum de 10 tentatives par paiement. #### Disponibilité par réseau de cartes et catégorie de marchand Utilisez les autorisations complémentaires sur les paiements qui répondent aux critères ci-dessous. Vous trouverez votre catégorie d’utilisateur dans le [Dashboard](https://dashboard.stripe.com/settings/update/company/update). Toute tentative d’autorisation complémentaire sur un paiement qui ne remplit pas les critères ci-dessous génère une erreur. | Marque de carte bancaire | Catégorie de marchand | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Visa** | Toutes les catégories d’utilisateurs | | **Mastercard** | Toutes les catégories d’utilisateurs | | **American Express** | Toutes les catégories d’utilisateurs | | **Discover** | Location de voitures, hôtels, transport local/suburbain, transport de passagers, y compris les ferrys, lignes ferroviaires de passagers, lignes d’autobus - charters, cars touristiques, compagnies de bateaux à vapeur/de croisières, services de location et de crédit-bail de bateaux, magasins d’alimentation et supermarchés, chargement de véhicules électriques, lieux de restauration et restaurants, lieux servant des boissons (alcoolisées), hôtels, motels, complexes touristiques, parcs pour caravanes et campings, services de location et de crédit-bail d’équipements, d’outils, de meubles et d’appareils électroménagers, agence de location de voitures, location de camions et de remorques utilitaires, location de camping-cars, parkings, parcmètres et garages, parcs d’attractions, cirques, voyance et cartomancie, services de loisirs (non classés) | ## Demander la prise en charge des autorisations complémentaires [Côté serveur] [Côté client] Lorsque vous créez un `PaymentIntent`, vous pouvez demander à capturer les incréments du paiement. Définissez le champ [request_incremental_authorization_support](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support) sur `true` et le champ [capture_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-capture_method) sur `manual`. Ainsi le texte sur l’écran de collecte des paiements passe de `Total` à `Pre-authorization`. #### Côté serveur ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card_present" \ -d capture_method=manual \ -d "payment_method_options[card_present][request_incremental_authorization_support]=true" ``` #### iOS #### Swift ```swift let cardPresentParams = try CardPresentParametersBuilder().setRequestIncrementalAuthorization(true).build() let paymentMethodOptionsParams = try PaymentMethodOptionsParametersBuilder(cardPresentParameters: cardPresentParams).build() let params = try PaymentIntentParametersBuilder(amount: 1000, currency: "usd") .setPaymentMethodOptionsParameters(paymentMethodOptionsParams) .build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") // ... } } ``` #### Android #### Kotlin ```kotlin val cardPresentParams = CardPresentParameters.Builder() .setRequestIncrementalAuthorizationSupport(true) .build() val paymentMethodOptionsParams = PaymentMethodOptionsParameters.Builder() .setCardPresentParameters(cardPresentParams) .build() val params = PaymentIntentParameters.Builder() .setAmount(1000) .setCurrency("usd") .setPaymentMethodOptionsParameters(paymentMethodOptionsParams) .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 } } ) ``` #### React Native ```js const { paymentIntent, error } = await createPaymentIntent({ amount: 1000, currency: 'usd', paymentMethodOptions: { requestIncrementalAuthorizationSupport: true, } }); if (error) { console.log(`createPaymentIntent failed: ${error.message}`); return; } console.log('createPaymentIntent succeeded'); ``` ## Confirmer le PaymentIntent [Côté client] Pour déterminer si le `PaymentIntent` est admissible pour une autorisation complémentaire, vérifiez le champ [incremental_authorization_supported](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-incremental_authorization_supported) contenu dans la réponse de confirmation. Vous ne pouvez effectuer des autorisations complémentaires sur des paiements non capturés qu’après confirmation. Pour réajuster le montant d’un paiement avant confirmation, utilisez plutôt la méthode de [mise à jour](https://docs.stripe.com/api/payment_intents/update.md). #### JavaScript ```javascript async () => { const result = await terminal.processPayment(paymentIntent); if (result.error) { // Placeholder for handling result.error } else if (result.paymentIntent) { // Now you're ready to increment the authorization using your backend } } ``` #### iOS #### Swift ```swift // Action for a "Checkout" button func checkoutAction() throws { let params = PaymentIntentParametersBuilder(amount: 1000, currency: "usd").build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") self.collectCancelable = Terminal.shared.collectPaymentMethod(paymentIntent) { collectResult, collectError in if let error = collectError { print("collectPaymentMethod failed: \(error)") } else if let collectPaymentMethodPaymentIntent = collectResult { print("collectPaymentMethod succeeded") // ... Confirm the payment Terminal.shared.confirmPaymentIntent(collectPaymentMethodPaymentIntent) { confirmResult, confirmError in if let error = confirmError { print("confirmPaymentIntent failed: \(error)") } else if let confirmedPaymentIntent = confirmResult { print("confirmPaymentIntent succeeded") // Now you're ready to increment the authorization using your backend } } } } } } } ``` #### Android #### Kotlin ```kotlin Terminal.getInstance().confirmPaymentIntent( paymentIntent, object : PaymentIntentCallback { override fun onSuccess(paymentIntent: PaymentIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` #### React Native ```js const { paymentIntent, error } = await createPaymentIntent({ amount: 1000, currency: 'usd', }); if (error) { console.log(`createPaymentIntent failed: ${error.message}`); return; } console.log('createPaymentIntent succeeded'); const { paymentIntent: collectedPI, error: paymentIntentError } = await collectPaymentMethod({ paymentIntent: paymentIntent.id }); if (paymentIntentError) { console.log(`collectPaymentMethod failed: ${paymentIntentError.message}`); return; } console.log('collectPaymentMethod succeeded'); const { paymentIntent: processedPI, error: processError } = await processPayment(paymentIntent.id); if (processError) { console.log(`processPayment failed: ${processError.message}`); return; } // Now you're ready to increment the authorization using your backend console.log('processPayment succeeded'); ``` Les PaymentIntents ne sont pas tous admissibles pour les autorisations complémentaires. Pour déterminer si un PaymentIntent est admissible au regard des restrictions énoncées à la section [Disponibilité](https://docs.stripe.com/terminal/features/incremental-authorizations.md#availability), vérifiez le champ [incremental_authorization_supported](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-incremental_authorization_supported) pour le dernier paiement du PaymentIntent après la confirmation de réussite. ## Exécuter une autorisation complémentaire [Côté serveur] Pour augmenter le montant autorisé d’un paiement, utilisez l’endpoint [increment_authorization](https://docs.stripe.com/api/payment_intents/increment_authorization.md) et indiquez le [montant](https://docs.stripe.com/api/payment_intents/increment_authorization.md#increment_authorization-amount) total modifié, qui doit être supérieur au montant autorisé initial. Vous tentez ainsi d’autoriser un ajout correspondant à la différence entre le montant initial et le montant incrémenté. Chaque `PaymentIntent` peut être soumis à un maximum de 10 tentatives d’autorisation complémentaire (refus compris). Un même `PaymentIntent` peut appeler cet endpoint plusieurs fois pour augmenter à nouveau le montant autorisé. ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/increment_authorization \ -u "<>:" \ -d amount=1500 ``` Une autorisation peut : - Aboutir : renvoie le `PaymentIntent` avec le montant modifié. - Échouer : renvoie une erreur [card_declined](https://docs.stripe.com/error-codes.md#card-declined), et le `PaymentIntent` reste autorisé à capturer le montant d’origine. Les modifications portant sur d’autres champs du `PaymentIntent` (par exemple, [application_fee_amount](https://docs.stripe.com/api/payment_intents/increment_authorization.md#increment_authorization-application_fee_amount)) ne sont pas enregistrées. ## Capturer le PaymentIntent [Côté serveur] Pour capturer le montant autorisé sur un `PaymentIntent` associé à des autorisations complémentaires antérieures, utilisez l’endpoint [capture](https://docs.stripe.com/api/payment_intents/capture.md). Pour augmenter le montant autorisé et capturer simultanément ce montant modifié, vous pouvez fournir un nouveau montant dans [amount_to_capture](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-amount_to_capture). Fournir un `amount_to_capture` supérieur au montant actuellement autorisé n’aboutira pas à une tentative automatique d’autorisation complémentaire. > Si vous êtes admissible à la [collecte des pourboires à l’encaissement](https://docs.stripe.com/terminal/features/collecting-tips/on-receipt.md), l’utilisation d’un `amount_to_capture` supérieur au montant actuellement autorisé n’aboutira pas à une tentative automatique d’autorisation complémentaire. Les demandes de capture aboutissent systématiquement. ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/capture \ -u "<>:" \ -d amount_to_capture=2000 ``` Voici les résultats possibles auxquels une tentative d’autorisation complémentaire peut aboutir : - Aboutir : renvoie le `PaymentIntent` `captured` avec le montant modifié. - Échouer : renvoie une erreur [card_declined](https://docs.stripe.com/error-codes.md#card-declined), et le `PaymentIntent` reste autorisé à capturer le montant d’origine. Les modifications portant sur d’autres champs du `PaymentIntent` (par exemple, [application_fee_amount](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-application_fee_amount)) ne sont pas enregistrées. Dans tous les cas, nous vous recommandons de toujours vérifier la présence de défaillances lorsque vous utilisez le paramètre `amount_to_capture`.