# 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 fait référence à 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 émanant des banques](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 afin 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 des fonctionnalités de Stripe. Pour bénéficier des fonctionnalités plus récentes, 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). ## Tunnel 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. Tokenisez les informations de paiement avec Stripe.js. 1. Exécutez une requête d’envoi du token à votre serveur. 1. Utilisez ce token 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 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 avec 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 centime (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` pour effectuer une transaction. #### 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é bancaire dynamique Par défaut, le [libellé de relevé bancaire](https://docs.stripe.com/get-started/account/activate.md#public-business-information) de votre compte Stripe apparaît sur les relevés de vos clients chaque fois que vous débitez leur carte. Vous pouvez également définir le 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é bancaire sont limités à 22 caractères, ne peuvent pas contenir les caractères spéciaux `<`, `>`, `'`, `"` ou `*`, et ne doivent pas être constitués uniquement de chiffres. Lorsque vous définissez un libellé de relevé bancaire dynamique sur des paiements par carte bancaire, la partie dynamique du libellé est accolée au libellé indiquant le marchand du règlement (séparés par le signe `*` puis une espace). Par exemple, un libellé de relevé bancaire d’une entreprise nommée FreeCookies qui inclurait le type de cookie 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é bancaire 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 dus à la limite de caractères, vous pouvez définir un [libellé de relevé bancaire abrégé](https://dashboard.stripe.com/settings/public) dans votre Dashboard Stripe afin de raccourcir le libellé de l’entité de règlement. Vous aurez ainsi plus de place pour le libellé dynamique. Le libellé abrégé : - Remplace le libellé de relevé bancaire de l’entité de règlement en présence d’un libellé de relevé bancaire dynamique. - Doit comporter entre 2 et 10 caractères. > Si le libellé de relevé bancaire dépasse 10 caractères, définissez un [libellé abrégé](https://dashboard.stripe.com/settings/public) dans le Dashboard ou utilisez `statement_descriptor_prefix`. De cette façon, vous éviterez que votre libellé de relevé bancaire ne 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 à la fois l’objet Payment Intent et l’objet Charge, les valeurs de ces champs peuvent être incohérentes. Stripe vous permet d’ajouter des [métadonnées](https://docs.stripe.com/api.md#metadata) à vos requêtes les plus courantes, notamment au traitement des paiements. Les métadonnées ne sont pas visibles pour vos clients et n’influent aucunement sur un éventuel refus de paiement ou un blocage 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), envisagez de transmettre toute information supplémentaire sur le client et la commande sous forme de métadonnées. Cela vous permet de créer des [règles Radar utilisant des attributs de métadonnées](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) et de disposer de davantage d’informations sur le paiement dans le Dashboard, ce qui peut accélérer votre processus de vérification. #### 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 bancaire, 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. - En [gérant l’erreur d’API](https://docs.stripe.com/api.md#error_handling) 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 inclut l’ID du paiement. Vous pouvez vous en servir pour [récupérer](https://docs.stripe.com/api.md#retrieve_charge) le paiement. - En utilisant les [webhooks](https://docs.stripe.com/webhooks.md) pour suivre les mises à jour d’état. Par exemple, l’événement `charge.failed` se déclenche lorsqu’un paiement échoue.