# [Deprecated] Paiements par carte sur l'API Charges

Découvrez comment débiter, enregistrer et authentifier des cartes bancaires avec les anciennes API Stripe.

The content on this page is deprecated and is superseded by:

- [Accept a payment](https://docs.stripe.com/payments/accept-a-payment.md)
- [Build a payments page](https://docs.stripe.com/payments/checkout.md)
- [The Payment Intents API](https://docs.stripe.com/payments/payment-intents.md)

> #### Deprecated
> 
> Nous avons déprécié l’utilisation de l’API&nbsp;Charges pour créer des paiements par carte et prévoyons de ne plus la prendre en charge. Utilisez plutôt [Checkout](https://docs.stripe.com/payments/checkout.md) ou [l’API&nbsp;Payment&nbsp;Intents](https://docs.stripe.com/payments/payment-intents.md). Les nouvelles intégrations ne peuvent pas utiliser l’API&nbsp;Charges pour créer des paiements.
> 
> L’API Charges ne prend pas en charge les fonctionnalités suivantes, dont beaucoup sont nécessaires à la conformité d’une carte bancaire&nbsp;:
> 
> - Entreprises en Inde
> - [Demandes d’authentification de carte par des institutions financières](https://docs.stripe.com/payments/cards/overview.md)
> - [Authentification forte du client](https://docs.stripe.com/strong-customer-authentication.md)

If you use the Charges API, your access to newer Stripe features is limited. To get the latest features, [migrate to the Payment Intents API](https://docs.stripe.com/payments/payment-intents/migration.md).

## Flux de paiement

In most cases, the Payment Intents API offers more flexibility and integration options.

| API Charges | API Payment Intents |
| --- | --- |
| 1. Recueillez les informations de paiement de votre client dans le navigateur avec Elements.
2. Utilisez des jetons pour les informations de paiement avec Stripe.js.
3. Exécutez une requête d’envoi du jeton à votre serveur.
4. Utilisez ce jeton pour créer une demande de paiement sur votre serveur pour le montant et dans la devise désirés.
5. Si le paiement réussit, traitez la commande de votre client. | 1. Créez un PaymentIntent du montant et de la devise désirés sur votre serveur.
2. Envoyez la clé secrète du client du PaymentIntent côté client.
3. Recueillez les informations de paiement de votre client dans le navigateur avec Elements.
4. Utilisez Stripe.js ou les trousses SDK mobiles pour la gestion de l’authentification [3D Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar), puis effectuez le paiement côté client.
5. Si le paiement réussit, utilisez des webhooks pour traiter la commande de votre client. |

## Remboursements

Pour rembourser un paiement au moyen de l’API, créez un [remboursement](https://docs.stripe.com/api.md#create_refund) et indiquez l’ID du paiement à rembourser.

```curl
curl https://api.stripe.com/v1/refunds \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d charge={{CHARGE_ID}}
```

Pour effectuer un remboursement partiel, saisissez un paramètre `amount`, qui devra être un nombre entier exprimé en cents (ou dans la plus petite unité de la devise du paiement).

```curl
curl https://api.stripe.com/v1/refunds \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d charge={{CHARGE_ID}} \
  -d amount=1000
```

## Apple Pay

Lorsque votre client approuve un paiement, votre application implémente les méthodes [PKPaymentAuthorizationViewControllerDelegate](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationviewcontrollerdelegate) pour recevoir une instance de [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment) contenant les informations de carte cryptées de votre client.

1. Utilisez la méthode SDK [createTokenWithPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createTokenWithPayment:completion:) pour transformer le `PKPayment` en `Token` Stripe
2. Utilisez ce `Token` (jeton) pour créer un paiement.

#### Swift

```swift
extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate {

    func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler: @escaping (PKPaymentAuthorizationResult) -> Void) {
        // Convert the PKPayment into a Token
        STPAPIClient.shared.createToken(withPayment: payment) { token, error in
              guard let token = token else {
                  // Handle the error
                  return
              }
            let tokenID = token.tokenId
            // Send the token identifier to your server to create a Charge...
            // If the server responds successfully, set self.paymentSucceeded to YES
        }
    }

    func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
        // Dismiss payment authorization view controller
        dismiss(animated: true, completion: {
            if (self.paymentSucceeded) {
                // Show a receipt page...
            } else {
                // Present error to customer...
            }
        })
    }
}
```

## Libellé de relevé de compte dynamique

Le [libellé de relevé](https://docs.stripe.com/get-started/account/set-up.md#public-business-information) de votre compte Stripe apparaît par défaut sur les relevés de vos clients chaque fois que vous débitez leur carte. Vous pouvez également définir un libellé de manière dynamique pour toute demande de paiement à l’aide de l’argument `statement_descriptor` sur l’objet Charge.

#### curl

```bash
curl https://api.stripe.com/v1/charges \
  -u <<YOUR_SECRET_KEY>>: \
  -d "amount"=999 \
  -d "currency"="usd" \
  -d "description"="Example charge" \
  -d "source"="tok_visa" \
  -d "statement_descriptor"="Custom descriptor"
```

Les libellés de relevé de compte ne peuvent dépasser 22&nbsp;caractères. Ils ne peuvent pas contenir les caractères spéciaux `<`, `>`, `'`, `"` ou `*`, et ne doivent pas être compris uniquement de chiffres.

Lorsque vous définissez un libellé de relevé de compte dynamique sur des paiements par carte de débit et de crédit, la partie dynamique du libellé est accolée au libellé indiquant l’entité de règlement (séparés par le signe `*` puis une espace). Par exemple, un libellé de relevé de compte d’une entreprise nommée FreeCookies qui inclurait le type de biscuit acheté pourra être&nbsp;: `FREECOOKIES* SUGAR`.

Le signe `*` et l’espace sont inclus dans la limite de 22&nbsp;caractères. Par ailleurs, Stripe alloue automatiquement 10&nbsp;caractères au libellé de relevé de compte dynamique. Par conséquent, si le libellé de l’entité de règlement dépasse 10&nbsp;caractères et que le libellé dynamique fait également 10&nbsp;caractères ou plus, le libellé de l’entité de règlement sera tronqué. Si le libellé dynamique dépasse 10&nbsp;caractères, alors les deux libellés seront tronqués au niveau du 10ème caractère.

Si vous rencontrez des problèmes liés à la limite de caractères, vous pouvez définir un [libellé abrégé](https://dashboard.stripe.com/settings/public) dans votre Dashboard Stripe afin de raccourcir le libellé du relevé de compte de l’entité de règlement. Vous aurez plus de place pour le libellé dynamique. Le libellé abrégé&nbsp;:

- Remplace le libellé de relevé de compte de l’entité de règlement en présence d’un libellé de relevé de compte dynamique.
- Doit comporter entre 2 et 10&nbsp;caractères.

> Si le libellé de relevé de votre compte dépasse 10&nbsp;caractères, définissez un [libellé abrégé](https://dashboard.stripe.com/settings/public) dans le Dashboard ou utilisez un `statement_descriptor_prefix`. Cela permet d’éviter que votre libellé de relevé soit tronqué de manière imprévisible.

Si vous ne savez pas à quoi ressemblent vos libellés lorsqu’ils sont accolés, vous pouvez le vérifier dans le [Dashboard Stripe](https://dashboard.stripe.com/settings/public).

## Stockage d’informations sous forme de métadonnées

If using the [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md), only retrieve and update the `metadata` and `description` fields on the Payment Intent object. If using both the Payment Intent and Charge objects, you’re not guaranteed to see consistent values for these fields.

Stripe vous permet d’ajouter des [métadonnées](https://docs.stripe.com/api.md#metadata) à vos requêtes les plus courantes, comme le traitement des paiements. Les métadonnées ne sont pas visibles pour vos clients et ne sont pas prises en compte pour déterminer si un paiement est refusé ou bloqué par notre système de prévention des fraudes.

Les métadonnées vous permettent d’associer d’autres informations, pertinentes pour vous, aux données d’activité Stripe. Toutes les métadonnées que vous incluez sont visibles dans le Dashboard (par exemple sur la page d’un paiement donné) ainsi que dans de nombreux rapports et exports. Par exemple, vous pouvez associer l’ID attribué à la commande par votre boutique au paiement effectué en règlement de celle-ci. Pour votre comptable ou votre service financier, le rapprochement des paiements sur Stripe et des commandes enregistrées sur votre système interne s’en trouvera grandement facilité.

Si vous utilisez *Radar* (Stripe Radar helps detect and block fraud for any type of business using machine learning that trains on data across millions of global companies. It’s built into Stripe and requires no additional setup to get started), veuillez transmettre toutes les informations supplémentaires concernant vos clients et leurs commandes comme métadonnées. De cette façon, vous pouvez définir des&nbsp;[règles Radar en fonction d’attributs de métadonnées](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) et disposer de davantage d’informations sur les paiements dans le Dashboard, ce qui peut accélérer votre processus.

#### curl

```bash
curl https://api.stripe.com/v1/charges \
  -u <<YOUR_SECRET_KEY>>: \
  -d "amount"=999 \
  -d "currency"="usd" \
  -d "description"="Example charge" \
  -d "source"="tok_visa" \
  -d "metadata[order_id]"=6735
```

> Veillez à ne pas stocker d’informations confidentielles (informations permettant une identification personnelle, données de carte, etc.) sous forme de métadonnées ou dans le paramètre `description` du paiement.

## Refus de paiement

Si vous souhaitez que votre intégration réponde automatiquement aux échecs de paiement, vous pouvez accéder au paramètre `outcome` d’un paiement de deux manières différentes.

- Il faut [gérer l’erreur d’API](https://docs.stripe.com/api.md#error_handling) qui est renvoyée lors de l’échec d’un paiement. Pour les paiements refusés par l’émetteur de cartes et les paiements bloqués, l’erreur comprend l’ID du paiement. Vous pouvez vous en servir pour [récupérer](https://docs.stripe.com/api.md#retrieve_charge) le paiement.
- Utilisez les [webhooks](https://docs.stripe.com/webhooks.md) pour effectuer le suivi des mises à jour de l’état des paiements. Par exemple, l’événement `charge.failed` se déclenche lorsqu’un paiement échoue.
