# Autorisations en temps réel Issuing Comprendre comment fonctionnent les autorisations en temps réel. Votre webhook synchrone n’est utilisé que pour vous informer des demandes d’autorisation. Toutes les autres notifications sont envoyées à votre endpoint de webhook ordinaire. [Surveillez vos réponses webhook](https://docs.stripe.com/issuing/controls/real-time-authorizations.md#monitor-your-webhook-responses) pour vous assurer de l’état de l’intégration. Votre webhook synchrone vous permet d’approuver ou de refuser les demandes d’autorisation en temps réel. Vous pouvez configurer votre endpoint de webhook dans vos [paramètres](https://dashboard.stripe.com/account/issuing). Lorsqu’une carte est utilisée pour effectuer un achat, Stripe crée une requête `issuing_authorization.request` et l’envoie à l’endpoint configuré pour obtenir votre approbation. Démarrez avec notre [guide interactif sur les autorisations en temps réel](https://docs.stripe.com/issuing/controls/real-time-authorizations/quickstart.md). ## Réponse aux demandes d’autorisation Vous pouvez répondre aux demandes d’autorisation en répondant directement à l’événement de webhook. ### Répondre directement Répondez directement à l’événement de webhook `issuing_authorization.request` pour approuver ou refuser une autorisation après sa réception. #### Réponse du webhook Notre webhook accepte les réponses `JSON` avec les paramètres suivants : **Code d’état :** renvoyez `200` pour indiquer une réussite. **En-tête :** | nom du champ | obligatoire ou facultatif | description | | ------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | **Version Stripe** | obligatoire | Reportez-vous à la section [Gestion des versions de l’API](https://docs.stripe.com/api/versioning.md) pour connaître les valeurs prises en charge. | | **Type de contenu** | facultatif | Le seul type de contenu accepté pour les réponses des webhooks d’autorisation est `application/json`. | **Corps :** | nom du champ | obligatoire ou facultatif | type | description | | -------------------------------------------- | ------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **approved** | obligatoire | Booléen | Définissez `true` pour approuver une autorisation et `false` pour la refuser. | | **amount** | facultatif | Nombre entier | Si la propriété `pending_request.is_amount_controllable` de l’autorisation est `true`, vous pouvez fournir cette valeur afin de contrôler le montant à bloquer pour l’autorisation. Il doit être positif. | | **metadata** | facultatif | Ensemble de [paires clé-valeur](https://docs.stripe.com/api/metadata.md) | Cela peut être utile pour stocker des informations supplémentaires sur l’objet dans un format structuré. | | **send\_fraud\_challenges** (Public preview) | facultatif | Tableau de chaînes de caractères | Vous pouvez envoyer une message de détection de la fraude pour cette autorisation uniquement par SMS. Laissez ce champ vide si vous ne souhaitez pas envoyer de message de détection. | #### Ruby ```ruby # Using Sinatra. require 'sinatra' require 'stripe' set :port, 4242 # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' # Replace with a real secret. You can find your endpoint's secret in your webhook settings. webhook_secret = 'whsec_...' post '/webhook' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil # Verify webhook signature and extract the event. begin event = Stripe::Webhook.construct_event( payload, sig_header, webhook_secret ) rescue JSON::ParserError => e # Invalid payload. status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature. status 400 return end if event['type'] == 'issuing_authorization.request' auth = event['data']['object'] # ... custom business logic status 200 header 'Stripe-Version' => '2025-03-31.basil', 'Content-Type' => 'application/json' data = { 'approved' => true } body data.to_json end # ...handle other cases end ``` ### Effectuer un appel à l’API (Deprecated) Cette documentation est conservée pour les utilisateurs existants. Si vous êtes un nouvel utilisateur, répondez directement au webhook. Si vous êtes un utilisateur existant, prévoyez de migrer vers la réponse directe du webhook. Vous pouvez suivre [notre guide de migration directe des webhooks](https://docs.stripe.com/issuing/controls/real-time-authorizations/direct-webhook-migration.md). Effectuez un appel à l’API pour [approuver](https://docs.stripe.com/api/issuing/authorizations/approve.md) ou [refuser](https://docs.stripe.com/api/issuing/authorizations/decline.md) la requête et inclure l’ID [Authorization](https://docs.stripe.com/api/issuing/authorizations/object.md). Si vous utilisez cette méthode, votre webhook doit approuver ou refuser chaque autorisation avant de répondre à la requête de webhook entrante. #### Ruby ```ruby # Using Sinatra. require 'sinatra' require 'stripe' set :port, 4242 # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' # Uncomment and replace with a real secret. You can find your endpoint's # secret in your webhook settings. # webhook_secret = 'whsec_...' post '/webhook' do payload = request.body.read sig_header = request.env['HTTP_STRIPE_SIGNATURE'] event = nil # Verify webhook signature and extract the event. begin event = Stripe::Webhook.construct_event( payload, sig_header, webhook_secret ) rescue JSON::ParserError => e # Invalid payload. status 400 return rescue Stripe::SignatureVerificationError => e # Invalid signature. status 400 return end if event['type'] == 'issuing_authorization.request' auth = event['data']['object'] handle_authorization(auth) end status 200 enddef handle_authorization(auth) # Authorize the transaction authorization = Stripe::Issuing::Authorization.approve(auth["id"]) end ``` Nous vous recommandons de n’utiliser que l’une de ces deux méthodes pour répondre aux demandes d’autorisation. Pour les utilisateurs qui migrent d’une méthode vers une autre, les deux méthodes sont prises en charge lors d’une migration. Si les deux méthodes sont utilisées pour la même autorisation, l’appel à l’API prime sur la réponse directe. Dans le cadre des migrations, nous vous recommandons de n’utiliser qu’une méthode à la fois pour une requête donnée. Si Stripe ne reçoit pas votre réponse ou demande d’autorisation ou de refus dans les 2 secondes, l’`Authorization` est automatiquement approuvée ou refusée en fonction de vos [paramètres d’expiration](https://dashboard.stripe.com/account/issuing). > Si le solde Issuing de votre compte ne dispose pas de fonds suffisants pour traiter l’autorisation entrante, celle-ci sera refusée et votre endpoint webhook ne recevra pas l’événement `issuing_authorization.request`. Pour découvrir comment alimenter votre solde Issuing, consultez la [documentation correspondante](https://docs.stripe.com/issuing/funding/balance.md). ## Demandes d’autorisation Lorsqu’une demande d’autorisation est envoyée à votre webhook, l’`amount` demandé est stocké dans le champ `pending_request`. ```json { "id": "iauth_1CmMk2IyNTgGDVfzFKlCm0gU", "object": "issuing_authorization", "approved": false, "amount": 0, "currency": "usd", "status": "pending", ... "pending_request": {"amount": 400, "currency": "usd", "merchant_amount": 360, "merchant_currency": "gbp" } } ``` Le champ `amount` du haut dans la demande est défini sur 0 et `approved` prend la valeur false. Lorsque vous répondez à la demande, le montant total approuvé ou refusé est renseigné dans ce champ `amount`, le champ `approved` est mis à jour et la valeur du champ `pending_request` passe à 0. ### Test des webhooks en local Pour tester des webhooks localement, vous pouvez utiliser l’[interface de ligne de commande Stripe](https://docs.stripe.com/stripe-cli.md). Après l’avoir installée, vous pouvez transférer les événements à votre serveur : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit) ``` Sur un autre terminal, vous pouvez ensuite déclencher manuellement des événements `issuing_authorization.request` depuis la CLI pour simplifier les tests. ```bash stripe trigger issuing_authorization.request ``` En savoir plus sur [la configuration des webhooks](https://docs.stripe.com/webhooks.md). ## Surveillez vos réponses webhook Surveillez vos réponses webhook pour détecter les délais d’expiration et les erreurs en vous abonnant aux événements webhook `issuing_authorization.created` et `issuing_authorization.updated`. Lorsque la propriété [request_history.reason](https://docs.stripe.com/api/issuing/authorizations/object.md#issuing_authorization_object-request_history-reason) est soit `webhook_error`, soit `webhook_timeout`, Stripe ne reçoit pas vos réponses. Ne vous fiez pas au message `approved` pour évaluer l’état de l’intégration car Autopilot peut approuver en votre nom lors d’une condition d’erreur. Par exemple, vérifiez si une autorisation a `approved: true`, mais `request_history.reason: webhook_error`. Nous affichons des messages d’erreur détaillés dans le champ [request_history.reason_message](https://docs.stripe.com/api/issuing/authorizations/object.md#issuing_authorization_object-request_history-reason_message). ## Autopilot (Public preview) Autopilot fournit des options de secours qui vous permettent de continuer à prendre des décisions d’autorisation en temps réel lorsque vos systèmes sont en panne, ne répondent pas à une demande d’autorisation ou fournissent une réponse non valide. Autopilot prend une décision d’autorisation en votre nom sur la base d’un ensemble de règles prédéfinies. Nous créons des objets `Authorization` pour la transmission afin de rapprocher les transactions Autopilot. Lorsqu’Autopilot approuve ou refuse une autorisation, la propriété [request_history.reason](https://docs.stripe.com/api/issuing/authorizations/object.md#issuing_authorization_object-request_history-reason) du webhook `issuing_authorization.created` est `webhook_error` ou `webhook_timeout` : - `webhook_error` si vous répondez au webhook d’autorisation en temps réel avec une [version d’API Stripe API](https://docs.stripe.com/api/versioning.md) non valide dans les [en-têtes de requête](https://docs.stripe.com/issuing/controls/real-time-authorizations.md#respond-directly), ou si nous ne pouvons pas traiter votre réponse. - `webhook_timeout` pour tous les autres modes échec. Pour configurer Autopilot, [contactez le service de support Stripe](https://support.stripe.com/contact/login) et [surveillez](https://docs.stripe.com/issuing/controls/real-time-authorizations.md#monitor-your-webhook-responses) votre webhook. ## Stripe Autopilot (Public preview) Stripe Autopilot peut aider les utilisateurs disposant de leur propre numéro d’identification bancaire (BIN) à prendre des décisions d’autorisation lorsque le réseau de cartes ne parvient pas à contacter Stripe. Lorsqu’une autorisation est approuvée ou refusée via Stripe Autopilot tandis que Stripe est indisponible, la propriété [request_history.reason](https://docs.stripe.com/api/issuing/authorizations/object.md#issuing_authorization_object-request_history-reason) du webhook `issuing_authorization.created` est `network_fallback`. Pour configurer Stripe Autopilot, [contactez le service de support Stripe](https://support.stripe.com/contact/login) et [surveillez](https://docs.stripe.com/issuing/controls/real-time-authorizations.md#monitor-your-webhook-responses) votre webhook. ## Étapes de détection de la fraude (Public preview) Les [étapes de détection de la fraude](https://docs.stripe.com/issuing/controls/fraud-challenges.md) permettent aux titulaires de carte de relancer des transactions non frauduleuses qui, sans cette fonctionnalité, auraient été bloquées. Pour gérer les règles qui dictent quand une étape de détection de la fraude est envoyée, réajustez votre réponse au webhook `issuing_authorization.request`. Vous pouvez déclencher des étapes de détection de la fraude lorsque vous détectez des dépenses qui vous semblent suspectes et souhaitez effectuer une vérification supplémentaire (par exemple, lorsqu’un titulaire de carte utilise sa carte à l’étranger). Pour ce faire, refusez le webhook `issuing_authorization.request` et incluez le champ `send_fraud_challenges` en indiquant la valeur `["sms"]`. Les étapes de détection de la fraude sont actuellement limitées aux utilisateurs de la version bêta. Vous devez être un client Issuing pour accéder à la version bêta. Pour demander l’accès à la version bêta, connectez-vous à votre compte Stripe et actualisez la page. [Contactez Stripe](https://stripe.com/contact/sales) pour en savoir plus.