# Capture asynchrone

Utilisez la capture asynchrone pour accélérer les confirmations de PaymentIntent.

La capture asynchrone réduit la latence des confirmations de PaymentIntent en faisant en sorte que l’opération de capture se déroule en arrière-plan. Après avoir effectué la demande de capture, votre intégration reçoit une réponse positive et Stripe finalise la capture du paiement dans le back-end.

Cela signifie que&nbsp;:

- Le champ `balance_transaction` de l’objet Charge peut être défini sur `null` immédiatement après la confirmation.
- Si vous développez `balance_transaction` ou `latest_charge.balance_transaction`, il est possible qu’il ne soit pas disponible dans la réponse.
- Vous pouvez écouter l’événement `charge.updated` pour savoir quand l’opération sur solde sera disponible.

Votre intégration doit gérer la possibilité que l’opération sur solde ne soit pas immédiatement disponible.

## Accepter la capture asynchrone

Pour mettre à niveau votre intégration existante et ajouter la prise en charge de la capture asynchrone, utilisez `automatic_async` comme méthode de capture lors de la création d’un PaymentIntent&nbsp;:

La spécification du paramètre `capture_method=automatic_async` est facultative car Stripe active ses fonctionnalités par défaut dans la dernière version de l’API.

#### curl

```bash
curl https://api.stripe.com/v1/payment_intents \
  -u <<YOUR_SECRET_KEY>>: \
  -d amount=2000 \
  -d currency=usd \
  -d payment_method=pm_card_visa \
  --data-urlencode "return_url=https://example.com/return" \
  -d capture_method=automatic_async \
  -d confirm=true
```

Il se peut que vous deviez apporter des modifications supplémentaires lorsque vous optez pour la capture asynchrone, car la réponse de l’API et certains webhooks ont un comportement différent de celui des autres méthodes de capture.

Pour tous les paiements, la [balance_transaction](https://docs.stripe.com/api/balance_transactions.md) est `null` pour les objets suivants. Pour les paiements Connect, le [transfer](https://docs.stripe.com/api/charges/object.md#charge_object-transfer) et l’[application_fee](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-application_fee_amount) sont également `null` pour les objets suivants&nbsp;:

- l’objet [Charge](https://docs.stripe.com/api/charges/object.md) joint à la réponse de l’API
- webhook [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded)
- webhook [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)

Objet Charge modifié sur le webhook [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded)&nbsp;:

```json
# Charge Object
{
    "id": "ch_123",
    "object": "charge",
    "amount_captured": 1000, # the capture has happened
    "application_fee_amount": 100,
    "captured": true,
    "balance_transaction": null,  # object might not be created yet, might be shown as nil.
    "transfer": null,             # object might not be created yet, might be shown as nil.
    "application_fee": null,      # object might not be created yet, might be shown as nil.
    ...
}
```

Modification de la réponse de l’API et du webhook [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded)&nbsp;: (varie selon la [version de l’API](https://docs.stripe.com/upgrades.md))

#### API version 2022-11-15 ou ultérieure

```json
# PaymentIntent Object
{
  "id": "pi_123",
  "object": "payment_intent",
  "capture_method": "automatic_async",
  "status": "succeeded",
  "latest_charge": "ch_**" # if expanded, this is the Modified Charge object above
}
```

## Écoutez les webhooks pour recevoir une notification lorsque des données supplémentaires sont disponibles

> Notre accord de niveau de service (SLA) pour le webhook charge.updated est d’une heure après la confirmation du PaymentIntent.

Vous pouvez écouter les webhooks pour vérifier l’état des objets qui sont initialement à l’état `null` lors de l’utilisation de la capture asynchrone.

- Pour obtenir la [balance_transaction](https://docs.stripe.com/api/balance_transactions.md), abonnez-vous à l’événement webhook [charge.updated](https://docs.stripe.com/api/events/types.md#event_types-charge.updated).
- Pour obtenir l’[application_fee](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-application_fee_amount), abonnez-vous à l’événement webhook [application_fee.created](https://docs.stripe.com/api/events/types.md#event_types-application_fee.created).
- Pour obtenir le [transfer](https://docs.stripe.com/api/charges/object.md#charge_object-transfer), abonnez-vous aux événements webhook [transfer.created](https://docs.stripe.com/api/events/types.md#event_types-transfer.created).

Webhooks pour la capture asynchrone

```json

# charge.updated events
{
  "data": {
    "id": "ch_123",
    "object": "charge",
    "amount": 100,
    "balance_transaction": "txn_123", # applicable to all charges.
    "transfer": "tr_123",         # applicable to destination charge only.
    "application_fee": "fee_123", # applicable to destination charge only.
    ...
  },
  previous_attributes: {
   "balance_transaction": null, # applicable to all charges.
   "transfer": null,          # applicable to destination charge only.
   "application_fee": null,   # applicable to destination charge only.
  }
}
```

```json

# transfer.created events
{
  "data": {
    "id": "tr_123",
    "object": "transfer",
    "amount": 1000,
    ...
  }
}
```

```json

# application_fee.created events
{
  "data": {
    "id": "fee_123",
    "object": "application_fee",
    "amount": 100,
    ...
  }
}
```
