# 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&nbsp;:

**Code d’état&nbsp;:** renvoyez `200` pour indiquer une réussite.

**En-tête&nbsp;:**

| 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&nbsp;:**

| 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.
client = Stripe::StripeClient.new('<<YOUR_SECRET_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
```

Si Stripe ne reçoit pas votre réponse approuvant ou refusant l’autorisation sous 2&nbsp;secondes, l’`Authorization` est automatiquement approuvée ou refusée en fonction de vos [paramètres d’expiration](https://dashboard.stripe.com/account/issuing) ou de vos [paramètres Autopilot, s’ils sont configurés](https://docs.stripe.com/issuing/controls/real-time-authorizations.md#autopilot).

> 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&nbsp;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` est définie sur null.

### Test des webhooks en local

Pour tester des webhooks localement, vous pouvez utiliser la [CLI Stripe](https://docs.stripe.com/cli.md). Après l’avoir installée, vous pouvez transférer les événements à votre serveur&nbsp;:

```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`&nbsp;:

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

Dans certains cas, Stripe refuse une autorisation mais ne parvient pas à communiquer avec le réseau de cartes bancaires, et le réseau approuve l’autorisation. Lorsque cela se produit, Stripe ne bloque pas les fonds autorisés, mais ils peuvent tout de même être capturés.

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.

## Vérifications de fraude via les webhooks (Public preview)

Les [étapes de détection de la fraude](https://docs.stripe.com/issuing/controls/fraud-challenges.md) permettent à vos titulaires de carte de relancer des transactions non frauduleuses qui auraient autrement été bloquées. Bien que les étapes de détection de la fraude soient généralement disponibles, la possibilité de les déclencher vous-même via des réponses webhook en temps réel est en version bêta publique.

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"]`.

L’accès étapes de détection de la fraude grâce à des réponses webhooks en temps réel est actuellement limité aux utilisateurs de la version bêta. Seuls les clients Issuing peuvent accéder à la version bêta. Pour demander l’accès, connectez-vous à votre compte Stripe et actualisez la page. Pour en savoir plus, [contactez Stripe](https://stripe.com/contact/sales).
