# Paiements par carte sur l'API Charges Découvrez comment débiter, enregistrer et authentifier des cartes bancaires avec les anciennes API Stripe. > #### Ancienne API > > Le contenu de cette section se rapporte à une fonctionnalité *antérieure* (Technology that's no longer recommended). Utilisez plutôt l’[API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md). > > L’API Charges ne prend pas en charge les fonctionnalités suivantes, dont beaucoup sont nécessaires à la conformité d’une carte bancaire : > > - 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) Les API [Charges](https://docs.stripe.com/api/charges.md) et [Tokens](https://docs.stripe.com/api/tokens.md) sont d’anciennes API utilisées dans de vieilles intégrations Stripe qui permettent d’accepter les paiements par carte de crédit et de débit. Utilisez [PaymentIntents](https://docs.stripe.com/payments/accept-a-payment.md) pour effectuer de nouvelles intégrations. L’API Charges limite votre capacité à profiter pleinement des fonctionnalités de Stripe. Pour bénéficier des dernières fonctionnalités, utilisez [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) ou [migrez vers l’API Payment Intents](https://docs.stripe.com/payments/payment-intents/migration.md). ## Flux de paiement Dans la plupart des cas, l’API Payment Intents offre plus de flexibilité et d’options d’intégration. | API Charges | API Payment Intents | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Recueillez les informations de paiement de votre client dans le navigateur avec Elements. 1. Utilisez des jetons pour les informations de paiement avec Stripe.js. 1. Exécutez une requête d’envoi du jeton à votre serveur. 1. Utilisez ce jeton pour créer une demande de paiement sur votre serveur pour le montant et dans la devise désirés. 1. 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. 1. Envoyez la clé secrète du client du PaymentIntent côté client. 1. Recueillez les informations de paiement de votre client dans le navigateur avec Elements. 1. 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. 1. 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 "<>:" \ -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 "<>:" \ -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 1. 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/activate.md#public-business-information) de votre compte Stripe figure 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 requête de paiement à l’aide de l’argument `statement_descriptor` sur l’objet Charge. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -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 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 : `FREECOOKIES* SUGAR`. Le signe `*` et l’espace sont inclus dans la limite de 22 caractères. Par ailleurs, Stripe alloue automatiquement 10 caractères au libellé de relevé de compte dynamique. Par conséquent, si le libellé de l’entité de règlement dépasse 10 caractères et que le libellé dynamique fait également 10 caractères ou plus, le libellé de l’entité de règlement sera tronqué. Si le libellé dynamique dépasse 10 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é : - 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 caractères. > Si le libellé de relevé de votre compte dépasse 10 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 Si vous utilisez l’[API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md), vous ne devez récupérer et modifier que les champs `metadata` et `description` de l’objet Payment Intent. Si vous utilisez l’objet Payment Intent et l’objet Charge, les valeurs de ces champs peuvent ne pas être cohérentes. 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 [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 <>: \ -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.