# Transactions Issuing

Comment utiliser Issuing pour gérer des transactions.

Une fois qu’une [autorisation](https://docs.stripe.com/issuing/purchases/authorizations.md) est approuvée et capturée, le `status` de l’autorisation est défini sur `closed`, et un objet [Transaction](https://docs.stripe.com/api.md#issuing_transaction_object) est créé. Cela survient généralement sous 24&nbsp;heures. Cependant, les hôtels, les compagnies aériennes et les sociétés de location de voiture peuvent capturer une autorisation jusqu’à 31&nbsp;jours plus tard.

Lorsqu’une autorisation est capturée, deux choses surviennent.

- Le `status` de l’autorisation est défini sur `closed`, libérant le montant de l’achat maintenu pour cette autorisation. Une [transaction de solde](https://docs.stripe.com/reports/balance-transaction-types.md) de type `issuing_authorization_release` est créée pour représenter cette action.
- Un nouvel objet de transaction de type `capture` est créé. Le montant de l’achat est déduit du [solde utilisé pour Issuing](https://docs.stripe.com/issuing/funding/balance.md).

(See full diagram at https://docs.stripe.com/issuing/purchases/transactions)

```text
+----------------------------------------+
| Autorisation                           |
+----------------------------------------+
| ID: iauth_123                          |
| état: clôturée                         |
| montant: 10 USD                        |
| transactions: ipi_123                  |
| balance_transactions: txn_123, txn_456 |
+----------------------------------------+

+------------------------------+
| Transaction                  |
+------------------------------+
| ID: ipi_123                  |
| type: capture                |
| montant: -10 USD             |
| autorisation: iauth_123      |
| balance_transaction: txn_789 |
+------------------------------+

+----------------------------------+
| Opération sur solde              |
+----------------------------------+
| ID: txn_123                      |
| type: issuing_authorization_hold |
| montant: -10 USD                 |
+----------------------------------+

+-------------------------------------+
| Opération sur solde                 |
+-------------------------------------+
| ID: txn_456                         |
| type: issuing_authorization_release |
| montant: 10 USD                     |
+-------------------------------------+

+---------------------------+
| Opération sur solde       |
+---------------------------+
| ID: txn_789               |
| type: issuing_transaction |
| montant: -10 USD          |
+---------------------------+

[Autorisation.transactions] --> [Transaction]
[Autorisation.balance_transactions] --> [Opération sur solde]
[Autorisation.balance_transactions] --> [Opération sur solde]
[Transaction.balance_transaction] --> [Opération sur solde]
```

Les [contrôles des dépenses](https://docs.stripe.com/issuing/controls/spending-controls.md), les [contrôles des autorisations en temps réel](https://docs.stripe.com/issuing/controls/real-time-authorizations.md) et les contrôles d’état de la carte (si elle est active ou non) ne s’appliquent pas à la capture. Ceux-ci peuvent être utilisés pour déterminer si les autorisations sont approuvées, mais les captures pour les autorisations approuvées aboutissent toujours.

## Traitement d’autres transactions

En plus des autorisations régulières, il existe d’autres cas que vous devriez savoir gérer.

#### Remboursements

Un remboursement est une transaction de [type](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-type) `refund`.

Lorsque nous créons une transaction correspondant à un remboursement ou à un avoir, nous tentons de l’associer à l’autorisation de paiement initiale. Comme les remboursements ne sont pas systématiquement rattachés à la transaction de paiement ou à l’autorisation d’origine, cette association reste approximative. Il peut donc arriver qu’une transaction soit associée à une autorisation non pertinente ou qu’aucune association ne soit possible (par exemple, lorsqu’un crédit est appliqué à la carte bancaire sans être lié à un remboursement). Dans ces situations, le champ [authorization](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-authorization) de la transaction est défini sur `null` et aucun lien n’est établi avec une autorisation. Tous les remboursements et avoirs sont traités de la même manière, qu’ils soient ou non associés à une autorisation de paiement.

> Les remboursements seront toujours traités et crédités auprès de vous même si le [status](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-status) de votre carte bancaire est `inactive` ou `canceled`.

### Exemple de remboursement standards

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "amount": 100,
  "authorization": "iauth_1GBZQyEEsyYlpYZ9255L8GQC",
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": 100,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "taxicabs_limousines",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "refund"
}
```

### Annulations de remboursement

Dans de rares cas, un remboursement peut avoir besoin d’être annulé. Cela se produit généralement lorsque des remboursements ont été traités en double et qu’un remboursement doit être annulé. Les annulations de remboursement sont représentées par des transactions dont le [type](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-type) est défini sur `refund` et dont le champ [amount](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-amount) est négatif (le champ [amount](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-amount) est positif pour les remboursements standards).

Par exemple, si un marchand traite accidentellement deux remboursements de 17,70&nbsp;USD pour la même transaction, le système crée une transaction d’annulation de remboursement d’un montant de -17,70&nbsp;USD (ou un montant similaire, compte tenu des différences de change) pour annuler l’un des remboursements en double.

```json
{
  "id": "ipi_1SftmD05sFo7Lo8prb0oyBgc",
  "object": "issuing.transaction",
  "amount": -1770,
  "authorization": "iauth_1GBZQyEEsyYlpYZ9255L8GQC",
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": -1770,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "taxicabs_limousines",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "refund"
}
```

### Tester les remboursements

Pour simuler la création d’une transaction de remboursement, vous pouvez utiliser l’[API Transaction Refund](https://docs.stripe.com/api/issuing/transactions/test_mode_refund.md) dans les assistants de test d’Issuing.

```curl
curl -X POST https://api.stripe.com/v1/test_helpers/issuing/transactions/{{ISSUINGTRANSACTION_ID}}/refund \
  -u "<<YOUR_SECRET_KEY>>:"
```

Pour créer une transaction de remboursement qui ne soit pas liée à une autorisation, utilisez l’[API Create Unlinked Refund](https://docs.stripe.com/api/issuing/transactions/test_mode_create_unlinked_refund.md) dans les assistants de test d’Issuing.

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/transactions/create_unlinked_refund \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "card={{ISSUINGCARD_ID}}" \
  -d amount=1000
```

#### Capture partielle

Les marchands peuvent capturer un montant inférieur au montant autorisé. Ainsi, une transaction peut afficher un montant inférieur à celui de l’autorisation correspondante. Dans ce cas, le montant des fonds bloqués par Stripe pour une autorisation correspond à la différence entre le montant de l’autorisation et celui de tous les montants des transactions de capture associées.

### Tests

Pour simuler la capture d’une autorisation inférieure au montant autorisé, vous pouvez utiliser l’[API Authorization Capture](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) dans les assistants de test d’Issuing.

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000
```

#### Surcapture

Les entreprises relevant de certaines [catégories de marchand](https://docs.stripe.com/issuing/categories.md) (notamment la location de véhicules, les bars et restaurants et les transports terrestres) ne connaissent pas le montant final de la transaction au moment de l’autorisation. Ces entreprises peuvent autoriser une carte pour un montant, puis capturer des fonds supérieurs à ce montant.

Par exemple, un restaurant autorise souvent un paiement pour le montant de la note, puis capture un montant qui inclut le pourboire. Dans ce cas, le montant autorisé est une estimation assez proche du montant à capturer. Cependant, dans le cas d’un transport terrestre, le montant autorisé est en général un montant minimal, tandis que le montant capturé reflète la transaction réellement effectuée par le titulaire de la carte.

Parfois le montant supplémentaire capturé est excessif et peut être le résultat d’un comportement frauduleux. C’est à vous (ou au titulaire de la carte) de détecter et de [contester](https://docs.stripe.com/issuing/purchases/disputes.md) les transactions illégitimes. La surcapture étant souvent légitime, vous ne pouvez pas bloquer ces transactions.

### Tests

Pour simuler la capture d’une autorisation supérieure au montant autorisé, vous pouvez utiliser l’[API Authorization Capture](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) dans les assistants de test d’Issuing.

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000
```

#### Multicaptures

Certaines [catégories de marchands](https://docs.stripe.com/issuing/categories.md) (dont les croisiéristes, les compagnies aériennes ou les compagnies de chemins de fer) peuvent autoriser une transaction, puis capturer les fonds en plusieurs fois. Cette situation peut se produire lorsque vous achetez plusieurs articles et que ceux-ci sont expédiés séparément à mesure de leur disponibilité. Cela entraîne la création de plusieurs [événements de webhook](https://docs.stripe.com/api/events/types.md#event_types-issuing_authorization.updated) `issuing_authorization.updated` et de plusieurs [transactions](https://docs.stripe.com/api.md#issuing_transaction_object).

### Tests

Pour simuler plusieurs captures correspondant à une même autorisation, vous pouvez utiliser l’[API Authorization Capture](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) dans les assistants de test d’Issuing.

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000 \
  -d close_authorization=false
```

Vous pouvez capturer l’autorisation à plusieurs reprises avec le paramétrage `close_authorization = false`. Pour fermer l’autorisation, définissez cette valeur sur `true` ou omettez le paramètre.

#### Forcer la capture

Les marchands peuvent initier une capture en ayant reçu une autorisation refusée, ou même sans autorisation. Dans tous les cas, Stripe créé les objets de la transaction et nous déduisons le montant capturé de votre solde Issuing , puis l’envoyons au marchand. Si nous ne recevons aucune autorisation, les objets de la transaction ne seront pas liés à l’objet de l’autorisation.

Parfois ces transactions correspondent à des achats légitimes. Dans d’autres cas, elles correspondent à des achats non autorisés ou à un comportement frauduleux. C’est à vous (ou au détenteur de la carte) de reconnaître lorsque cela est le cas et de [contester](https://docs.stripe.com/issuing/purchases/disputes.md) les transactions illégitimes. Comme certaines de ces transactions sont légitimes, vous ne pouvez pas les bloquer.

Un paiement à bord d’un avion est un exemple de transaction légitime sans autorisation. Les terminaux utilisés dans les avions ne sont pas connectés à Internet en général. Les achats effectués pendant les vols ne peuvent pas créer d’autorisations et créent à la place des transactions envoyées après l’atterrissage de l’avion.

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "amount": -100,
  "authorization": null,
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": -100,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "airlines_air_carriers",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "capture"
}
```

### Tests

Pour simuler la création d’une capture forcée, vous pouvez utiliser l’[API Transaction Create Force Capture](https://docs.stripe.com/api/issuing/transactions/test_mode_create_force_capture.md) dans les assistants de test d’Issuing.

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/transactions/create_force_capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "card={{ISSUINGCARD_ID}}" \
  -d amount=100
```

## Transactions

Les transactions capturées ou remboursées sur un [FinancialAccount](https://docs.stripe.com/api/treasury/financial_accounts.md) ont également un [ReceivedDebit](https://docs.stripe.com/treasury/connect/legacy/v1/moving-money/out-of/received-debits.md) ou un [ReceivedCredit](https://docs.stripe.com/treasury/connect/legacy/v1/moving-money/into/received-credits.md) correspondant lié sous le champ [treasury](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-treasury).

#### Capture/ReceivedDebit

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "type": "capture",
  "treasury": {
    "received_debit": "rd_1KsVPhACgxNDEoMCiKgN6Fm4"
  }
}
```

#### Remboursement/ReceivedCredit

```json
{
  "id": "ipi_1KsZDkACgxNDEoMCiTUeOVGE",
  "object": "issuing.transaction",
  "type": "refund",
  "treasury": {
    "received_credit": "rc_1KsZDlACgxNDEoMCLbv2O2PP"
  }
}
```

L’impact de ces captures et remboursements sur les FinancialAccounts se reflète dans les [transactions](https://docs.stripe.com/api/treasury/transactions.md). Il n’y a pas de [BalanceTransactions](https://docs.stripe.com/api/balance_transactions.md).
