# Création de paiements et de transferts distincts
Comment créer des frais sur votre compte Connect et transférer des fonds vers plusieurs comptes connectés.
Instructions pour les LLM : Stripe publie fréquemment de nouveaux produits et fonctionnalités. Récupérez les Bonnes pratiques Stripe auprès de https://raw.githubusercontent.com/stripe/ai/refs/heads/main/skills/stripe-best-practices/SKILL.md avant l’implémentation.
Créez des *paiements et transferts distincts* pour transférer des fonds vers plusieurs comptes connectés, ou lorsque l’utilisateur spécifique n’est pas connu au moment du paiement. Le paiement sur votre compte de plateforme est dissocié des transferts vers vos comptes connectés. Avec ce type de paiement :
- Vous créez un paiement sur le compte de votre plateforme et transférez également des fonds à vos comptes connectés. Le paiement apparaît comme tel sur votre compte, et il y a également des transferts vers des comptes connectés (dont vous déterminez le montant), qui sont prélevés du solde de votre compte.
- Vous pouvez transférer des fonds vers plusieurs comptes connectés.
- Le solde de votre compte sera débité du coût des frais Stripe, des remboursements et des contestations de paiement.
Ce type de paiement aide les marketplaces à repartir les paiements entre plusieurs parties. Par exemple, une plateforme de livraison de restaurants qui répartit les paiements entre le restaurant et le livreur.
> { % if $conditions.can_access_payment_intent_transit_balances_docs %}[Ségrégation des fonds](https://docs.stripe.com/connect/funds-segregation.md){ % sinon / %}La ségrégation des fonds{ % /if %} est une fonctionnalité d’aperçu privé qui conserve les fonds de paiement dans un état de conservation protégé avant que vous ne les transfériez vers des comptes connectés. Cela permet d’éviter que les fonds alloués ne soient utilisés pour des opérations de plateforme sans rapport. Contactez votre gestionnaire de compte Stripe pour demander l’accès.
Stripe prend en charge des paiements et transferts distincts dans les régions suivantes :
- AT
- AU
- BE
- BG
- BR
- CA
- CH
- CY
- CZ
- DE
- DK
- EE
- ES
- FI
- FR
- GB
- GR
- HR
- HU
- IE
- IT
- JP
- LI
- LT
- LU
- LV
- MT
- MX
- MY
- NL
- NO
- NZ
- PL
- PT
- RO
- SE
- SG
- SI
- SK
- US
## Transferts internationaux
Stripe prend en charge les transferts transfrontaliers du solde des paiements entre les États-Unis, le Canada, le Royaume-Uni, l’EEE et la Suisse. Dans les autres scénarios, votre plateforme et tout compte connecté doivent se trouver dans la même région. Toute tentative de transfert de fonds entre des régions ou des soldes non pris en charge génère une erreur. Consultez la section [Paiements transfrontaliers](https://docs.stripe.com/connect/cross-border-payouts.md) pour connaître les flux de fonds autorisés entre les autres régions.
Vous ne devez utiliser les transferts qu’en association avec les cas d’usage autorisés pour les [frais](https://docs.stripe.com/connect/charges.md), les [recharges](https://docs.stripe.com/connect/top-ups.md) et les [commissions](https://docs.stripe.com/connect/separate-charges-and-transfers.md#collect-fees). Nous vous recommandons de n’effectuer des paiements et transferts distincts que lorsque vous êtes responsable des soldes négatifs de vos comptes connectés.
Redirigez vers une page de paiement hébergée par [Stripe](https://docs.stripe.com/payments/checkout.md) à l’aide de [Stripe Checkout](https://docs.stripe.com/payments/checkout.md). Voyez comment cette intégration [se compare aux autres types d’intégration de Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability).
#### Effort d'intégration
Complexity: 2/5
#### Type d'intégration
Redirection vers la page de paiement hébergée par Stripe
#### Personnalisation de l'interface utilisateur
Personnalisation limitée
- 20 polices prédéfinies
- 3 rayons de bordure prédéfinis
- Couleur d’arrière-plan et de bordure personnalisée
- Logo personnalisé
[Try it out](https://checkout.stripe.dev/)
Tout d’abord, [inscrivez-vous](https://dashboard.stripe.com/register) pour créer un Compte Stripe.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
## Créer une session Checkout [Côté client] [Côté serveur]
Une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md) contrôle ce que le client voit dans le formulaire de paiement, tel que les postes, le montant de la commande, la devise et les moyens de paiement acceptés. Ajoutez à votre site Web un bouton de paiement qui appelle un endpoint côté serveur pour créer une session Checkout.
```html
Checkout
```
Sur votre serveur, créez une session Checkout et redirigez votre client vers l’[URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) renvoyée dans la réponse.
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d "line_items[0][price_data][currency]"=usd \
-d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \
-d "line_items[0][price_data][unit_amount]"=10000 \
-d "line_items[0][quantity]"=1 \
-d "payment_intent_data[transfer_group]"=ORDER100 \
-d mode=payment \
--data-urlencode success_url="https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
```
- `line_items` : cet attribut spécifie les articles achetés par votre client. Ces articles sont affichés dans la page Checkout hébergée par Stripe.
- `payment_intent_data[transfer_group]` : utilisez une chaîne unique comme `transfer_group` pour identifier les objets qui sont associés les uns aux autres. Lorsque Stripe crée automatiquement un paiement pour un PaymentIntent avec une valeur `transfer_group`, la même valeur est affectée au `transfer_group` du paiement.
- `success_url` : Stripe redirige le client vers l’URL de réussite après un paiement réussi et remplace la chaîne `{CHECKOUT_SESSION_ID}` par l’ID de session Checkout. Vous pouvez l’utiliser pour récupérer la session Checkout et inspecter son état afin de choisir ce que vous voulez montrer au client. Vous pouvez également ajouter vos propres paramètres de requête, qui persistent tout au long du processus de redirection. Consultez la page [Personnaliser le comportement de redirection avec une page hébergée par Stripe](https://docs.stripe.com/payments/checkout/custom-success-page.md) pour en savoir plus.
(See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers)
## Gérer les événements post-paiement [Côté serveur]
Stripe envoie un événement [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) à l’issue du paiement. [Utilisez un webhook pour recevoir ces événements](https://docs.stripe.com/webhooks/quickstart.md) et exécuter des actions en conséquence, comme l’envoi d’un e-mail de confirmation de commande à votre client, l’enregistrement de la vente dans une base de données ou le lancement d’un flux de livraison.
Nous vous conseillons d’écouter ces événements plutôt que d’attendre un rappel du client. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Avec certains moyens de paiement, la confirmation du paiement peut par ailleurs prendre entre 2 et 14 jours. Configurer votre intégration de manière à ce qu’elle écoute les événements asynchrones vous permettra d’accepter plusieurs [moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule intégration.
Stripe recommande de gérer tous les événements suivants lors de la collecte de paiements avec Checkout :
| Événement | Description | Étapes suivantes |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Le client a autorisé le paiement en envoyant le formulaire Checkout. | Attendez que le paiement aboutisse ou échoue. |
| [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Le paiement du client a abouti. | Traitez la commande de biens ou de services de votre client. |
| [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Le paiement a été refusé ou a échoué pour une autre raison. | Contactez le client par e-mail et demandez-lui de passer une nouvelle commande. |
Ces événements incluent tous l’objet [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md). Une fois le paiement effectué, le *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) passe de [état](https://docs.stripe.com/payments/paymentintents/lifecycle.md) sous-jacent `processing` à `succeeded` ou à un état d’échec.
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Portefeuilles
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Alipay | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification immédiate](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Prélèvement automatique BECS | Le montant dû est réglé par prélèvement automatique BECS. | Remplissez le formulaire à l’aide du numéro de compte `900123456` et du BSB `000000`.La confirmation de la demande de PaymentIntent passe d’abord à l’état `processing`, puis à l’état `succeeded` trois minutes plus tard. |
| Prélèvement automatique BECS | Le paiement de votre client échoue avec un code d’erreur `account_closed`. | Remplissez le formulaire à l’aide du numéro de compte `111111113` et du BSB `000000`. |
| Bancontact, EPS, iDEAL et Przelewy24 | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
#### Coupons
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Boleto, OXXO | Le montant dû est réglé par coupon Boleto ou OXXO. | Sélectionnez Boleto ou OXXO comme moyen de paiement, puis envoyez le paiement. Fermez la boîte de dialogue qui s’affiche. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d "line_items[0][price_data][currency]"=usd \
-d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \
-d "line_items[0][price_data][unit_amount]"=10000 \
-d "line_items[0][quantity]"=1 \
-d "payment_intent_data[on_behalf_of]"="{{CONNECTEDACCOUNT_ID}}" \
-d "payment_intent_data[transfer_group]"=ORDER100 \
-d mode=payment \
--data-urlencode success_url="https://example.com/success"
```
Intégrez un formulaire de paiement préconfiguré à votre site à l’aide de [Stripe Checkout](https://docs.stripe.com/payments/checkout.md). [Comparez cette intégration aux autres types d’intégration de Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability).
#### Effort d'intégration
Complexity: 2/5
#### Type d'intégration
Intégrer un formulaire de paiement préconfiguré sur votre site
#### Personnalisation de l'interface utilisateur
Personnalisation limitée
- 20 polices prédéfinies
- 3 rayons de bordure prédéfinis
- Couleur d’arrière-plan et de bordure personnalisée
- Logo personnalisé
Tout d’abord, [inscrivez-vous](https://dashboard.stripe.com/register) pour créer un Compte Stripe.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
## Créer une session Checkout [Côté client] [Côté serveur]
Une [session Checkout](https://docs.stripe.com/api/checkout/sessions.md) contrôle ce que votre client voit dans le formulaire de paiement intégrable, tel que les postes, le montant de la commande et la devise. Créez une session Checkout dans un endpoint côté serveur (par exemple, `/create-checkout-session`). La réponse inclut un `client_secret` que vous utiliserez à l’étape suivante pour monter Checkout.
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d "line_items[0][price_data][currency]"=usd \
-d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \
-d "line_items[0][price_data][unit_amount]"=10000 \
-d "line_items[0][quantity]"=1 \
-d "payment_intent_data[transfer_group]"=ORDER100 \
-d mode=payment \
-d ui_mode=embedded \
--data-urlencode return_url="https://example.com/return?session_id={CHECKOUT_SESSION_ID}"
```
- `line_items` : cet attribut spécifie les articles achetés par votre client. Ces articles sont affichés dans le formulaire de paiement intégré.
- `payment_intent_data[transfer_group]` : utilisez une chaîne unique comme `transfer_group` pour identifier les objets qui sont associés les uns aux autres. Lorsque Stripe crée automatiquement un paiement pour un PaymentIntent avec une valeur `transfer_group`, la même valeur est affectée au `transfer_group` du paiement.
- `return_url` : Stripe redirige le client vers l’URL de redirection après qu’une tentative de paiement aboutit et remplace la chaîne `{CHECKOUT_SESSION_ID}` par l’ID de la session Checkout. Servez-vous en pour récupérer la session Checkout et en inspecter l’état afin de décider de ce que vous allez montrer à votre client. Assurez-vous que l’URL de redirection correspond à la page de votre site qui contient l’état du paiement. Vous pouvez également ajouter vos propres paramètres de requête, qui persistent tout au long du processus de redirection. Consultez la page [Personnaliser le comportement de redirection avec un formulaire intégré](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form) pour en savoir plus.
(See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers)
## Monter Checkout [Côté client]
#### HTML + JS
Checkout est disponible dans [Stripe.js](https://docs.stripe.com/js.md). Intégrez le script Stripe.js à votre page en l’ajoutant à l’en-tête de votre fichier HTML. Ensuite, créez un nœud DOM vide (conteneur) à utiliser pour le montage.
```html
```
Initialisez Stripe.js avec votre clé API publiable. Transmettez le `client_secret` de l’étape précédente dans `options` lorsque vous créez l’instance Checkout :
```javascript
// Initialize Stripe.js
const stripe = Stripe('<>');
initialize();
// Fetch Checkout Session and retrieve the client secret
async function initialize() {
const fetchClientSecret = async () => {
const response = await fetch("/create-checkout-session", {
method: "POST",
});
const { clientSecret } = await response.json();
return clientSecret;
};
// Initialize Checkout
const checkout = await stripe.initEmbeddedCheckout({
fetchClientSecret,
});
// Mount Checkout
checkout.mount('#checkout');
}
```
#### React
Installez les bibliothèques Connect.js et React Connect.js à partir du [registre public npm](https://www.npmjs.com/package/@stripe/react-connect-js).
```bash
npm install --save @stripe/connect-js @stripe/react-connect-js
```
Pour utiliser le composant Checkout intégré, créez un `EmbeddedCheckoutProvider`. Appelez `loadStripe` avec votre clé API publiable et transmettez le `Promise` renvoyé au fournisseur. Utilisez la propriété `options` acceptée par le fournisseur pour transmettre le `client_secret` de l’étape précédente.
```jsx
import * as React from 'react';
import {loadStripe} from '@stripe/stripe-js';
import {
EmbeddedCheckoutProvider,
EmbeddedCheckout
} from '@stripe/react-stripe-js';
// Make sure to call `loadStripe` outside of a component’s render to avoid
// recreating the `Stripe` object on every render.
const stripePromise = loadStripe('<>');
const App = ({clientSecret}) => {
const options = {clientSecret};
return (
)
}
```
Checkout est affiché dans un iframe qui envoie les informations de paiement à Stripe de manière sécurisée via une connexion HTTPS. Évitez de déplacer Checkout dans un autre iframe car certains moyens de paiement nécessitent une redirection vers une autre page pour la confirmation du paiement.
## Gérer les événements post-paiement [Côté serveur]
Stripe envoie un événement [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) à l’issue du paiement. [Utilisez un webhook pour recevoir ces événements](https://docs.stripe.com/webhooks/quickstart.md) et exécuter des actions en conséquence, comme l’envoi d’un e-mail de confirmation de commande à votre client, l’enregistrement de la vente dans une base de données ou le lancement d’un flux de livraison.
Nous vous conseillons d’écouter ces événements plutôt que d’attendre un rappel du client. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Avec certains moyens de paiement, la confirmation du paiement peut par ailleurs prendre entre 2 et 14 jours. Configurer votre intégration de manière à ce qu’elle écoute les événements asynchrones vous permettra d’accepter plusieurs [moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule intégration.
Stripe recommande de gérer tous les événements suivants lors de la collecte de paiements avec Checkout :
| Événement | Description | Étapes suivantes |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Le client a autorisé le paiement en envoyant le formulaire Checkout. | Attendez que le paiement aboutisse ou échoue. |
| [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Le paiement du client a abouti. | Traitez la commande de biens ou de services de votre client. |
| [checkout.session.async_payment_failed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) | Le paiement a été refusé ou a échoué pour une autre raison. | Contactez le client par e-mail et demandez-lui de passer une nouvelle commande. |
Ces événements incluent tous l’objet [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md). Une fois le paiement effectué, le *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) passe de [état](https://docs.stripe.com/payments/paymentintents/lifecycle.md) sous-jacent `processing` à `succeeded` ou à un état d’échec.
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Portefeuilles
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Alipay | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification immédiate](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Prélèvement automatique BECS | Le montant dû est réglé par prélèvement automatique BECS. | Remplissez le formulaire à l’aide du numéro de compte `900123456` et du BSB `000000`.La confirmation de la demande de PaymentIntent passe d’abord à l’état `processing`, puis à l’état `succeeded` trois minutes plus tard. |
| Prélèvement automatique BECS | Le paiement de votre client échoue avec un code d’erreur `account_closed`. | Remplissez le formulaire à l’aide du numéro de compte `111111113` et du BSB `000000`. |
| Bancontact, EPS, iDEAL et Przelewy24 | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
#### Coupons
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Boleto, OXXO | Le montant dû est réglé par coupon Boleto ou OXXO. | Sélectionnez Boleto ou OXXO comme moyen de paiement, puis envoyez le paiement. Fermez la boîte de dialogue qui s’affiche. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
-d "line_items[0][price_data][currency]"=usd \
-d "line_items[0][price_data][product_data][name]"="Restaurant delivery service" \
-d "line_items[0][price_data][unit_amount]"=10000 \
-d "line_items[0][quantity]"=1 \
-d "payment_intent_data[on_behalf_of]"="{{CONNECTEDACCOUNT_ID}}" \
-d "payment_intent_data[transfer_group]"=ORDER100 \
-d mode=payment \
-d ui_mode=embedded \
--data-urlencode return_url="https://example.com/return"
```
Créez une intégration de paiement personnalisée en intégrant des composants d’interface utilisateur sur votre site à l’aide de [Stripe Elements](https://docs.stripe.com/payments/elements.md). Le code côté client et côté serveur permet de créer un formulaire de paiement qui accepte différents moyens de paiement. [Comparez les différents types d’intégration proposés par Stripe](https://docs.stripe.com/payments/online-payments.md#compare-features-and-availability).
#### Effort d'intégration
Complexity: 3/5
#### Type d'intégration
Combiner les composants de l’interface utilisateur dans un tunnel de paiement personnalisé
#### Personnalisation de l'interface utilisateur
Personnalisation au niveau CSS avec l’[API Appearance](https://docs.stripe.com/elements/appearance-api.md)
Tout d’abord, [inscrivez-vous](https://dashboard.stripe.com/register) pour créer un Compte Stripe.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
## Créer un PaymentIntent [Côté serveur]
Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus.
Vue d'ensemble de l'intégration des paiements illustrée par ce document. (See full diagram at https://docs.stripe.com/connect/separate-charges-and-transfers)
Les moyens de paiement présentés aux clients lors du processus de paiement sont également inclus dans le PaymentIntent. Vous pouvez laisser Stripe extraire automatiquement les moyens de paiement des paramètres du Dashboard, ou bien les répertorier manuellement.
À moins que votre intégration ne nécessite du code pour la présentation des moyens de paiement, ne listez pas les moyens de paiement manuellement. En effet, Stripe évalue la devise, les restrictions sur les moyens de paiement ainsi que d’autres paramètres pour dresser la liste des moyens de paiement pris en charge. Les moyens de paiement qui augmentent le taux de conversion et qui sont les plus pertinents pour la devise et le lieu de résidence du client sont automatiquement priorisés par Stripe, tandis que ceux de moindre priorité ne sont accessibles que via un menu de débordement.
#### Gérer les moyens de paiement dans le Dashboard
Créez un PaymentIntent sur votre serveur avec un montant, une devise et une valeur `transfer_group` à associer ultérieurement avec le transfert de fonds. Dans la dernière version de l’API, la spécification du paramètre `automatic_payment_methods` est facultative car Stripe active ses fonctionnalités par défaut. Vous pouvez gérer les moyens de paiement à partir du [Dashboard](https://dashboard.stripe.com/settings/payment_methods). Stripe gère le renvoi des moyens de paiement admissibles en fonction de facteurs tels que le montant de la transaction, la devise et le tunnel de paiement.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]"=true \
-d transfer_group=ORDER100
```
#### Répertorier manuellement les moyens de paiement
Créez un PaymentIntent sur votre serveur avec un montant, une devise, une liste des types de moyens de paiement que vous souhaitez proposer et une valeur `transfer_group` à associer au transfert de fonds ultérieurement. Définissez toujours le montant à débiter côté serveur, car contrairement à l’environnement client, il s’agit d’un environnement sécurisé. De cette façon, un client malveillant ne pourra pas fixer son propre tarif.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=eur \
-d "payment_method_types[]"=bancontact \
-d "payment_method_types[]"=card \
-d "payment_method_types[]"=eps \
-d "payment_method_types[]"=ideal \
-d "payment_method_types[]"=p24 \
-d "payment_method_types[]"=sepa_debit \
-d transfer_group=ORDER100
```
Choisissez la devise en fonction des moyens de paiement que vous souhaitez proposer. Certains moyens de paiement prennent en charge plusieurs devises et pays. Cet exemple utilise Bancontact, les cartes bancaires, EPS, iDEAL, Przelewy24 et le prélèvement automatique SEPA.
> Chacun des moyens de paiement doit prendre en charge la devise transmise dans le PaymentIntent et votre activité doit par ailleurs être basée dans l’un des pays pris en charge par chaque moyen de paiement. Veuillez consulter la page consacrée aux [options d’intégration des moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) pour en savoir plus.
### Récupérer la clé secrète du client
Le PaymentIntent contient une *clé secrète* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client.
#### Application monopage
Récupérez la clé secrète du client à partir d’un endpoint sur votre serveur, à l’aide de la fonction `fetch` du navigateur. Cette approche est recommandée si votre côté client est une application d’une seule page, en particulier si elle repose sur un framework front-end moderne tel que React. Créez l’endpoint de serveur qui gère la clé secrète du client :
#### Ruby
```ruby
get '/secret' do
intent = # ... Create or retrieve the PaymentIntent
{client_secret: intent.client_secret}.to_json
end
```
Récupérez ensuite la clé secrète du client à l’aide JavaScript côté client :
```javascript
(async () => {
const response = await fetch('/secret');
const {client_secret: clientSecret} = await response.json();
// Render the form using the clientSecret
})();
```
#### Rendu côté serveur
Transmettez la clé secrète à votre client depuis votre serveur. Cette approche fonctionne mieux si votre application génère du contenu statique sur le serveur avant de l’envoyer sur le navigateur.
Ajoutez le [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) à votre formulaire de paiement. Dans votre code côté serveur, récupérez la clé secrète du client à partir du PaymentIntent :
#### Ruby
```erb
```
```ruby
get '/checkout' do
@intent = # ... Fetch or create the PaymentIntent
erb :checkout
end
```
## Collecter les informations de paiement [Côté client]
Collectez les informations de paiement du client avec le [Payment Element](https://docs.stripe.com/payments/payment-element.md). Le Payment Element est un composant d’interface utilisateur préconfiguré qui simplifie la collecte des informations pour de nombreux moyens de paiement.
Le Payment Element contient un iframe qui envoie les informations de paiement à Stripe de manière sécurisée via une connexion HTTPS. Évitez de placer le Payment Element dans un autre iframe, car certains moyens de paiement nécessitent une redirection vers une autre page pour la confirmation du paiement.
Si vous choisissez d’utiliser un iframe et que vous souhaitez accepter Apple Pay ou Google Pay, l’attribut [allow](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) de l’iframe doit être défini sur égal à `"payment *"`.
Pour que votre intégration fonctionne, l’adresse de la page de paiement doit commencer par `https://` et non par `http://`. Vous pouvez tester votre intégration sans utiliser le protocole HTTPS, mais n’oubliez pas de l’[activer](https://docs.stripe.com/security/guide.md#tls) lorsque vous souhaitez commencer à accepter des paiements réels.
#### HTML + JS
### Configurer Stripe.js
Le composant Element Payment est automatiquement disponible en tant que fonctionnalité de Stripe.js. Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises `head` de votre fichier HTML. Chargez toujours Stripe.js directement à partir de js.stripe.com pour maintenir votre conformité PCI. Vous ne devez pas inclure le script dans une offre groupée ni en héberger de copie.
```html
Checkout
```
Créez une instance de Stripe avec le code JavaScript suivant sur votre page de paiement :
```javascript
// Set your publishable key: remember to change this to your live publishable key in production
// See your keys here: https://dashboard.stripe.com/apikeys
const stripe = Stripe('<>');
```
### Ajouter le Payment Element à votre page de paiement
Le composant Element Payment doit avoir un emplacement dédié dans votre page de paiement. Créez un nœud DOM (conteneur) vide doté d’un ID unique dans votre formulaire de paiement :
```html
```
Lors du chargement du formulaire précédent, créez une instance du composant Payment Element et intégrez-la au nœud DOM conteneur. Lorsque vous créez l’instance [Elements](https://docs.stripe.com/js/elements_object/create), transmettez la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) définie à l’étape précédente dans les `options` :
Utilisez la clé secrète du client avec prudence, car elle peut servir à finaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne la dévoilez à personne d’autre que votre client.
```javascript
const options = {
clientSecret: '{{CLIENT_SECRET}}',
// Fully customizable with appearance API.
appearance: {/*...*/},
};
// Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options);
// Create and mount the Payment Element
const paymentElementOptions = { layout: 'accordion'};
const paymentElement = elements.create('payment', paymentElementOptions);
paymentElement.mount('#payment-element');
```
#### React
### Configurer Stripe.js
Installez [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) et le [chargeur Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) à partir du registre public npm :
```bash
npm install --save @stripe/react-stripe-js @stripe/stripe-js
```
### Ajouter le fournisseur Elements à votre page de paiement et le configurer
Pour utiliser le composant Payment Element, enveloppez votre composant de page de paiement dans un [fournisseur Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Appelez `loadStripe` avec votre clé publique, puis transmettez au fournisseur `Elements` l’élément `Promise` renvoyé. Transmettez également la [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) de l’étape précédente en tant que `options`, toujours au fournisseur `Elements`.
```jsx
import React from 'react';
import ReactDOM from 'react-dom';
import {Elements} from '@stripe/react-stripe-js';
import {loadStripe} from '@stripe/stripe-js';
import CheckoutForm from './CheckoutForm';
// Make sure to call `loadStripe` outside of a component’s render to avoid
// recreating the `Stripe` object on every render.
const stripePromise = loadStripe('<>');
function App() {
const options = {
// passing the client secret obtained in step 3
clientSecret: '{{CLIENT_SECRET}}',
// Fully customizable with appearance API.
appearance: {/*...*/},
};
return (
);
};
ReactDOM.render(, document.getElementById('root'));
```
### Ajouter le composant Element Payment
Utilisez le composant `PaymentElement` pour créer votre formulaire :
```jsx
import React from 'react';
import {PaymentElement} from '@stripe/react-stripe-js';
const CheckoutForm = () => {
return (
);
};
export default CheckoutForm;
```
Stripe Elements est un ensemble de composants d’interface utilisateur modulables. Pour personnaliser davantage votre formulaire ou collecter d’autres informations client, consultez la [documentation relative à Elements](https://docs.stripe.com/payments/elements.md).
Le composant Payment Element affiche un formulaire dynamique qui permet à votre client de choisir un moyen de paiement. Pour chaque moyen de paiement, le formulaire demande automatiquement au client de renseigner toutes les informations de paiement nécessaires.
### Personnaliser l’apparence
Personnalisez le Payment Element pour qu’il corresponde à l’apparence de votre site en ajoutant l’[objet Appearance](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-appearance) dans `options` lors de la création du fournisseur `Elements`.
### Collecter les adresses
Par défaut, le Payment Element ne collecte que les informations nécessaires à la facturation. Certaines opérations, telles que le [calcul des taxes](https://docs.stripe.com/api/tax/calculations/create.md) ou la saisie des informations de livraison, nécessitent l’adresse complète de votre client. Vous pouvez :
- Utilisez l’[Address Element](https://docs.stripe.com/elements/address-element.md) pour tirer parti des fonctionnalités de saisie automatique et de localisation et recueillir l’adresse complète de votre client. Cela permet de garantir un calcul des taxes le plus précis possible.
- Recueillez l’adresse à l’aide de votre propre formulaire personnalisé.
### Demander un token de marchand Apple Pay
Si vous avez configuré votre intégration pour [accepter les paiements Apple Pay](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=elements&api-integration=checkout), nous vous recommandons de configurer l’interface Apple Pay afin de renvoyer un token de marchand pour activer les transactions initiées par le marchand (MIT). [Demandez le type de token de marchand approprié](https://docs.stripe.com/apple-pay/merchant-tokens.md?pay-element=web-pe) dans le composant Payment Element.
## Envoyer le paiement à Stripe [Côté client]
Utilisez [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) pour effectuer le paiement à l’aide des informations du composant Payment Element. Ajoutez un paramètre [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) à cette fonction pour indiquer la page vers laquelle Stripe doit rediriger l’utilisateur à l’issue du paiement. Votre utilisateur peut être redirigé en premier lieu vers un site intermédiaire, comme une page d’autorisation bancaire, avant d’être redirigé vers la page spécifiée par le paramètre `return_url`. L’utilisateur sera immédiatement redirigé vers la page `return_url` après un paiement réussi par carte.
Si vous ne souhaitez pas effectuer de redirection à la fin des paiements par carte, vous pouvez assigner au paramètre [redirect](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) la valeur `if_required`. De cette manière, seuls les clients qui choisissent un moyen de paiement avec redirection seront redirigés.
#### HTML + JS
```javascript
const form = document.getElementById('payment-form');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const {error} = await stripe.confirmPayment({
//`Elements` instance that was used to create the Payment Element
elements,
confirmParams: {
return_url: 'https://example.com/order/123/complete',
},
});
if (error) {
// This point will only be reached if there is an immediate error when
// confirming the payment. Show error to your customer (for example, payment
// details incomplete)
const messageContainer = document.querySelector('#error-message');
messageContainer.textContent = error.message;
} else {
// Your customer will be redirected to your `return_url`. For some payment
// methods like iDEAL, your customer will be redirected to an intermediate
// site first to authorize the payment, then redirected to the `return_url`.
}
});
```
#### React
Pour appeler [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) depuis votre composant de formulaire de paiement, utilisez les hooks [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) et [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook).
Si vous préférez les composants de classe traditionnels aux hooks, vous pouvez utiliser un [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer).
```jsx
import React, {useState} from 'react';
import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js';
const CheckoutForm = () => {
const stripe = useStripe();
const elements = useElements();
const [errorMessage, setErrorMessage] = useState(null);
const handleSubmit = async (event) => {
// We don't want to let default form submission happen here,
// which would refresh the page.
event.preventDefault();
if (!stripe || !elements) {
// Stripe.js hasn't yet loaded.
// Make sure to disable form submission until Stripe.js has loaded.
return;
}
const {error} = await stripe.confirmPayment({
//`Elements` instance that was used to create the Payment Element
elements,
confirmParams: {
return_url: 'https://example.com/order/123/complete',
},
});
if (error) {
// This point will only be reached if there is an immediate error when
// confirming the payment. Show error to your customer (for example, payment
// details incomplete)
setErrorMessage(error.message);
} else {
// Your customer will be redirected to your `return_url`. For some payment
// methods like iDEAL, your customer will be redirected to an intermediate
// site first to authorize the payment, then redirected to the `return_url`.
}
};
return (
);
};
export default CheckoutForm;
```
Veillez à ce que le paramètre `return_url` corresponde à une page de votre site web qui indique l’état du paiement. Lorsque Stripe redirige le client vers la page `return_url`, nous fournissons les paramètres de requête d’URL suivants :
| Paramètre | Description |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `payment_intent` | L’identifiant unique du `PaymentIntent`. |
| `payment_intent_client_secret` | La [clé secrète du client](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) de l’objet `PaymentIntent`. |
> Si vous disposez d’outils qui assurent le suivi de la session navigateur du client, vous devrez peut-être ajouter le domaine `stripe.com` à la liste d’exclusion des sites référents. Les redirections font que certains outils créent de nouvelles sessions, ce qui empêche le suivi de la session dans son ensemble.
Utilisez l’un des paramètres de requête pour récupérer le PaymentIntent. Consultez l’[état du PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md) pour déterminer les informations à présenter à vos clients. Vous pouvez également ajouter vos propres paramètres de requête lorsque vous ajoutez l’URL `return_url` ; ils seront conservés tout au long du processus de redirection.
#### HTML + JS
```javascript
// Initialize Stripe.js using your publishable key
const stripe = Stripe('<>');
// Retrieve the "payment_intent_client_secret" query parameter appended to
// your return_url by Stripe.js
const clientSecret = new URLSearchParams(window.location.search).get(
'payment_intent_client_secret'
);
// Retrieve the PaymentIntent
stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => {
const message = document.querySelector('#message')
// Inspect the PaymentIntent `status` to indicate the status of the payment
// to your customer.
//
// Some payment methods will [immediately succeed or fail][0] upon
// confirmation, while others will first enter a `processing` state.
//
// [0]: https://stripe.com/docs/payments/payment-methods#payment-notification
switch (paymentIntent.status) {
case 'succeeded':
message.innerText = 'Success! Payment received.';
break;
case 'processing':
message.innerText = "Payment processing. We'll update you when payment is received.";
break;
case 'requires_payment_method':
message.innerText = 'Payment failed. Please try another payment method.';
// Redirect your user back to your payment page to attempt collecting
// payment again
break;
default:
message.innerText = 'Something went wrong.';
break;
}
});
```
#### React
```jsx
import React, {useState, useEffect} from 'react';
import {useStripe} from '@stripe/react-stripe-js';
const PaymentStatus = () => {
const stripe = useStripe();
const [message, setMessage] = useState(null);
useEffect(() => {
if (!stripe) {
return;
}
// Retrieve the "payment_intent_client_secret" query parameter appended to
// your return_url by Stripe.js
const clientSecret = new URLSearchParams(window.location.search).get(
'payment_intent_client_secret'
);
// Retrieve the PaymentIntent
stripe
.retrievePaymentIntent(clientSecret)
.then(({paymentIntent}) => {
// Inspect the PaymentIntent `status` to indicate the status of the payment
// to your customer.
//
// Some payment methods will [immediately succeed or fail][0] upon
// confirmation, while others will first enter a `processing` state.
//
// [0]: https://stripe.com/docs/payments/payment-methods#payment-notification
switch (paymentIntent.status) {
case 'succeeded':
setMessage('Success! Payment received.');
break;
case 'processing':
setMessage("Payment processing. We'll update you when payment is received.");
break;
case 'requires_payment_method':
// Redirect your user back to your payment page to attempt collecting
// payment again
setMessage('Payment failed. Please try another payment method.');
break;
default:
setMessage('Something went wrong.');
break;
}
});
}, [stripe]);
return message;
};
export default PaymentStatus;
```
## Gérer les événements post-paiement [Côté serveur]
Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. Utilisez l’[outil de webhook du Dashboard](https://dashboard.stripe.com/webhooks) ou suivez le [guide consacré aux webhooks](https://docs.stripe.com/webhooks/quickstart.md) pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.
Plutôt que d’attendre un rappel de votre client, écoutez ces événements. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Certains clients malintentionnés peuvent d’autre part tenter de manipuler la réponse. En configurant votre intégration de manière à ce qu’elle écoute les événements asynchrones, vous pourrez accepter [plusieurs types de moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule et même intégration.
En plus de l’événement `payment_intent.succeeded`, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :
| Événement | Description | Action |
| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et *traitez* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) sa commande. |
| [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Envoyé lorsqu’un client initie un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client initie un prélèvement bancaire. Il est suivi par un événement `payment_intent.succeeded` ou `payment_intent.payment_failed`. | Envoyez au client une confirmation de commande qui indique que son paiement est en attente. Pour des marchandises dématérialisées, vous pourrez traiter la commande sans attendre que le paiement soit effectué. |
| [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état `processing` à `payment_failed`, proposez au client de retenter le paiement. |
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Portefeuilles
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Alipay | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification immédiate](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Prélèvement automatique BECS | Le montant dû est réglé par prélèvement automatique BECS. | Remplissez le formulaire à l’aide du numéro de compte `900123456` et du BSB `000000`.La confirmation de la demande de PaymentIntent passe d’abord à l’état `processing`, puis à l’état `succeeded` trois minutes plus tard. |
| Prélèvement automatique BECS | Le paiement de votre client échoue avec un code d’erreur `account_closed`. | Remplissez le formulaire à l’aide du numéro de compte `111111113` et du BSB `000000`. |
| Bancontact, EPS, iDEAL et Przelewy24 | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
#### Coupons
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Boleto, OXXO | Le montant dû est réglé par coupon Boleto ou OXXO. | Sélectionnez Boleto ou OXXO comme moyen de paiement, puis envoyez le paiement. Fermez la boîte de dialogue qui s’affiche. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]"=true \
-d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```

Intégrez l’interface utilisateur de paiement préconfigurée de Stripe au processus de paiement de votre application iOS grâce à la classe [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html). Consultez notre exemple d’intégration [sur GitHub](https://github.com/stripe/stripe-ios/tree/master/Example/PaymentSheet%20Example).
## Configurer Stripe [Côté serveur] [Côté client]
Pour commencer, vous devez créer un compte Stripe. [S’inscrire](https://dashboard.stripe.com/register).
### Côté serveur
Cette intégration nécessite des endpoints sur votre serveur qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
### Côté client
Le [SDK iOS de Stripe](https://github.com/stripe/stripe-ios) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-ios/index.html). Il est également compatible avec les applications prenant en charge iOS 13 et les versions ultérieures.
#### Swift Package Manager
Pour installer le SDK, veuillez suivre les étapes ci-dessous :
1. Dans Xcode, sélectionnez **File** > **Add Package Dependencies…** puis saisissez `https://github.com/stripe/stripe-ios-spm` en tant qu’URL du référentiel.
1. Sélectionnez le dernier numéro de version, visible sur notre [page des versions](https://github.com/stripe/stripe-ios/releases).
1. Ajoutez le produit **StripePaymentSheet** à la [cible de votre application](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app).
#### CocoaPods
1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [CocoaPods](https://guides.cocoapods.org/using/getting-started.html).
1. Si vous n’avez pas de fichier [Podfile](https://guides.cocoapods.org/syntax/podfile.html), exécutez la commande suivante pour en créer un :
```bash
pod init
```
1. Ajoutez cette ligne à votre `Podfile` :
```podfile
pod 'StripePaymentSheet'
```
1. Exécutez la commande suivante :
```bash
pod install
```
1. À partir de maintenant, n’oubliez pas d’utiliser le fichier .xcworkspace au lieu du fichier .xcodeproj pour ouvrir votre projet dans Xcode.
1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, il vous suffit d’exécuter :
```bash
pod update StripePaymentSheet
```
#### Carthage
1. Si vous ne l’avez pas encore fait, installez la version la plus récente de [Carthage](https://github.com/Carthage/Carthage#installing-carthage).
1. Ajoutez cette ligne à votre `Cartfile` :
```cartfile
github "stripe/stripe-ios"
```
1. Suivez les [instructions d’installation de Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Veillez à intégrer tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripePaymentSheet/README.md#manual-linking).
1. Pour mettre à jour ultérieurement le SDK vers la version la plus récente, exécutez la commande suivante :
```bash
carthage update stripe-ios --platform ios
```
#### Cadre manuel
1. Accédez à notre [page des versions GitHub](https://github.com/stripe/stripe-ios/releases/latest), puis téléchargez et décompressez **Stripe.xcframework.zip**.
1. Faites glisser **StripePaymentSheet.xcframework** vers la section **Embedded Binaries (Fichiers binaires incorporés)** des paramètres **General (Général)** de votre projet Xcode. Veillez à sélectionner **Copy items if needed (Copier les éléments si nécessaire)**.
1. Répétez l’étape 2 pour tous les cadres requis listés [ici](https://github.com/stripe/stripe-ios/tree/master/StripePaymentSheet/README.md#manual-linking).
1. À l’avenir, pour mettre à jour vers la version la plus récente de notre SDK, répétez les étapes 1 à 3.
> Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-ios/releases) sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, [surveillez les versions](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) à partir du référentiel.
Configurez le SDK avec votre [clé publiable](https://dashboard.stripe.com/test/apikeys) Stripe au démarrage de votre application. Cela lui permet d’envoyer des requêtes à l’API Stripe.
#### Swift
```swift
import UIKitimportStripePaymentSheet
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>"
// do any other necessary launch configuration
return true
}
}
```
> Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) lors de vos activités de test et de développement et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application.
## Ajouter un endpoint [Côté serveur]
Cette intégration utilise trois objets de l’API Stripe :
1. Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus.
1. Un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) (facultatif). Pour configurer un moyen de paiement en vue de paiements futurs, vous devez l’associer à un client. Créez un objet Customer lorsque votre client crée un compte chez vous. Si votre client effectue un paiement en tant qu’invité, vous pouvez créer un objet Customer avant le paiement, puis l’associer ultérieurement à votre représentation interne du compte client.
1. Un objet Customer Ephemeral Key (facultatif). L’objet Customer contient des informations sensibles qu’il n’est pas possible de récupérer directement depuis une application. Une clé éphémère permet d’accorder au SDK un accès temporaire à l’objet Customer.
Si vous souhaitez enregistrer des cartes et autoriser vos clients réguliers à réutiliser les cartes enregistrées, vous avez besoin des objets Customer et Customer Ephemeral Key pour votre intégration. Sinon, vous pouvez ignorer ces objets.
Pour des raisons de sécurité, votre application ne peut pas créer ces objets. À la place, ajoutez sur votre serveur un endpoint qui :
1. Récupère l’objet Customer ou en crée un nouveau.
1. Crée une clé éphémère pour le client.
1. Crée un objet PaymentIntent, en précisant le [montant](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), la [devise](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), le [client](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer), ainsi qu’un [groupe de transfert](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group) à associer ultérieurement au transfert de fonds.
1. Renvoie la *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) du composant Payment Intent, le `secret` de la clé éphémère, l’[ID du client](https://docs.stripe.com/api/customers/object.md#customer_object-id) et votre [clé publiable](https://dashboard.stripe.com/apikeys) à votre application.
Les moyens de paiement présentés aux clients lors du processus de paiement sont également inclus dans le PaymentIntent. Vous pouvez laisser Stripe extraire les moyens de paiement des [paramètres du Dashboard](https://dashboard.stripe.com/settings/payment_methods), ou bien les répertorier manuellement.
À moins que votre intégration ne nécessite du code pour la présentation des moyens de paiement, ne listez pas les moyens de paiement manuellement. En effet, Stripe évalue la devise, les restrictions sur les moyens de paiement ainsi que d’autres paramètres pour dresser la liste des moyens de paiement pris en charge. Les moyens de paiement qui augmentent le taux de conversion et qui sont les plus pertinents pour la devise et le lieu de résidence du client sont automatiquement priorisés par Stripe. Ceux de moindre priorité ne sont accessibles que via un menu de débordement.
#### Gérer les moyens de paiement dans le Dashboard
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="usd" \
# In the latest version of the API, specifying the `automatic_payment_methods` parameter
# is optional because Stripe enables its functionality by default.
-d "automatic_payment_methods[enabled]"=true \
-d transfer_group="ORDER100" \
```
#### Répertorier manuellement les moyens de paiement
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="eur" \
-d "payment_method_types[]"="bancontact" \
-d "payment_method_types[]"="card" \
-d "payment_method_types[]"="ideal" \
-d "payment_method_types[]"="klarna" \
-d "payment_method_types[]"="sepa_debit" \
-d transfer_group="ORDER100" \
```
Chacun des moyens de paiement doit prendre en charge la devise transmise dans le PaymentIntent et votre activité doit par ailleurs être basée dans l’un des pays pris en charge par chaque moyen de paiement. Veuillez consulter la page consacrée aux [options d’intégration des moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) pour en savoir plus.
## Intégrer la fiche de paiement [Côté client]
Pour afficher le composant Payment Element sur votre page de paiement, veillez à :
- Afficher les produits commandés et le montant total des achats
- Utiliser le composant [Address Element](https://docs.stripe.com/elements/address-element.md?platform=ios) pour collecter toutes les informations de livraison requises auprès du client
- Ajouter un bouton de paiement pour afficher l’interface utilisateur de Stripe
#### UIKit
Dans l’écran paiement de votre application, récupérez l’Paymentintention de la clé secrète du client, la CustomerSession de la clé secrète du client, l’ID du client et la clé publiable à partir de l’endpoint que vous avez créé à l’étape précédente. Utilisez `STPAPIClient.shared` pour définir votre clé publiable et initialiser la [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html).
#### iOS (Swift)
```swift
import UIKit@_spi(CustomerSessionBetaAccess) import StripePaymentSheet
class CheckoutViewController: UIViewController {
@IBOutlet weak var checkoutButton: UIButton!
var paymentSheet: PaymentSheet?
let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint
override func viewDidLoad() {
super.viewDidLoad()
checkoutButton.addTarget(self, action: #selector(didTapCheckoutButton), for: .touchUpInside)
checkoutButton.isEnabled = false
// MARK: Fetch the PaymentIntent client secret, CustomerSession client secret, Customer ID, and publishable key
var request = URLRequest(url: backendCheckoutUrl)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
guard let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
let customerId = json["customer"] as? String,
let customerSessionClientSecret = json["customerSessionClientSecret"] as? String,
let paymentIntentClientSecret = json["paymentIntent"] as? String,
let publishableKey = json["publishableKey"] as? String,
let self = self else {
// Handle error
return
}
STPAPIClient.shared.publishableKey = publishableKey// MARK: Create a PaymentSheet instance
var configuration = PaymentSheet.Configuration()
configuration.merchantDisplayName = "Example, Inc."
configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret)
// Set `allowsDelayedPaymentMethods` to true if your business handles
// delayed notification payment methods like US bank accounts.
configuration.allowsDelayedPaymentMethods = true
self.paymentSheet = PaymentSheet(paymentIntentClientSecret:paymentIntentClientSecret, configuration: configuration)
DispatchQueue.main.async {
self.checkoutButton.isEnabled = true
}
})
task.resume()
}
}
```
Quand le client appuie sur le bouton de **paiement**, appelez `present` pour afficher la PaymentSheet. Une fois la transaction effectuée, Stripe ferme le PaymentSheet et appelle le bloc de finalisation avec un [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html).
#### iOS (Swift)
```swift
@objc
func didTapCheckoutButton() {
// MARK: Start the checkout process
paymentSheet?.present(from: self) { paymentResult in
// MARK: Handle the payment result
switch paymentResult {
case .completed:
print("Your order is confirmed")
case .canceled:
print("Canceled!")
case .failed(let error):
print("Payment failed: \(error)")
}
}
}
```
#### SwiftUI
Créez un modèle `ObservableObject` pour votre écran de paiement. Ce modèle publie un [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html) et un [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html).
```swift
import StripePaymentSheet
import SwiftUI
class CheckoutViewModel: ObservableObject {
let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint
@Published var paymentSheet: PaymentSheet?
@Published var paymentResult: PaymentSheetResult?
}
```
Récupérez l’Paymentintention de la clé secrète du client, la CustomerSession de la clé secrète du client, l’ID du client et la clé publiable à partir de l’endpoint que vous avez créé à l’étape précédente. Utilisez `STPAPIClient.shared` pour définir votre clé publiable et initialiser la [PaymentSheet](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet.html).
```swift
@_spi(CustomerSessionBetaAccess) import StripePaymentSheet
import SwiftUI
class CheckoutViewModel: ObservableObject {
let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint
@Published var paymentSheet: PaymentSheet?
@Published var paymentResult: PaymentSheetResult?
func preparePaymentSheet() {
// MARK: Fetch thePaymentIntent and Customer information from the backend
var request = URLRequest(url: backendCheckoutUrl)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
guard let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
let customerId = json["customer"] as? String,
let customerSessionClientSecret = json["customerSessionClientSecret"] as? String,
letpaymentIntentClientSecret = json["paymentIntent"] as? String,
let publishableKey = json["publishableKey"] as? String,
let self = self else {
// Handle error
return
}
STPAPIClient.shared.publishableKey = publishableKey// MARK: Create a PaymentSheet instance
var configuration = PaymentSheet.Configuration()
configuration.merchantDisplayName = "Example, Inc."
configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret)
// Set `allowsDelayedPaymentMethods` to true if your business handles
// delayed notification payment methods like US bank accounts.
configuration.allowsDelayedPaymentMethods = true
DispatchQueue.main.async {
self.paymentSheet = PaymentSheet(paymentIntentClientSecret:paymentIntentClientSecret, configuration: configuration)
}
})
task.resume()
}
}
struct CheckoutView: View {
@ObservedObject var model = CheckoutViewModel()
var body: some View {
VStack {
if model.paymentSheet != nil {
Text("Ready to pay.")
} else {
Text("Loading…")
}
}.onAppear { model.preparePaymentSheet() }
}
}
```
Ajoutez un [PaymentSheet.PaymentButton](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/PaymentButton.html) à votre `View`. Il présente un comportement similaire à un `Button` SwiftUI, ce qui vous permet de le personnaliser en ajoutant une `View`. Lorsque vous appuyez sur le bouton, la PaymentSheet s’affiche. Une fois la transaction finalisée, Stripe ferme la PaymentSheet et appelle le gestionnaire `onCompletion` avec un objet [PaymentSheetResult](https://stripe.dev/stripe-ios/stripe-paymentsheet/Enums/PaymentSheetResult.html).
```swift
@_spi(CustomerSessionBetaAccess) import StripePaymentSheet
import SwiftUI
class CheckoutViewModel: ObservableObject {
let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint
@Published var paymentSheet: PaymentSheet?
@Published var paymentResult: PaymentSheetResult?
func preparePaymentSheet() {
// MARK: Fetch the PaymentIntent and Customer information from the backend
var request = URLRequest(url: backendCheckoutUrl)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in
guard let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any],
let customerId = json["customer"] as? String,
let customerSessionClientSecret = json["customerSessionClientSecret"] as? String,
let paymentIntentClientSecret = json["paymentIntent"] as? String,
let publishableKey = json["publishableKey"] as? String,
let self = self else {
// Handle error
return
}
STPAPIClient.shared.publishableKey = publishableKey
// MARK: Create a PaymentSheet instance
var configuration = PaymentSheet.Configuration()
configuration.merchantDisplayName = "Example, Inc."
configuration.customer = .init(id: customerId, customerSessionClientSecret: customerSessionClientSecret)
// Set `allowsDelayedPaymentMethods` to true if your business can handle payment methods
// that complete payment after a delay, like SEPA Debit and Sofort.
configuration.allowsDelayedPaymentMethods = true
DispatchQueue.main.async {
self.paymentSheet = PaymentSheet(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration)
}
})
task.resume()
}
func onPaymentCompletion(result: PaymentSheetResult) {
self.paymentResult = result
}
}
struct CheckoutView: View {
@ObservedObject var model = CheckoutViewModel()
var body: some View {
VStack {if let paymentSheet = model.paymentSheet {
PaymentSheet.PaymentButton(
paymentSheet: paymentSheet,
onCompletion: model.onPaymentCompletion
) {
Text("Buy")
}
} else {
Text("Loading…")
}if let result = model.paymentResult {
switch result {
case .completed:
Text("Payment complete")
case .failed(let error):
Text("Payment failed: \(error.localizedDescription)")
case .canceled:
Text("Payment canceled.")
}
}
}.onAppear { model.preparePaymentSheet() }
}
}
```
Si la valeur de `PaymentSheetResult` est `.completed`, informez l’utilisateur (par exemple, en affichant un écran de confirmation de commande).
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Configurer une URL de redirection [Côté client]
Le client peut quitter votre application pour s’authentifier (par exemple, dans Safari ou dans son application bancaire). Pour lui permettre de revenir automatiquement sur votre application après s’être authentifié, [configurez un schéma d’URL personnalisé](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) et configurez votre délégué d’application pour qu’il transmette l’URL au SDK. Stripe ne prend pas en charge les [liens universels](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content).
#### SceneDelegate
#### Swift
```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
guard let url = URLContexts.first?.url else {
return
}
let stripeHandled = StripeAPI.handleURLCallback(with: url)
if (!stripeHandled) {
// This was not a Stripe url – handle the URL normally as you would
}
}
```
#### AppDelegate
#### Swift
```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
let stripeHandled = StripeAPI.handleURLCallback(with: url)
if (stripeHandled) {
return true
} else {
// This was not a Stripe url – handle the URL normally as you would
}
return false
}
```
#### SwiftUI
#### Swift
```swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Text("Hello, world!").onOpenURL { incomingURL in
let stripeHandled = StripeAPI.handleURLCallback(with: incomingURL)
if (!stripeHandled) {
// This was not a Stripe url – handle the URL normally as you would
}
}
}
}
}
```
## Gérer les événements post-paiement [Côté serveur]
Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. Utilisez l’[outil de webhook du Dashboard](https://dashboard.stripe.com/webhooks) ou suivez le [guide consacré aux webhooks](https://docs.stripe.com/webhooks/quickstart.md) pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.
Plutôt que d’attendre un rappel de votre client, écoutez ces événements. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Certains clients malintentionnés peuvent d’autre part tenter de manipuler la réponse. En configurant votre intégration de manière à ce qu’elle écoute les événements asynchrones, vous pourrez accepter [plusieurs types de moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule et même intégration.
En plus de l’événement `payment_intent.succeeded`, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :
| Événement | Description | Action |
| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et *traitez* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) sa commande. |
| [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Envoyé lorsqu’un client initie un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client initie un prélèvement bancaire. Il est suivi par un événement `payment_intent.succeeded` ou `payment_intent.payment_failed`. | Envoyez au client une confirmation de commande qui indique que son paiement est en attente. Pour des marchandises dématérialisées, vous pourrez traiter la commande sans attendre que le paiement soit effectué. |
| [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état `processing` à `payment_failed`, proposez au client de retenter le paiement. |
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bancontact, iDEAL | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Activer la numérisation de carte
Pour activer la numérisation des cartes pour iOS, définissez le paramètre `NSCameraUsageDescription` (**Confidentialité – Description de l’utilisation de l’appareil photo**) dans le fichier `Info.plist` de votre application et indiquez le motif d’accès à l’appareil photo (« pour numériser des cartes », par exemple).
## Optional: Activer Apple Pay
> Si votre écran de contrôle dispose d’un **bouton Apple Pay** dédié, suivez le [guide Apple Pay](https://docs.stripe.com/apple-pay.md#present-payment-sheet) et utilisez `ApplePayContext` pour encaisser des paiements à partir de votre bouton Apple Pay. Vous pouvez utiliser `PaymentSheet` pour gérer d’autres moyens de paiement.
### Demander un ID de marchand Apple
Pour obtenir un ID de marchand Apple, [demandez un nouvel identifiant](https://developer.apple.com/account/resources/identifiers/add/merchant) sur le site Web Apple Developer.
Renseignez le formulaire en indiquant une description et un identifiant. La description n’est destinée qu’à votre propre information et vous pourrez la modifier ultérieurement au besoin. En ce qui concerne l’identifiant, Stripe vous recommande d’utiliser le nom de votre application (par exemple, `merchant.com.{{YOUR_APP_NAME}}`).
### Créer un nouveau certificat Apple Pay
Créez un certificat permettant à votre application de chiffrer les données de paiement.
Accédez aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard, cliquez sur **Ajouter une nouvelle application** et suivez le guide.
Téléchargez un fichier CSR (Certificate Signing Request) pour obtenir d’Apple un certificat sécurisé vous autorisant à utiliser Apple Pay.
Un fichier CSR peut émettre exactement un certificat. Si vous changez d’ID de marchand Apple, vous devez accéder aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard pour obtenir un nouveau fichier CSR et un nouveau certificat.
### Réaliser une intégration avec Xcode
Ajoutez la fonctionnalité Apple Pay à votre application. Dans Xcode, ouvrez vos paramètres de projet, cliquez sur l’onglet **Signature et fonctionnalités**, puis ajoutez **Apple Pay**. Vous serez peut-être alors invité(e) à vous connecter à votre compte développeur. Sélectionnez l’ID du marchand créé plus tôt. Il est désormais possible d’utiliser Apple Pay sur votre application.

Activez la fonctionnalité Apple Pay dans Xcode
### Ajouter Apple Pay
#### Paiement ponctuel
Pour ajouter Apple Pay à PaymentSheet, définissez [applePay](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp) après avoir initialisé `PaymentSheet.Configuration` avec votre ID de marchand Apple et le [code pays de votre entreprise](https://dashboard.stripe.com/settings/account).
#### iOS (Swift)
```swift
var configuration = PaymentSheet.Configuration()
configuration.applePay = .init(
merchantId: "merchant.com.your_app_name",
merchantCountryCode: "US"
)
```
#### Paiements récurrents
Pour ajouter Apple Pay à PaymentSheet, définissez [applePay](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV8applePayAC05ApplefD0VSgvp) après avoir initialisé `PaymentSheet.Configuration` avec votre ID de marchand Apple et le [code pays de votre entreprise](https://dashboard.stripe.com/settings/account).
Conformément aux [directives d’Apple](https://developer.apple.com/design/human-interface-guidelines/apple-pay#Supporting-subscriptions) pour les paiements récurrents, vous devez également définir des attributs supplémentaires sur la `PKPaymentRequest`. Ajoutez un gestionnaire dans [ApplePayConfiguration.paymentRequestHandlers](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/applepayconfiguration/handlers/paymentrequesthandler) pour configurer les [PKPaymentRequest.paymentSummaryItems](https://developer.apple.com/documentation/passkit/pkpaymentrequest/1619231-paymentsummaryitems) avec le montant que vous avez l’intention de facturer (par exemple, 9,95 USD par mois).
Vous pouvez également adopter des [tokens de marchand](https://developer.apple.com/apple-pay/merchant-tokens/) en définissant les propriétés `recurringPaymentRequest` ou `automaticReloadPaymentRequest` dans `PKPaymentRequest`.
Pour en savoir plus sur l’utilisation des paiements récurrents avec Apple Pay, consultez la [documentation PassKit d’Apple](https://developer.apple.com/documentation/passkit/pkpaymentrequest).
#### iOS (Swift)
```swift
let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers(
paymentRequestHandler: { request in
// PKRecurringPaymentSummaryItem is available on iOS 15 or later
if #available(iOS 15.0, *) {
let billing = PKRecurringPaymentSummaryItem(label: "My Subscription", amount: NSDecimalNumber(string: "59.99"))
// Payment starts today
billing.startDate = Date()
// Payment ends in one year
billing.endDate = Date().addingTimeInterval(60 * 60 * 24 * 365)
// Pay once a month.
billing.intervalUnit = .month
billing.intervalCount = 1
// recurringPaymentRequest is only available on iOS 16 or later
if #available(iOS 16.0, *) {
request.recurringPaymentRequest = PKRecurringPaymentRequest(paymentDescription: "Recurring",
regularBilling: billing,
managementURL: URL(string: "https://my-backend.example.com/customer-portal")!)
request.recurringPaymentRequest?.billingAgreement = "You'll be billed $59.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'"
}
request.paymentSummaryItems = [billing]
request.currencyCode = "USD"
} else {
// On older iOS versions, set alternative summary items.
request.paymentSummaryItems = [PKPaymentSummaryItem(label: "Monthly plan starting July 1, 2022", amount: NSDecimalNumber(string: "59.99"), type: .final)]
}
return request
}
)
var configuration = PaymentSheet.Configuration()
configuration.applePay = .init(merchantId: "merchant.com.your_app_name",
merchantCountryCode: "US",
customHandlers: customHandlers)
```
### Suivi de commande
Pour ajouter des informations de [suivi de commande](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) dans iOS 16 ou version ultérieure, configurez un [authorizationResultHandler](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/applepayconfiguration/handlers/authorizationresulthandler) dans votre `PaymentSheet.ApplePayConfiguration.Handlers`. Stripe effectue un appel vers votre implémentation une fois le paiement effectué, mais avant qu’iOS ne ferme la fiche Apple Pay.
Dans votre déploiement `authorizationResultHandler`, récupérez les détails de la commande finalisée sur votre serveur. Ajoutez ces informations au [PKPaymentAuthorizationResult](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationresult) spécifié, et renvoyez le résultat modifié.
Pour en savoir plus sur le suivi des commandes, consultez la [documentation Apple’s Wallet Orders](https://developer.apple.com/documentation/walletorders).
#### iOS (Swift)
```swift
let customHandlers = PaymentSheet.ApplePayConfiguration.Handlers(
authorizationResultHandler: { result in
do {
// Fetch the order details from your service
let myOrderDetails = try await MyAPIClient.shared.fetchOrderDetails(orderID: orderID)
result.orderDetails = PKPaymentOrderDetails(
orderTypeIdentifier: myOrderDetails.orderTypeIdentifier, // "com.myapp.order"
orderIdentifier: myOrderDetails.orderIdentifier, // "ABC123-AAAA-1111"
webServiceURL: myOrderDetails.webServiceURL, // "https://my-backend.example.com/apple-order-tracking-backend"
authenticationToken: myOrderDetails.authenticationToken) // "abc123"
// Return your modified PKPaymentAuthorizationResult
return result
} catch {
return PKPaymentAuthorizationResult(status: .failure, errors: [error])
}
}
)
var configuration = PaymentSheet.Configuration()
configuration.applePay = .init(merchantId: "merchant.com.your_app_name",
merchantCountryCode: "US",
customHandlers: customHandlers)
```
## Optional: Personnaliser la fiche
Pour personnaliser le formulaire de paiement, vous devez obligatoirement utiliser l’objet [PaymentSheet.Configuration](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html).
### Appearance
Customize colors, fonts, and so on to match the look and feel of your app by using the [appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=ios).
### Mise en page des moyens de paiement
Configurez la mise en page des moyens de paiement dans la feuille à l’aide de [paymentMethodLayout](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/configuration-swift.struct/paymentmethodlayout). Vous pouvez les afficher horizontalement, verticalement ou laisser Stripe optimiser la mise en page automatiquement.

#### Swift
```swift
var configuration = PaymentSheet.Configuration()
configuration.paymentMethodLayout = .automatic
```
### Recueillir les adresses des utilisateurs
Recueillez les adresses de livraison ou de facturation de vos clients locaux et internationaux à l’aide du composant [Address Element](https://docs.stripe.com/elements/address-element.md?platform=ios).
### Nom d’affichage du marchand
Spécifiez un nom d’entreprise à afficher pour le client en définissant [merchantDisplayName](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:18StripePaymentSheet0bC0C13ConfigurationV19merchantDisplayNameSSvp). Par défaut, il s’agit du nom de votre application.
#### Swift
```swift
var configuration = PaymentSheet.Configuration()
configuration.merchantDisplayName = "My app, Inc."
```
### Mode sombre
`PaymentSheet` s’ajuste automatiquement en fonction des paramètres d’affichage du système de l’utilisateur (mode clair et foncé). Si votre application ne prend pas en charge le mode sombre, vous pouvez définir [style](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:18StripePaymentSheet0bC0C13ConfigurationV5styleAC18UserInterfaceStyleOvp) sur le mode `alwaysLight` ou `alwaysDark`.
```swift
var configuration = PaymentSheet.Configuration()
configuration.style = .alwaysLight
```
### Informations de facturation par défaut
Si vous souhaitez définir des valeurs par défaut pour les informations de facturation collectées dans le formulaire de paiement, configurez la propriété `defaultBillingDetails`. Le `PaymentSheet` préremplit les champs avec les valeurs que vous fournissez.
```swift
var configuration = PaymentSheet.Configuration()
configuration.defaultBillingDetails.address.country = "US"
configuration.defaultBillingDetails.email = "foo@bar.com"
```
### Collecte des informations de facturation
Utilisez `billingDetailsCollectionConfiguration` pour spécifier la manière dont vous souhaitez collecter les informations de facturation dans le Payment Sheet.
Vous pouvez collecter le nom, l’adresse e-mail, le numéro de téléphone et l’adresse de votre client.
Si vous souhaitez uniquement indiquer les informations de facturation requises par le moyen de paiement, définissez la valeur de `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` sur « true ». Dans ce cas, les `PaymentSheet.Configuration.defaultBillingDetails` sont définis comme les [informations de facturation](https://docs.stripe.com/api/payment_methods/object.md?lang=node#payment_method_object-billing_details) du moyen de paiement.
Si vous souhaitez collecter des informations de facturation supplémentaires qui ne sont pas nécessairement requises par le moyen de paiement, définissez la valeur de `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` sur false. Dans ce cas, les informations de facturation collectées depuis la `PaymentSheet` sont définies comme les informations de facturation du moyen de paiement.
```swift
var configuration = PaymentSheet.Configuration()
configuration.defaultBillingDetails.email = "foo@bar.com"
configuration.billingDetailsCollectionConfiguration.name = .always
configuration.billingDetailsCollectionConfiguration.email = .never
configuration.billingDetailsCollectionConfiguration.address = .full
configuration.billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod = true
```
> Consultez votre conseiller juridique au sujet des lois qui s’appliquent à la collecte d’informations. Ne collectez les numéros de téléphone que si vous en avez besoin pour la transaction.
## Optional: Finaliser le paiement dans votre interface utilisateur
Vous pouvez présenter le formulaire de paiement pour la seule collecte des données du moyen de paiement, puis appeler une méthode `confirm` pour mener à bien l’opération de paiement dans l’interface utilisateur de votre application. Cette approche est utile si vous avez intégré un bouton d’achat personnalisé ou si des étapes supplémentaires sont nécessaires après la collecte des informations de paiement.

Mener à bien le paiement dans l’interface utilisateur de votre application
#### UIKit
Les étapes suivantes vous expliquent comment mener à bien le paiement dans l’interface utilisateur de votre application. Consultez notre exemple d’intégration sur [GitHub](https://github.com/stripe/stripe-ios/blob/master/Example/PaymentSheet%20Example/PaymentSheet%20Example/ExampleCustomCheckoutViewController.swift).
1. Tout d’abord, initialisez [PaymentSheet.FlowController](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller) au lieu de `PaymentSheet`, puis mettez à jour votre interface utilisateur avec sa propriété `paymentOption`. Celle-ci contient une image et une étiquette représentant le moyen de paiement par défaut initialement sélectionné par le client.
```swift
PaymentSheet.FlowController.create(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) { [weak self] result in
switch result {
case .failure(let error):
print(error)
case .success(let paymentSheetFlowController):
self?.paymentSheetFlowController = paymentSheetFlowController
// Update your UI using paymentSheetFlowController.paymentOption
}
}
```
1. Appelez ensuite `presentPaymentOptions` pour collecter les données de paiement. Une fois l’opération effectuée, mettez à nouveau à jour votre interface utilisateur avec la propriété `paymentOption`.
```swift
paymentSheetFlowController.presentPaymentOptions(from: self) {
// Update your UI using paymentSheetFlowController.paymentOption
}
```
1. Enfin, appelez `confirm`.
```swift
paymentSheetFlowController.confirm(from: self) { paymentResult in
// MARK: Handle the payment result
switch paymentResult {
case .completed:
print("Payment complete!")
case .canceled:
print("Canceled!")
case .failed(let error):
print(error)
}
}
```
#### SwiftUI
Les étapes suivantes vous expliquent comment mener à bien le paiement dans l’interface utilisateur de votre application. Consultez notre exemple d’intégration sur [GitHub](https://github.com/stripe/stripe-ios/blob/master/Example/PaymentSheet%20Example/PaymentSheet%20Example/ExampleSwiftUICustomPaymentFlow.swift).
1. Tout d’abord, initialisez [PaymentSheet.FlowController](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller) au lieu de `PaymentSheet`. Sa propriété `paymentOption` contient une image et une étiquette représentant le moyen de paiement actuellement sélectionné par le client, que vous pouvez utiliser dans votre interface utilisateur.
```swift
PaymentSheet.FlowController.create(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) { [weak self] result in
switch result {
case .failure(let error):
print(error)
case .success(let paymentSheetFlowController):
self?.paymentSheetFlowController = paymentSheetFlowController
// Use the paymentSheetFlowController.paymentOption properties in your UI
myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? "Select a payment method"
myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage(systemName: "square.and.pencil")!
}
}
```
1. Utilisez [PaymentSheet.FlowController.PaymentOptionsButton](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller/paymentoptionsbutton) pour wrapper le bouton qui présente la fiche de collecte des données de paiement. Lorsque `PaymentSheet.FlowController` appelle l’argument `onSheetDismissed`, la propriété `paymentOption` de l’instance de `PaymentSheet.FlowController` reflète le moyen de paiement actuellement sélectionné.
```swift
PaymentSheet.FlowController.PaymentOptionsButton(
paymentSheetFlowController: paymentSheetFlowController,
onSheetDismissed: {
myPaymentMethodLabel = paymentSheetFlowController.paymentOption?.label ?? "Select a payment method"
myPaymentMethodImage = paymentSheetFlowController.paymentOption?.image ?? UIImage(systemName: "square.and.pencil")!
},
content: {
/* An example button */
HStack {
Text(myPaymentMethodLabel)
Image(uiImage: myPaymentMethodImage)
}
}
)
```
1. Utilisez [PaymentSheet.FlowController.PaymentOptionsButton](https://stripe.dev/stripe-ios/stripepaymentsheet/documentation/stripepaymentsheet/paymentsheet/flowcontroller/paymentoptionsbutton) pour wrapper le bouton servant à confirmer le paiement.
```swift
PaymentSheet.FlowController.ConfirmButton(
paymentSheetFlowController: paymentSheetFlowController,
onCompletion: { result in
// MARK: Handle the payment result
switch result {
case .completed:
print("Payment complete!")
case .canceled:
print("Canceled!")
case .failed(let error):
print(error)
}
},
content: {
/* An example button */
Text("Pay")
}
)
```
Si la valeur de `PaymentSheetResult` est `.completed`, informez l’utilisateur (par exemple, en affichant un écran de confirmation de commande).
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]"=true \
-d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```

Intégrez l’interface utilisateur de paiement préconfigurée de Stripe au processus de paiement de votre application Android grâce à la classe [PaymentSheet](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html).
## Configurer Stripe [Côté serveur] [Côté client]
Pour commencer, vous devez créer un compte Stripe. [S’inscrire](https://dashboard.stripe.com/register).
### Côté serveur
Cette intégration nécessite des endpoints sur votre serveur qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
### Côté client
Le [SDK Stripe Android](https://github.com/stripe/stripe-android) est disponible en open source et [fait l’objet d’une documentation complète](https://stripe.dev/stripe-android/).
Pour installer le SDK, ajoutez `stripe-android` au bloc `dependencies` de votre fichier [app/build.gradle](https://developer.android.com/studio/build/dependencies) :
#### Kotlin
```kotlin
plugins {
id("com.android.application")
}
android { ... }
dependencies {
// ...
// Stripe Android SDK
implementation("com.stripe:stripe-android:23.0.2")
// Include the financial connections SDK to support US bank account as a payment method
implementation("com.stripe:financial-connections:23.0.2")
}
```
> Pour obtenir de plus amples informations sur la version la plus récente du SDK et ses versions antérieures, consultez la page des [versions](https://github.com/stripe/stripe-android/releases) sur GitHub. Pour savoir quand une nouvelle version est disponible, [surveillez les versions du référentiel](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository).
Configurez le SDK avec votre [clé publique](https://dashboard.stripe.com/apikeys) Stripe de façon à ce qu’il puisse envoyer des requêtes à l’API Stripe, par exemple à la sous-classe `Application` :
#### Kotlin
```kotlin
import com.stripe.android.PaymentConfiguration
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
PaymentConfiguration.init(
applicationContext,
"<>"
)
}
}
```
> Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) lors de vos activités de test et de développement et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application.
## Ajouter un endpoint [Côté serveur]
Cette intégration utilise trois objets de l’API Stripe :
1. Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus.
1. Un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) (facultatif). Pour configurer un moyen de paiement en vue de paiements futurs, vous devez l’associer à un client. Créez un objet Customer lorsque votre client crée un compte chez vous. Si votre client effectue un paiement en tant qu’invité, vous pouvez créer un objet Customer avant le paiement, puis l’associer ultérieurement à votre représentation interne du compte client.
1. Un objet Customer Ephemeral Key (facultatif). L’objet Customer contient des informations sensibles qu’il n’est pas possible de récupérer directement depuis une application. Une clé éphémère permet d’accorder au SDK un accès temporaire à l’objet Customer.
Si vous souhaitez enregistrer des cartes et autoriser vos clients réguliers à réutiliser les cartes enregistrées, vous avez besoin des objets Customer et Customer Ephemeral Key pour votre intégration. Sinon, vous pouvez ignorer ces objets.
Pour des raisons de sécurité, votre application ne peut pas créer ces objets. À la place, ajoutez sur votre serveur un endpoint qui :
1. Récupère l’objet Customer ou en crée un nouveau.
1. Crée une clé éphémère pour le client.
1. Crée un objet PaymentIntent, en précisant le [montant](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), la [devise](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), le [client](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer), ainsi qu’un [groupe de transfert](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group) à associer ultérieurement au transfert de fonds.
1. Renvoie la *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) du composant Payment Intent, le `secret` de la clé éphémère, l’[ID du client](https://docs.stripe.com/api/customers/object.md#customer_object-id) et votre [clé publiable](https://dashboard.stripe.com/apikeys) à votre application.
Les moyens de paiement présentés aux clients lors du processus de paiement sont également inclus dans le PaymentIntent. Vous pouvez laisser Stripe extraire les moyens de paiement des [paramètres du Dashboard](https://dashboard.stripe.com/settings/payment_methods), ou bien les répertorier manuellement.
À moins que votre intégration ne nécessite du code pour la présentation des moyens de paiement, ne listez pas les moyens de paiement manuellement. En effet, Stripe évalue la devise, les restrictions sur les moyens de paiement ainsi que d’autres paramètres pour dresser la liste des moyens de paiement pris en charge. Les moyens de paiement qui augmentent le taux de conversion et qui sont les plus pertinents pour la devise et le lieu de résidence du client sont automatiquement priorisés par Stripe. Ceux de moindre priorité ne sont accessibles que via un menu de débordement.
#### Gérer les moyens de paiement dans le Dashboard
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="usd" \
# In the latest version of the API, specifying the `automatic_payment_methods` parameter
# is optional because Stripe enables its functionality by default.
-d "automatic_payment_methods[enabled]"=true \
-d transfer_group="ORDER100" \
```
#### Répertorier manuellement les moyens de paiement
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="eur" \
-d "payment_method_types[]"="bancontact" \
-d "payment_method_types[]"="card" \
-d "payment_method_types[]"="ideal" \
-d "payment_method_types[]"="klarna" \
-d "payment_method_types[]"="sepa_debit" \
-d transfer_group="ORDER100" \
```
Chacun des moyens de paiement doit prendre en charge la devise transmise dans le PaymentIntent et votre activité doit par ailleurs être basée dans l’un des pays pris en charge par chaque moyen de paiement. Veuillez consulter la page consacrée aux [options d’intégration des moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) pour en savoir plus.
## Intégrer la fiche de paiement [Côté client]
Avant d’afficher le composant Element Payment pour mobile, vous devez, sur votre écran de paiement :
- Présenter les produits commandés et le montant total des achats
- Recueillez toutes les informations de livraison requises à l’aide du composant [Address Element](https://docs.stripe.com/elements/address-element.md?platform=android)
- Inclure un bouton de règlement pour afficher l’interface utilisateur de Stripe
#### Jetpack Compose
[Initialisez](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-builder/index.html) une instance `PaymentSheet` dans la méthode `onCreate` de votre classe CheckoutActivity, puis transmettez une méthode pour gérer le résultat.
```kotlin
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import com.stripe.android.paymentsheet.PaymentSheet
import com.stripe.android.paymentsheet.PaymentSheetResult
@Composable
fun App() {
val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build()
}
private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {
// implemented in the next steps
}
```
Ensuite, récupérez la clé secrète du client du PaymentIntent, la clé secrète de Session Customer, le Customer ID et la clé publiable depuis l’endpoint que vous avez créé à l’étape précédente. Configurez la clé publiable à l’aide du paramètre `PaymentConfiguration` et utilisez les autres au moment d’afficher la PaymentSheet.
```kotlin
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberimport androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import com.stripe.android.PaymentConfiguration
import com.stripe.android.paymentsheet.PaymentSheet
import com.stripe.android.paymentsheet.PaymentSheetResult
@Composable
fun App() {
val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build()val context = LocalContext.current
var customerConfig by remember { mutableStateOf(null) }
varpaymentIntentClientSecret by remember { mutableStateOf(null) }
LaunchedEffect(context) {
// Make a request to your own server and retrieve payment configurations
val networkResult = ...
if (networkResult.isSuccess) {paymentIntentClientSecret = networkResult.paymentIntent
customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession(
id = networkResult.customer,
clientSecret = networkResult.customerSessionClientSecret
)PaymentConfiguration.init(context, networkResult.publishableKey)}
}
}
private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {
// implemented in the next steps
}
```
Lorsque le client appuie sur votre bouton de paiement, appelez [presentWithPaymentIntent](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#1814490530%2FFunctions%2F2002900378) pour afficher le formulaire de paiement. Une fois que le client a effectué le paiement, le formulaire se ferme et le [PaymentSheetResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html) est appelé avec un [PaymentSheetResult](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result/index.html).
```kotlin
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import com.stripe.android.PaymentConfiguration
import com.stripe.android.paymentsheet.PaymentSheet
import com.stripe.android.paymentsheet.PaymentSheetResult
@Composable
fun App() {
val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build()
val context = LocalContext.current
var customerConfig by remember { mutableStateOf(null) }
var paymentIntentClientSecret by remember { mutableStateOf(null) }
LaunchedEffect(context) {
// Make a request to your own server and retrieve payment configurations
val networkResult = ...
if (networkResult.isSuccess) {
paymentIntentClientSecret = networkResult.paymentIntent
customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession(
id = networkResult.customer,
clientSecret = networkResult.customerSessionClientSecret
)
PaymentConfiguration.init(context, networkResult.publishableKey)
}
}Button(
onClick = {
val currentConfig = customerConfig
val currentClientSecret =paymentIntentClientSecret
if (currentConfig != null && currentClientSecret != null) {
presentPaymentSheet(paymentSheet, currentConfig, currentClientSecret)
}
}
) {
Text("Checkout")
}
}private fun presentPaymentSheet(
paymentSheet: PaymentSheet,
customerConfig: PaymentSheet.CustomerConfiguration,paymentIntentClientSecret: String
) {
paymentSheet.presentWithPaymentIntent(paymentIntentClientSecret,
PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name")
.customer(customerConfig)
// Set `allowsDelayedPaymentMethods` to true if your business handles
// delayed notification payment methods like US bank accounts.
.allowsDelayedPaymentMethods(true)
.build()
)
}
private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {when(paymentSheetResult) {
is PaymentSheetResult.Canceled -> {
print("Canceled")
}
is PaymentSheetResult.Failed -> {
print("Error: ${paymentSheetResult.error}")
}
is PaymentSheetResult.Completed -> {
// Display for example, an order confirmation screen
print("Completed")
}
}
}
```
#### Vues (classique)
[Initialisez](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#-394860221%2FConstructors%2F2002900378) une instance `PaymentSheet` dans la méthode `onCreate` de votre classe CheckoutActivity, puis transmettez une méthode pour gérer le résultat.
#### Kotlin
```kotlin
import com.stripe.android.paymentsheet.PaymentSheet
class CheckoutActivity : AppCompatActivity() {
lateinit var paymentSheet: PaymentSheet
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
paymentSheet = PaymentSheet.Builder(::onPaymentSheetResult).build(this)
}
fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {
// implemented in the next steps
}
}
```
Ensuite, récupérez la clé secrète du client du PaymentIntent, la clé secrète de Session Customer, le Customer ID et la clé publiable depuis l’endpoint que vous avez créé à l’étape précédente. Configurez la clé publiable à l’aide du paramètre `PaymentConfiguration` et utilisez les autres au moment d’afficher la PaymentSheet.
#### Kotlin
```kotlin
import com.stripe.android.paymentsheet.PaymentSheet
class CheckoutActivity : AppCompatActivity() {
lateinit var paymentSheet: PaymentSheetlateinit var customerConfig: PaymentSheet.CustomerConfiguration
lateinit varpaymentIntentClientSecret: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
paymentSheet = PaymentSheet.Builder(::onPaymentSheetResult).build(this)lifecycleScope.launch {
// Make a request to your own server and retrieve payment configurations
val networkResult = MyBackend.getPaymentConfig()
if (networkResult.isSuccess) {paymentIntentClientSecret = networkResult.paymentIntent
customerConfig = PaymentSheet.CustomerConfiguration.createWithCustomerSession(
id = networkResult.customer,
clientSecret = networkResult.customerSessionClientSecret
)PaymentConfiguration.init(context, networkResult.publishableKey)}
}
}
fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {
// implemented in the next steps
}
}
```
Lorsque le client appuie sur votre bouton de paiement, appelez [presentWithPaymentIntent](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/index.html#1814490530%2FFunctions%2F2002900378) pour afficher le formulaire de paiement. Une fois que le client a effectué le paiement, le formulaire se ferme et le [PaymentSheetResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html) est appelé avec un [PaymentSheetResult](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result/index.html).
#### Kotlin
```kotlin
// ...
class CheckoutActivity : AppCompatActivity() {
lateinit var paymentSheet: PaymentSheet
lateinit var customerConfig: PaymentSheet.CustomerConfiguration
lateinit var paymentIntentClientSecret: String
// ...fun presentPaymentSheet() {
paymentSheet.presentWithPaymentIntent(paymentIntentClientSecret,
PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name")
.customer(customerConfig)
// Set `allowsDelayedPaymentMethods` to true if your business handles
// delayed notification payment methods like US bank accounts.
.allowsDelayedPaymentMethods(true)
.build()
)
}
fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) {when(paymentSheetResult) {
is PaymentSheetResult.Canceled -> {
print("Canceled")
}
is PaymentSheetResult.Failed -> {
print("Error: ${paymentSheetResult.error}")
}
is PaymentSheetResult.Completed -> {
// Display for example, an order confirmation screen
print("Completed")
}
}
}
}
```
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Gérer les événements post-paiement [Côté serveur]
Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. Utilisez l’[outil de webhook du Dashboard](https://dashboard.stripe.com/webhooks) ou suivez le [guide consacré aux webhooks](https://docs.stripe.com/webhooks/quickstart.md) pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.
Plutôt que d’attendre un rappel de votre client, écoutez ces événements. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Certains clients malintentionnés peuvent d’autre part tenter de manipuler la réponse. En configurant votre intégration de manière à ce qu’elle écoute les événements asynchrones, vous pourrez accepter [plusieurs types de moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule et même intégration.
En plus de l’événement `payment_intent.succeeded`, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :
| Événement | Description | Action |
| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et *traitez* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) sa commande. |
| [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Envoyé lorsqu’un client initie un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client initie un prélèvement bancaire. Il est suivi par un événement `payment_intent.succeeded` ou `payment_intent.payment_failed`. | Envoyez au client une confirmation de commande qui indique que son paiement est en attente. Pour des marchandises dématérialisées, vous pourrez traiter la commande sans attendre que le paiement soit effectué. |
| [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état `processing` à `payment_failed`, proposez au client de retenter le paiement. |
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bancontact, iDEAL | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Optional: Activer Google Pay
### Configurer votre intégration
Pour utiliser Google Pay, commencez par activer l’API Google Pay en ajoutant les informations suivantes au libellé `` de votre **AndroidManifest.xml** :
```xml
...
```
Pour en savoir plus, consultez cette page indiquant comment [configurer l’API Google Pay](https://developers.google.com/pay/api/android/guides/setup) pour Android.
### Ajouter Google Pay
Pour ajouter Google Pay à votre intégration, transmettez un [PaymentSheet.GooglePayConfiguration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-google-pay-configuration/index.html) avec votre environnement Google Pay (en mode production ou en mode test), ainsi que le [code pays de votre entreprise](https://dashboard.stripe.com/settings/account) lors de l’initialisation de [PaymentSheet.Configuration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html).
#### Kotlin
```kotlin
val googlePayConfiguration = PaymentSheet.GooglePayConfiguration(
environment = PaymentSheet.GooglePayConfiguration.Environment.Test,
countryCode = "US",
currencyCode = "USD" // Required for Setup Intents, optional for Payment Intents
)
val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name")
.googlePay(googlePayConfiguration)
.build()
```
### Tester Google Pay
Google vous permet d’effectuer des paiements de test via leur [suite de carte bancaire de test](https://developers.google.com/pay/api/android/guides/resources/test-card-suite). La suite de tests prend en charge l’utilisation de [cartes bancaires de test](https://docs.stripe.com/testing.md) de Stripe.
Vous devez tester Google Pay à l’aide d’un appareil Android physique plutôt que d’un appareil simulé, dans un pays où Google Pay est pris en charge. Connectez-vous à un compte Google sur votre appareil de test avec une carte réelle enregistrée dans Google Wallet.
## Optional: Personnaliser la fiche
Pour personnaliser le formulaire de paiement, vous devez obligatoirement utiliser l’objet [PaymentSheet.Configuration](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html).
### Appearance
Customize colors, fonts, and more to match the look and feel of your app by using the [appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=android).
### Mise en page des moyens de paiement
Configurez la mise en page des moyens de paiement dans la feuille à l’aide de [paymentMethodLayout](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/-builder/index.html#2123253356%2FFunctions%2F2002900378). Vous pouvez les afficher horizontalement, verticalement ou laisser Stripe optimiser la mise en page automatiquement.

#### Kotlin
```kotlin
PaymentSheet.Configuration.Builder("Example, Inc.")
.paymentMethodLayout(PaymentSheet.PaymentMethodLayout.Automatic)
.build()
```
### Recueillir les adresses des utilisateurs
Recueillez les adresses de livraison ou de facturation de vos clients locaux et internationaux à l’aide du composant [Address Element](https://docs.stripe.com/elements/address-element.md?platform=android).
### Nom d’affichage de l’entreprise
Spécifiez un nom d’entreprise à afficher pour le client en définissant [merchantDisplayName](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-configuration/index.html#-191101533%2FProperties%2F2002900378). Par défaut, il s’agit du nom de votre application.
#### Kotlin
```kotlin
PaymentSheet.Configuration.Builder(
merchantDisplayName = "My app, Inc."
).build()
```
### Mode sombre
Par défaut, `PaymentSheet` s’adapte automatiquement aux paramètres d’affichage du système de l’utilisateur (mode clair ou mode sombre). Vous pouvez modifier ce comportement en sélectionnant le mode clair ou le mode sombre sur votre application :
#### Kotlin
```kotlin
// force dark
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
// force light
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
```
### Informations de facturation par défaut
Si vous souhaitez définir des valeurs par défaut pour les informations de facturation collectées dans le formulaire de paiement, configurez la propriété `defaultBillingDetails`. Le `PaymentSheet` préremplit les champs avec les valeurs que vous fournissez.
#### Kotlin
```kotlin
val address = PaymentSheet.Address(country = "US")
val billingDetails = PaymentSheet.BillingDetails(
address = address,
email = "foo@bar.com"
)
val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.")
.defaultBillingDetails(billingDetails)
.build()
```
### Configurer la collecte des données de facturation
Utiliser `BillingDetailsCollectionConfiguration` pour spécifier la manière dont vous souhaitez collecter les informations de facturation dans la PaymentSheet.
Vous pouvez collecter le nom, l’adresse e-mail, le numéro de téléphone et l’adresse de votre client.
Si vous souhaitez associer les informations de facturation par défaut à l’objet PaymentMethod même lorsque ces champs ne sont pas collectés dans l’interface utilisateur, définissez `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` sur `true`.
#### Kotlin
```kotlin
val billingDetails = PaymentSheet.BillingDetails(
email = "foo@bar.com"
)
val billingDetailsCollectionConfiguration = BillingDetailsCollectionConfiguration(
attachDefaultsToPaymentMethod = true,
name = BillingDetailsCollectionConfiguration.CollectionMode.Always,
email = BillingDetailsCollectionConfiguration.CollectionMode.Never,
address = BillingDetailsCollectionConfiguration.AddressCollectionMode.Full,
)
val configuration = PaymentSheet.Configuration.Builder(merchantDisplayName = "Merchant, Inc.")
.defaultBillingDetails(billingDetails)
.billingDetailsCollectionConfiguration(billingDetailsCollectionConfiguration)
.build()
```
> Consultez votre conseiller juridique au sujet des lois qui s’appliquent à la collecte d’informations. Ne collectez les numéros de téléphone que si vous en avez besoin pour la transaction.
## Optional: Finaliser le paiement dans votre interface utilisateur
Vous pouvez présenter le formulaire de paiement pour collecter uniquement les informations du moyen de paiement et finaliser l’opération dans l’interface utilisateur de votre application. Cette méthode est utile si vous avez intégré un bouton d’achat personnalisé ou si vous avez besoin d’étapes supplémentaires après la collecte des informations de paiement.

> Un exemple d’intégration est [disponible sur notre GitHub](https://github.com/stripe/stripe-android/blob/master/paymentsheet-example/src/main/java/com/stripe/android/paymentsheet/example/samples/ui/paymentsheet/custom_flow/CustomFlowActivity.kt).
1. Tout d’abord, initialisez [PaymentSheet.FlowController](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html) au lieu de `PaymentSheet` en utilisant l’une des méthodes [Builder](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/-builder/index.html).
#### Android (Kotlin)
```kotlin
class CheckoutActivity : AppCompatActivity() {
private lateinit var flowController: PaymentSheet.FlowController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val flowController = PaymentSheet.FlowController.Builder(
resultCallback = ::onPaymentSheetResult,
paymentOptionResultCallback = ::onPaymentOption,
).build(this)
}
}
```
1. Appelez ensuite `configureWithPaymentIntent` avec les clés d’objet Stripe récupérées depuis votre back-end et mettez à jour votre interface utilisateur dans le rappel en utilisant [getPaymentOption()](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#-2091462043%2FFunctions%2F2002900378). Cette propriété contient une image et une étiquette représentant le moyen de paiement actuellement sélectionné par le client.
#### Android (Kotlin)
```kotlin
flowController.configureWithPaymentIntent(
paymentIntentClientSecret = paymentIntentClientSecret,
configuration = PaymentSheet.Configuration.Builder("Example, Inc.")
.customer(PaymentSheet.CustomerConfiguration(
id = customerId,
ephemeralKeySecret = ephemeralKeySecret
))
.build()
) { isReady, error ->
if (isReady) {
// Update your UI using `flowController.getPaymentOption()`
} else {
// handle FlowController configuration failure
}
}
```
1. Appelez ensuite [presentPaymentOptions](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#449924733%2FFunctions%2F2002900378) pour collecter les informations de paiement. Lorsque le client a terminé, le formulaire se ferme et appelle le [paymentOptionCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-option-callback/index.html) transmis plus tôt dans `create`. Implémentez cette méthode pour mettre à jour votre interface utilisateur avec la propriété `paymentOption` renvoyée.
#### Android (Kotlin)
```kotlin
// ...
flowController.presentPaymentOptions()
// ...
private fun onPaymentOption(paymentOptionResult: PaymentOptionResult) {
val paymentOption = paymentOptionResult.paymentOption
if (paymentOption != null) {
paymentMethodButton.text = paymentOption.label
paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds(
paymentOption.drawableResourceId,
0,
0,
0
)
} else {
paymentMethodButton.text = "Select"
paymentMethodButton.setCompoundDrawablesRelativeWithIntrinsicBounds(
null,
null,
null,
null
)
}
}
```
1. Enfin, appelez [confirm](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet/-flow-controller/index.html#-479056656%2FFunctions%2F2002900378) pour mener à bien le paiement. Lorsque le client a terminé, le formulaire se ferme et appelle le [paymentResultCallback](https://stripe.dev/stripe-android/paymentsheet/com.stripe.android.paymentsheet/-payment-sheet-result-callback/index.html#237248767%2FFunctions%2F2002900378) transmis plus tôt dans `create`.
#### Android (Kotlin)
```kotlin
// ...
flowController.confirmPayment()
// ...
private fun onPaymentSheetResult(
paymentSheetResult: PaymentSheetResult
) {
when (paymentSheetResult) {
is PaymentSheetResult.Canceled -> {
// Payment canceled
}
is PaymentSheetResult.Failed -> {
// Payment Failed. See logcat for details or inspect paymentSheetResult.error
}
is PaymentSheetResult.Completed -> {
// Payment Complete
}
}
}
```
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]"=true \
-d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```

Cette intégration combine toutes les étapes nécessaires au paiement (dont la collecte des informations de paiement et la confirmation du paiement) en une seule feuille qui s’affiche en haut de votre application.
## Configurer Stripe [Côté serveur] [Côté client]
Pour commencer, vous devez créer un compte Stripe. [S’inscrire](https://dashboard.stripe.com/register).
### Côté serveur
Cette intégration nécessite des endpoints sur votre serveur qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur :
#### Ruby
```bash
# Available as a gem
sudo gem install stripe
```
```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```
### Côté client
Le [SDK React Native](https://github.com/stripe/stripe-react-native) est disponible en open source et fait l’objet d’une documentation complète. En interne, il utilise des SDK [Android](https://github.com/stripe/stripe-android) et [iOS natifs](https://github.com/stripe/stripe-ios). Pour installer le SDK React Native de Stripe, exécutez l’une des commandes suivantes dans le répertoire de votre projet (selon le gestionnaire de paquets que vous utilisez) :
#### yarn
```bash
yarn add @stripe/stripe-react-native
```
#### npm
```bash
npm install @stripe/stripe-react-native
```
Ensuite, installez les autres dépendances nécessaires :
- Pour iOS, accédez au directeur **ios** et exécutez `pod install` pour vous assurer que vous installez également les dépendances natives requises.
- Pour Android, il n’y a plus de dépendances à installer.
> Nous vous recommandons de suivre le [guide officiel de TypeScript](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) pour ajouter la prise en charge de TypeScript.
### Initialisation de Stripe
Pour initialiser Stripe dans votre application React Native, wrappez votre écran de paiement avec le composant `StripeProvider` ou utilisez la méthode d’initialisation `initStripe`. Seule la [clé publiable](https://docs.stripe.com/keys.md#obtain-api-keys) de l’API dans `publishableKey` est nécessaire. L’exemple suivant montre comment initialiser Stripe à l’aide du composant `StripeProvider`.
```jsx
import { useState, useEffect } from 'react';
import { StripeProvider } from '@stripe/stripe-react-native';
function App() {
const [publishableKey, setPublishableKey] = useState('');
const fetchPublishableKey = async () => {
const key = await fetchKey(); // fetch key from your server here
setPublishableKey(key);
};
useEffect(() => {
fetchPublishableKey();
}, []);
return (
{/* Your app code here */}
);
}
```
> Utilisez vos [clés de test](https://docs.stripe.com/keys.md#obtain-api-keys) d’API lors de vos activités de test et de développement, et vos clés du [mode production](https://docs.stripe.com/keys.md#test-live-modes) pour la publication de votre application.
## Ajouter un endpoint [Côté serveur]
Cette intégration utilise trois objets de l’API Stripe :
1. Un [PaymentIntent](https://docs.stripe.com/api/payment_intents.md). Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus.
1. Un objet *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) (facultatif). Pour configurer un moyen de paiement en vue de paiements futurs, vous devez l’associer à un client. Créez un objet Customer lorsque votre client crée un compte chez vous. Si votre client effectue un paiement en tant qu’invité, vous pouvez créer un objet Customer avant le paiement, puis l’associer ultérieurement à votre représentation interne du compte client.
1. Un objet Customer Ephemeral Key (facultatif). L’objet Customer contient des informations sensibles qu’il n’est pas possible de récupérer directement depuis une application. Une clé éphémère permet d’accorder au SDK un accès temporaire à l’objet Customer.
Si vous souhaitez enregistrer des cartes et autoriser vos clients réguliers à réutiliser les cartes enregistrées, vous avez besoin des objets Customer et Customer Ephemeral Key pour votre intégration. Sinon, vous pouvez ignorer ces objets.
Pour des raisons de sécurité, votre application ne peut pas créer ces objets. À la place, ajoutez sur votre serveur un endpoint qui :
1. Récupère l’objet Customer ou en crée un nouveau.
1. Crée une clé éphémère pour le client.
1. Crée un objet PaymentIntent, en précisant le [montant](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount), la [devise](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-currency), le [client](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer), ainsi qu’un [groupe de transfert](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-transfer_group) à associer ultérieurement au transfert de fonds.
1. Renvoie la *clé secrète du client* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) du composant Payment Intent, le `secret` de la clé éphémère, l’[ID du client](https://docs.stripe.com/api/customers/object.md#customer_object-id) et votre [clé publiable](https://dashboard.stripe.com/apikeys) à votre application.
Les moyens de paiement présentés aux clients lors du processus de paiement sont également inclus dans le PaymentIntent. Vous pouvez laisser Stripe extraire les moyens de paiement des [paramètres du Dashboard](https://dashboard.stripe.com/settings/payment_methods), ou bien les répertorier manuellement.
À moins que votre intégration ne nécessite du code pour la présentation des moyens de paiement, ne listez pas les moyens de paiement manuellement. En effet, Stripe évalue la devise, les restrictions sur les moyens de paiement ainsi que d’autres paramètres pour dresser la liste des moyens de paiement pris en charge. Les moyens de paiement qui augmentent le taux de conversion et qui sont les plus pertinents pour la devise et le lieu de résidence du client sont automatiquement priorisés par Stripe. Ceux de moindre priorité ne sont accessibles que via un menu de débordement.
#### Gérer les moyens de paiement dans le Dashboard
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="usd" \
# In the latest version of the API, specifying the `automatic_payment_methods` parameter
# is optional because Stripe enables its functionality by default.
-d "automatic_payment_methods[enabled]"=true \
-d transfer_group="ORDER100" \
```
#### Répertorier manuellement les moyens de paiement
Vous pouvez dupliquer le projet (fork) et déployer une implémentation de cet endpoint sur [CodeSandbox](https://codesandbox.io/p/devbox/suspicious-lalande-l325w6) pour la tester.
#### curl
```bash
# Create a Customer (use an existing Customer ID if this is a returning customer)
curl https://api.stripe.com/v1/customers \
-u <>: \
-X "POST"
# Create an Ephemeral Key for the Customer
curl https://api.stripe.com/v1/ephemeral_keys \
-u <>: \
-H "Stripe-Version: 2026-02-25.clover" \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
# Create a PaymentIntent
curl https://api.stripe.com/v1/payment_intents \
-u <>: \
-X "POST" \
-d "customer"="{{CUSTOMER_ID}}" \
-d "amount"=10000 \
-d "currency"="eur" \
-d "payment_method_types[]"="bancontact" \
-d "payment_method_types[]"="card" \
-d "payment_method_types[]"="ideal" \
-d "payment_method_types[]"="klarna" \
-d "payment_method_types[]"="sepa_debit" \
-d transfer_group="ORDER100" \
```
Chacun des moyens de paiement doit prendre en charge la devise transmise dans le PaymentIntent et votre activité doit par ailleurs être basée dans l’un des pays pris en charge par chaque moyen de paiement. Veuillez consulter la page consacrée aux [options d’intégration des moyens de paiement](https://docs.stripe.com/payments/payment-methods/integration-options.md) pour en savoir plus.
## Intégrer la fiche de paiement [Côté client]
Avant d’afficher le composant Element Payment pour mobile, vous devez, sur votre écran de paiement :
- Présenter les produits commandés et le montant total des achats
- Collecter les éventuelles informations de livraison requises
- Inclure un bouton de règlement pour afficher l’interface utilisateur de Stripe
Au cours du processus de paiement de votre application, effectuez une demande réseau auprès du endpoint du back-end que vous avez créé à l’étape précédente, puis appelez `initPaymentSheet` depuis le hook `useStripe`.
```javascript
export default function CheckoutScreen() {
const { initPaymentSheet, presentPaymentSheet } = useStripe();
const [loading, setLoading] = useState(false);
const fetchPaymentSheetParams = async () => {
const response = await fetch(`${API_URL}/payment-sheet`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
});
const { paymentIntent, ephemeralKey, customer } = await response.json();
return {
paymentIntent,
ephemeralKey,
customer,
};
};
const initializePaymentSheet = async () => {
const {
paymentIntent,
ephemeralKey,
customer,
} = await fetchPaymentSheetParams();
const { error } = await initPaymentSheet({
merchantDisplayName: "Example, Inc.",
customerId: customer,
customerEphemeralKeySecret: ephemeralKey,
paymentIntentClientSecret: paymentIntent,
// Set `allowsDelayedPaymentMethods` to true if your business can handle payment
//methods that complete payment after a delay, like SEPA Debit and Sofort.
allowsDelayedPaymentMethods: true,
defaultBillingDetails: {
name: 'Jane Doe',
}
});
if (!error) {
setLoading(true);
}
};
const openPaymentSheet = async () => {
// see below
};
useEffect(() => {
initializePaymentSheet();
}, []);
return (
);
}
```
Lorsque votre client touche le bouton **Paiement**, appelez `presentPaymentSheet()` pour ouvrir le formulaire de paiement. Une fois la transaction finalisée, le formulaire se ferme et la promesse aboutit avec le résultat facultatif `StripeError`.
```javascript
export default function CheckoutScreen() {
// continued from above
const openPaymentSheet = async () => {
const { error } = await presentPaymentSheet();
if (error) {
Alert.alert(`Error code: ${error.code}`, error.message);
} else {
Alert.alert('Success', 'Your order is confirmed!');
}
};
return (
);
}
```
En l’absence d’erreur, informez l’utilisateur que l’opération est terminée (par exemple, en affichant un écran de confirmation de commande).
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Configurer une URL de redirection (iOS uniquement) [Côté client]
Le client peut quitter votre application pour s’authentifier (par exemple, dans Safari ou dans son application bancaire). Pour lui permettre de revenir automatiquement sur votre application après s’être authentifié, [configurez un schéma d’URL personnalisé](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app) et configurez votre délégué d’application pour qu’il transmette l’URL au SDK. Stripe ne prend pas en charge les [liens universels](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content).
#### SceneDelegate
#### Swift
```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
guard let url = URLContexts.first?.url else {
return
}
let stripeHandled = StripeAPI.handleURLCallback(with: url)
if (!stripeHandled) {
// This was not a Stripe url – handle the URL normally as you would
}
}
```
#### AppDelegate
#### Swift
```swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect")
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
let stripeHandled = StripeAPI.handleURLCallback(with: url)
if (stripeHandled) {
return true
} else {
// This was not a Stripe url – handle the URL normally as you would
}
return false
}
```
#### SwiftUI
#### Swift
```swift
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Text("Hello, world!").onOpenURL { incomingURL in
let stripeHandled = StripeAPI.handleURLCallback(with: incomingURL)
if (!stripeHandled) {
// This was not a Stripe url – handle the URL normally as you would
}
}
}
}
}
```
Définissez également le paramètre [returnURL](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html#/s:6Stripe12PaymentSheetC13ConfigurationV9returnURLSSSgvp) correspondant à votre objet [PaymentSheet.Configuration](https://stripe.dev/stripe-ios/stripe-paymentsheet/Classes/PaymentSheet/Configuration.html) sur l’URL de votre application.
```swift
var configuration = PaymentSheet.Configuration()
configuration.returnURL = "your-app://stripe-redirect"
```
## Gérer les événements post-paiement
Stripe envoie un événement [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) à l’issue du paiement. Utilisez l’[outil de webhook du Dashboard](https://dashboard.stripe.com/webhooks) ou suivez le [guide consacré aux webhooks](https://docs.stripe.com/webhooks/quickstart.md) pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.
Plutôt que d’attendre un rappel de votre client, écoutez ces événements. Côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant l’exécution du rappel. Certains clients malintentionnés peuvent d’autre part tenter de manipuler la réponse. En configurant votre intégration de manière à ce qu’elle écoute les événements asynchrones, vous pourrez accepter [plusieurs types de moyens de paiement](https://stripe.com/payments/payment-methods-guide) avec une seule et même intégration.
En plus de l’événement `payment_intent.succeeded`, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :
| Événement | Description | Action |
| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.succeeded) | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et *traitez* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) sa commande. |
| [payment_intent.processing](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.processing) | Envoyé lorsqu’un client initie un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client initie un prélèvement bancaire. Il est suivi par un événement `payment_intent.succeeded` ou `payment_intent.payment_failed`. | Envoyez au client une confirmation de commande qui indique que son paiement est en attente. Pour des marchandises dématérialisées, vous pourrez traiter la commande sans attendre que le paiement soit effectué. |
| [payment_intent.payment_failed](https://docs.stripe.com/api/events/types.md?lang=php#event_types-payment_intent.payment_failed) | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état `processing` à `payment_failed`, proposez au client de retenter le paiement. |
## Créer un transfert [Côté serveur]
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un [transfert](https://docs.stripe.com/api/transfers/create.md) et en précisant le `transfer_group` utilisé.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d destination="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
Les montants des transferts et des paiements ne doivent pas nécessairement correspondre. Vous pouvez fractionner un paiement en plusieurs transferts ou inclure plusieurs paiements dans un même transfert. L’exemple suivant illustre la création d’un transfert supplémentaire associé au même `transfer_group`.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=2000 \
-d currency=usd \
-d destination={{OTHER_CONNECTED_ACCOUNT_ID}} \
-d transfer_group=ORDER100
```
### Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne `transfer_group`, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans `transfer_group`, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
> Le paramètre `transfer_group` identifie uniquement les objets associés. Il n’affecte aucune fonctionnalité standard. Pour empêcher l’exécution d’un transfert avant que les fonds du paiement associé ne soient disponibles, utilisez l’attribut `source_transaction` du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le [solde de compte disponible](https://docs.stripe.com/connect/account-balances.md) de la plateforme. Stripe ne relance pas automatiquement les demandes de transfert en échec.
Vous pouvez éviter les échecs des demandes de transfert pour les transferts associés à des paiements. Lorsque vous précisez le paiement associé [comme source_transaction du transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#transfer-availability), la demande de transfert aboutit automatiquement. Cependant, nous n’exécutons pas le transfert tant que les fonds provenant de ce paiement ne sont pas disponibles sur le compte de la plateforme.
> Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos *virements* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit). Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de `source_transaction` définie.
### Moyens de paiement asynchrones
Si vous utilisez des *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed) (comme ACH Debit ou SEPA Debit), attendez l’événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) avant de créer un transfert. Contrairement aux paiements indirects, Stripe n’annule pas automatiquement un transfert si le paiement asynchrone associé échoue. Si vous créez un transfert et que le paiement échoue ensuite, le solde de votre plateforme est débité du montant du transfert. Vous devrez alors [annuler le transfert](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) manuellement pour récupérer les fonds.
## Tester l'intégration
#### Cartes bancaires
| Numéro de carte | Scénario | Méthode de test |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 4242424242424242 | Le paiement par carte bancaire aboutit et ne nécessite pas d’authentification. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000002500003155 | Le paiement par carte bancaire requiert une *authentification* (Strong Customer Authentication (SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments. It requires customers to use two-factor authentication like 3D Secure to verify their purchase). | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 4000000000009995 | La carte est refusée avec un code de refus de type `insufficient_funds`. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
| 6205500000000000004 | La carte UnionPay a un numéro d’une longueur variable, allant de 13 à 19 chiffres. | Remplissez le formulaire de paiement par carte bancaire en saisissant le numéro de carte ainsi que la date d’expiration, le CVC et le code postal de votre choix. |
#### Virements avec redirection bancaire
| Moyen de paiement | Scénario | Méthode de test |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bancontact, iDEAL | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification immédiate. | Choisissez un moyen de paiement avec redirection, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Le montant dû est réglé via un moyen de paiement avec redirection et à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification). | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Finaliser le paiement test** sur la page qui s’affiche. |
| Pay by Bank | Votre client ne parvient pas à s’authentifier sur la page de redirection en utilisant un moyen de paiement avec redirection et à notification différée. | Choisissez le moyen de paiement, renseignez les informations demandées, puis confirmez le paiement. Enfin, cliquez sur **Faire échouer le paiement test** sur la page qui s’affiche. |
| BLIK | Les paiements BLIK échouent de diverses manières : échecs immédiats (par exemple, code expiré ou non valide), erreurs différées (refus de la banque) ou expirations du délai (le client n’a pas répondu à temps). | Utiliser des modèles d’e-mail pour [simuler les différents échecs.](https://docs.stripe.com/payments/blik/accept-a-payment.md#simulate-failures) |
#### Prélèvements bancaires
| Moyen de paiement | Scénario | Méthode de test |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Prélèvement automatique SEPA | Le montant dû est réglé par prélèvement automatique SEPA. | Remplissez le formulaire à l’aide du numéro de compte `AT321904300235473204`. Le PaymentIntent confirmé passe d’abord à l’état processing, puis à l’état succeeded trois minutes plus tard. |
| Prélèvement automatique SEPA | L’intention de paiement de votre client passe de l’état `processing` à l’état `requires_payment_method`. | Remplissez le formulaire à l’aide du numéro de compte `AT861904300235473202`. |
Consultez la section consacrée aux [tests](https://docs.stripe.com/testing.md) pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
## Activer la numérisation de carte [Côté client]
> L’activation de la numérisation de cartes est nécessaire pour le processus de vérification de l’application iOS d’Apple. La numérisation de cartes n’est pas obligatoire pour le processus de vérification de l’application d’Android, mais nous recommandons de l’activer.
### iOS
Pour activer la numérisation des cartes pour iOS, définissez le paramètre `NSCameraUsageDescription` (**Confidentialité – Description de l’utilisation de l’appareil photo**) dans le fichier `Info.plist` de votre application et indiquez le motif d’accès à l’appareil photo (« pour numériser des cartes », par exemple).
### (Optional) Android
Pour activer la prise en charge de la numérisation des cartes bancaires, faites une [requête d’accès](https://developers.google.com/pay/api/android/guides/test-and-deploy/request-prod-access) à l’API Google Pay auprès de la [console Google Pay et Wallet](https://pay.google.com/business/console?utm_source=devsite&utm_medium=devsite&utm_campaign=devsite).
- Si vous avez activé Google Pay, la fonctionnalité de numérisation de carte bancaire est automatiquement disponible dans notre interface utilisateur sur les appareils admissibles. Pour en savoir plus sur les appareils admissibles, consultez les [contraintes de l’API Google Pay](https://developers.google.com/pay/payment-card-recognition/debit-credit-card-recognition)
- **Important :** la fonctionnalité de lecture de carte n’apparaît que dans les versions signées avec la même clé de signature enregistrée dans la [console Google Pay et Wallet](https://pay.google.com/business/console). Les versions de test ou de débogage utilisant différentes clés de signature (par exemple, les versions distribuées via Firebase App Tester) n’affichent pas l’option **Lire la carte**. Pour tester la lecture de carte dans les versions préliminaires, vous devez soit :
- Signez vos versions de test avec votre clé de signature de production.
- Ajoutez l’empreinte d’identification de votre clé de signature de test à la console Google Pay et Wallet
## Optional: Activer Apple Pay
### Demander un ID de marchand Apple
Pour obtenir un ID de marchand Apple, [demandez un nouvel identifiant](https://developer.apple.com/account/resources/identifiers/add/merchant) sur le site Web Apple Developer.
Renseignez le formulaire en indiquant une description et un identifiant. La description n’est destinée qu’à votre propre information et vous pourrez la modifier ultérieurement au besoin. En ce qui concerne l’identifiant, Stripe vous recommande d’utiliser le nom de votre application (par exemple, `merchant.com.{{YOUR_APP_NAME}}`).
### Créer un nouveau certificat Apple Pay
Créez un certificat permettant à votre application de chiffrer les données de paiement.
Accédez aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard, cliquez sur **Ajouter une nouvelle application** et suivez le guide.
Téléchargez un fichier CSR (Certificate Signing Request) pour obtenir d’Apple un certificat sécurisé vous autorisant à utiliser Apple Pay.
Un fichier CSR peut émettre exactement un certificat. Si vous changez d’ID de marchand Apple, vous devez accéder aux [paramètres des certificats iOS](https://dashboard.stripe.com/settings/ios_certificates) dans le Dashboard pour obtenir un nouveau fichier CSR et un nouveau certificat.
### Réaliser une intégration avec Xcode
Ajoutez la fonctionnalité Apple Pay à votre application. Dans Xcode, ouvrez vos paramètres de projet, cliquez sur l’onglet **Signature et fonctionnalités**, puis ajoutez **Apple Pay**. Vous serez peut-être alors invité(e) à vous connecter à votre compte développeur. Sélectionnez l’ID du marchand créé plus tôt. Il est désormais possible d’utiliser Apple Pay sur votre application.

Activez la fonctionnalité Apple Pay dans Xcode
### Ajouter Apple Pay
#### Paiement ponctuel
Transmettez votre ID de marchand lorsque vous créez `StripeProvider` :
```javascript
import { StripeProvider } from '@stripe/stripe-react-native';
function App() {
return (
{/* Your app code here */}
);
}
```
Lorsque vous appelez `initPaymentSheet`, transmettez vos paramètres [ApplePayParams](https://stripe.dev/stripe-react-native/api-reference/modules/PaymentSheet.html#ApplePayParams) :
```javascript
await initPaymentSheet({
// ...
applePay: {
merchantCountryCode: 'US',
},
});
```
#### Paiements récurrents
Lorsque vous appelez `initPaymentSheet`, transmettez-le dans un [ApplePayParams](https://stripe.dev/stripe-react-native/api-reference/modules/PaymentSheet.html#ApplePayParams) avec `merchantCountryCode` défini au code de pays de votre entreprise.
In accordance with [Apple’s guidelines](https://developer.apple.com/design/human-interface-guidelines/apple-pay#Supporting-subscriptions) for recurring payments, you must also set a `cardItems` that includes a [RecurringCartSummaryItem](https://stripe.dev/stripe-react-native/api-reference/modules/ApplePay.html#RecurringCartSummaryItem) with the amount you intend to charge (for example, “59.95 USD a month”).
Vous pouvez également adopter des [tokens de marchand](https://developer.apple.com/apple-pay/merchant-tokens/) en définissant `request` et son `type` sur `PaymentRequestType.Recurring`.
Pour en savoir plus sur l’utilisation des paiements récurrents avec Apple Pay, consultez la [documentation d’Apple sur PassKit](https://developer.apple.com/documentation/passkit/pkpaymentrequest).
#### iOS (React Native)
```javascript
const initializePaymentSheet = async () => {
const recurringSummaryItem = {
label: 'My Subscription',
amount: '59.99',
paymentType: 'Recurring',
intervalCount: 1,
intervalUnit: 'month',
// Payment starts today
startDate: new Date().getTime() / 1000,
// Payment ends in one year
endDate: new Date().getTime() / 1000 + 60 * 60 * 24 * 365,
};
const {error} = await initPaymentSheet({
// ...
applePay: {
merchantCountryCode: 'US',
cartItems: [recurringSummaryItem],
request: {
type: PaymentRequestType.Recurring,
description: 'Recurring',
managementUrl: 'https://my-backend.example.com/customer-portal',
billing: recurringSummaryItem,
billingAgreement:
"You'll be billed $59.99 every month for the next 12 months. To cancel at any time, go to Account and click 'Cancel Membership.'",
},
},
});
};
```
### Suivi des commandes
Pour ajouter des informations de [suivi de commande](https://developer.apple.com/design/human-interface-guidelines/technologies/wallet/designing-order-tracking) dans iOS 16 ou les versions ultérieures, configurez une fonction de rappel `setOrderTracking`. Stripe appelle votre déploiement une fois le paiement effectué, mais avant qu’iOS ne ferme le formulaire de paiement Apple Pay.
Dans votre déploiement de la fonction de rappel `setOrderTracking`, récupérez les détails de la commande validée sur votre serveur et transmettez-les à la fonction `completion` indiquée.
Pour en savoir plus sur le suivi des commandes, consultez la [documentation d’Apple sur les commandes Wallet](https://developer.apple.com/documentation/walletorders).
#### iOS (React Native)
```javascript
await initPaymentSheet({
// ...
applePay: {
// ...
setOrderTracking: async complete => {
const apiEndpoint =
Platform.OS === 'ios'
? 'http://localhost:4242'
: 'http://10.0.2.2:4567';
const response = await fetch(
`${apiEndpoint}/retrieve-order?orderId=${orderId}`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
},
);
if (response.status === 200) {
const orderDetails = await response.json();
// orderDetails should include orderIdentifier, orderTypeIdentifier,
// authenticationToken and webServiceUrl
complete(orderDetails);
}
},
},
});
```
## Optional: Activer Google Pay
### Configurer votre intégration
Pour utiliser Google Pay, commencez par activer l’API Google Pay en ajoutant les informations suivantes au libellé `` de votre **AndroidManifest.xml** :
```xml
...
```
Pour en savoir plus, consultez cette page indiquant comment [configurer l’API Google Pay](https://developers.google.com/pay/api/android/guides/setup) pour Android.
### Ajouter Google Pay
Lorsque vous initialisez `PaymentSheet`, définissez `merchantCountryCode` sur le code pays de votre entreprise et définissez `googlePay` sur true.
Vous pouvez également utiliser l’environnement de test en transmettant le paramètre `testEnv`. Vous ne pouvez tester Google Pay que sur un appareil Android physique. Suivez la [documentation React Native](https://reactnative.dev/docs/running-on-device) pour tester votre application sur un appareil physique.
```javascript
const { error, paymentOption } = await initPaymentSheet({
// ...
googlePay: {
merchantCountryCode: 'US',
testEnv: true, // use test environment
},
});
```
## Optional: Personnaliser la fiche
Pour personnaliser le formulaire de paiement, vous devez obligatoirement utiliser l’objet `initPaymentSheet`.
### Appearance
Customize colors, fonts, and so on to match the look and feel of your app by using the [appearance API](https://docs.stripe.com/elements/appearance-api/mobile.md?platform=react-native).
### Nom d’affichage du marchand
Renseignez le nom usuel de votre entreprise en configurant `merchantDisplayName`. Par défaut, il s’agit du nom de votre application.
```javascript
await initPaymentSheet({
// ...
merchantDisplayName: 'Example Inc.',
});
```
### Mode sombre
Par défaut, `PaymentSheet` s’adapte automatiquement aux paramètres d’affichage du système de l’utilisateur (mode clair ou mode sombre). Sur iOS, vous pouvez modifier ce comportement en définissant la propriété `style` sur le mode `alwaysLight` ou `alwaysDark`.
```javascript
await initPaymentSheet({
// ...
style: 'alwaysDark',
});
```
Sur Android, configurez le mode clair ou le mode sombre sur votre application :
```
// force dark
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
// force light
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
```
### Informations de facturation par défaut
Pour définir des valeurs par défaut pour les informations de facturation collectées dans la PaymentSheet, configurez la propriété `defaultBillingDetails`. `PaymentSheet` pré-remplit ses champs avec les valeurs que vous fournissez.
```javascript
await initPaymentSheet({
// ...
defaultBillingDetails: {
email: 'foo@bar.com',
address: {
country: 'US',
},
},
});
```
### Collecter les informations de facturation
Utilisez `billingDetailsCollectionConfiguration` pour spécifier comment vous souhaitez collecter les informations de facturation dans la PaymentSheet.
Vous pouvez collecter le nom, l’adresse e-mail, le numéro de téléphone et l’adresse de votre client.
Si vous n’avez pas l’intention de collecter les valeurs requises par le moyen de paiement, vous devez procéder comme suit :
1. Associez les valeurs qui ne sont pas collectées par `PaymentSheet` à la propriété `defaultBillingDetails`.
1. Définissez `billingDetailsCollectionConfiguration.attachDefaultsToPaymentMethod` sur `true`.
```javascript
await initPaymentSheet({
// ...
defaultBillingDetails: {
email: 'foo@bar.com',
},
billingDetailsCollectionConfiguration: {
name: PaymentSheet.CollectionMode.ALWAYS,
email: PaymentSheet.CollectionMode.NEVER,
address: PaymentSheet.AddressCollectionMode.FULL,
attachDefaultsToPaymentMethod: true
},
});
```
> Consultez votre conseiller juridique au sujet des lois qui s’appliquent à la collecte d’informations. Ne collectez les numéros de téléphone que si vous en avez besoin pour la transaction.
## Optional: Finaliser le paiement dans votre interface utilisateur
Vous pouvez présenter le formulaire de paiement pour la seule collecte des données du moyen de paiement, puis appeler une méthode `confirm` pour mener à bien l’opération de paiement dans l’interface utilisateur de votre application. Cette approche est utile si vous avez intégré un bouton d’achat personnalisé ou si des étapes supplémentaires sont nécessaires après la collecte des informations de paiement.

> Un exemple d’intégration est [disponible sur notre GitHub](https://github.com/stripe/stripe-react-native/blob/master/example/src/screens/PaymentsUICustomScreen.tsx).
1. Tout d’abord, appelez `initPaymentSheet` et transmettez `customFlow: true`. `initPaymentSheet` se résout avec une option de paiement initiale contenant une image et une étiquette représentant le moyen de paiement du client. Mettez à jour votre interface utilisateur avec ces informations.
```javascript
const {
initPaymentSheet,
presentPaymentSheet,
confirmPaymentSheetPayment,
} = useStripe()
const { error, paymentOption } = await initPaymentSheet({
customerId: customer,
customerEphemeralKeySecret: ephemeralKey,
paymentIntentClientSecret: paymentIntent,
customFlow: true,
merchantDisplayName: 'Example Inc.',
});
// Update your UI with paymentOption
```
1. Utilisez `presentPaymentSheet` pour collecter les informations de paiement. Lorsque le client a terminé, le formulaire se ferme et la promesse aboutit. Ajoutez les informations du moyen de paiement sélectionné à votre Interface utilisateur.
```javascript
const { error, paymentOption } = await presentPaymentSheet();
```
1. Utilisez `confirmPaymentSheetPayment` pour confirmer le paiement. L’opération se résout avec le résultat du paiement.
```javascript
const { error } = await confirmPaymentSheetPayment();
if (error) {
Alert.alert(`Error code: ${error.code}`, error.message);
} else {
Alert.alert(
'Success',
'Your order is confirmed!'
);
}
```
Si vous définissez `allowsDelayedPaymentMethods` sur true, les moyens de paiement à [notification différée](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les comptes bancaires étasuniens, seront acceptés. Pour ces moyens de paiement, l’état final du paiement n’est pas connu une fois le processus du `PaymentSheet` achevé, et le paiement peut plus tard aboutir comme échouer. Si vous prenez en charge ces types de moyens de paiement, informez votre client que sa commande est confirmée et ne la traitez (en lui expédiant son produit, par exemple) qu’une fois le paiement reçu.
## Optional: Activer d'autres moyens de paiement
Naviguez vers la page [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts) dans le Dashboard pour configurer les moyens de paiement acceptés par vos comptes connectés. Les modifications apportées aux paramètres par défaut s’appliqueront à tous les comptes connectés, nouveaux et existants.
Consultez les ressources suivantes pour obtenir des informations sur les moyens de paiement :
- [Un guide des moyens de paiement](https://stripe.com/payments/payment-methods-guide#choosing-the-right-payment-methods-for-your-business) pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
- [Fonctionnalités du compte](https://docs.stripe.com/connect/account-capabilities.md) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos comptes connectés.
- Les tableaux des [moyens de paiement pris en charge par produit](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#product-support) pour vérifier que les moyens de paiement que vous avez choisis sont compatibles avec vos produits et tunnels de paiement Stripe.
Pour chaque moyen de paiement, vous pouvez sélectionner l’une des options suivantes de la liste déroulante :
| |
| |
| **Activé par défaut** | Vos comptes connectés acceptent ce moyen de paiement lors du paiement. Si certains moyens de paiement peuvent uniquement être désactivés ou bloqués, cela signifie que vos comptes connectés qui ont *accès au Dashboard* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) doivent les activer depuis leur page des paramètres. |
| **Désactivé par défaut** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils ont la possibilité de l’activer. |
| **Bloqué** | Vos comptes connectés n’acceptent pas ce moyen de paiement lors du paiement. Si vous autorisez vos comptes connectés avec *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer. |

Options des moyens de paiement
Si vous apportez une modification à un moyen de paiement, vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sur **Enregistrer et appliquer** pour mettre à jour vos comptes connectés.

Boîte de dialogue d’enregistrement
### Autoriser vos comptes connectés à gérer leurs moyens de paiement
Stripe recommande d’autoriser vos comptes connectés à personnaliser leurs propres moyens de paiement. Cette option permet à chaque compte connecté ayant *accès au Dashboard Stripe* (Platforms can provide connected accounts with access to the full Stripe Dashboard or the Express Dashboard. Otherwise, platforms build an interface for connected accounts using embedded components or the Stripe API) d’afficher et de mettre à jour leur page de [Moyens de paiement](https://dashboard.stripe.com/settings/payment_methods). Seuls les propriétaires des comptes connectés peuvent personnaliser leurs moyens de paiement. Le Dashboard Stripe affiche l’ensemble des moyens de paiement par défaut que vous avez appliqués à tous les comptes connectés, nouveaux comme existants. Vos comptes connectés peuvent remplacer ces valeurs par défaut, à l’exception des moyens de paiement que vous avez bloqués.
Cochez la case **Personnalisation de compte** pour activer cette option. Vous devez cliquer sur **Vérifier les modifications** dans la barre en bas de l’écran, puis sélectionner **Enregistrer et appliquer** pour mettre à jour ce paramètre.

Case à cocher Personnalisation de compte
### Fonctionnalités liées aux moyens de paiement
Pour permettre à vos comptes connectés d’accepter des moyens de paiement supplémentaires, leurs `Accounts` doivent disposer de fonctionnalités de moyens de paiement actives.
Si vous avez sélectionné l’option Activé par défaut pour un moyen de paiement dans [Gérer les moyens de paiement pour vos comptes connectés](https://dashboard.stripe.com/settings/payment_methods/connected_accounts), Stripe demande automatiquement la fonctionnalité nécessaire pour les nouveaux comptes connectés et les comptes existants qui remplissent les exigences de vérification. Si le compte connecté ne répond pas aux exigences ou si vous souhaitez en garder le contrôle, vous pouvez demander la fonctionnalité manuellement dans le Dashboard ou via l’API.
La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité `card_payments`, avec certaines restrictions et exceptions. Le [tableau des fonctionnalités de moyens de paiement](https://docs.stripe.com/connect/account-capabilities.md#payment-methods) répertorie les moyens nécessitant une vérification supplémentaire.
#### Dashboard
[Recherchez un compte connecté](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#finding-accounts) dans le Dashboard pour modifier ses fonctionnalités et consulter les exigences de vérification en attente.
#### API
Vous pouvez [lister](https://docs.stripe.com/api/capabilities/list.md) les fonctionnalités actuelles d’un compte connecté existant afin de déterminer s’il est nécessaire de demander des fonctionnalités supplémentaires.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities \
-u "<>:"
```
Demandez des fonctionnalités supplémentaires en [mettant à jour](https://docs.stripe.com/api/capabilities/update.md) les fonctionnalités de chaque compte connecté.
```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/us_bank_account_ach_payments \
-u "<>:" \
-d requested=true
```
Il peut y avoir un délai avant que la fonctionnalité demandée ne devienne active. Si la fonctionnalité a des exigences d’activation, la réponse les inclut dans les tableaux `requirements`.
## Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des [fonctionnalités](https://docs.stripe.com/connect/account-capabilities.md) définies sur un compte et de la manière dont un paiement est créé. L’entité de règlement détermine quelles seront les informations à utiliser pour effectuer le paiement. Elles comprennent le libellé du relevé (celui de la plateforme ou celui du compte connecté) affiché sur la carte de crédit du client ou le relevé bancaire pour ce paiement.
Préciser l’entité de règlement vous permet d’être plus explicite concernant les personnes pour lesquelles les paiements doivent être créés. Par exemple, certaines plateformes préfèrent être l’entité de règlement parce que le client final communique directement avec leur plateforme (comme dans le cas des plateformes à la demande). Cependant, certaines plateformes ont des comptes connectés qui communiquent directement avec les clients finaux (par exemple, une vitrine sur une plateforme d’e-commerce). Dans ce scénario, il est plus logique que le compte connecté soit l’entité de règlement.
Vous pouvez définir le paramètre `on_behalf_of` sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez `on_behalf_of` :
- Les paiements sont *réglés* (When funds are available in your Stripe balance) dans le pays et dans la *devise de règlement* (The settlement currency is the currency your bank account uses) du compte connecté.
- La structure des frais appliquée est celle du pays du compte connecté.
- Le libellé de relevé bancaire du compte connecté apparaît sur le relevé de carte bancaire du client.
- Si le compte connecté relève d’un autre pays que celui de la plateforme, l’adresse et le numéro de téléphone du compte connecté sont affichés sur le relevé de carte bancaire du client.
- Le nombre de jours durant lesquels un [solde en attente](https://docs.stripe.com/connect/account-balances.md) est bloqué avant d’être versé dépend du paramètre [delay_days](https://docs.stripe.com/api/accounts/create.md#create_account-settings-payouts-schedule-delay_days) du compte connecté.
> #### API Accounts v2
>
> Vous ne pouvez pas utiliser l’API Accounts v2 pour gérer les paramètres de virement. Utilisez l’API Accounts v1.
Si le paramètre `on_behalf_of` est ignoré, la plateforme est l’entreprise de référence pour le paiement.
> Le paramètre `on_behalf_of` est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme [card_payments](https://docs.stripe.com/connect/account-capabilities.md#card-payments). Les comptes soumis au [contrat de service pour les bénéficiaires](https://docs.stripe.com/connect/service-agreement-types.md#recipient) ne peuvent pas demander `card_payments` ou d’autres fonctionnalités de paiement.
```curl
curl https://api.stripe.com/v1/payment_intents \
-u "<>:" \
-d amount=10000 \
-d currency=usd \
-d "automatic_payment_methods[enabled]"=true \
-d on_behalf_of="{{CONNECTEDACCOUNT_ID}}" \
-d transfer_group=ORDER100
```
## Encaisser des commissions
Lorsque vous créez des paiements et transferts distincts, la plateforme peut encaisser des frais en réduisant le montant transféré sur le compte de destination. Par exemple, imaginons une transaction de service de livraison, avec un paiement adressé au restaurant et un autre au livreur :
1. Le client paie 100 USD.
1. Stripe prélève des frais de 3,20 USD et ajoute les 96,80 USD restants au solde en attente du compte de la plateforme.
1. La plateforme transfère 70 USD vers le compte connecté du restaurant et 20 USD vers le compte connecté du chauffeur.
1. Des frais de plateforme de 6,80 USD restent sur le compte de la plateforme.
> #### Commissions de la plateforme avec ségrégation des fonds
>
> { % if $conditions.can_access_payment_intent_transit_balances_docs %}[Ségrégation des fonds](https://docs.stripe.com/connect/funds-segregation.md#transfer-allocated-funds){ % sinon / %}La ségrégation des fonds est une fonction d’aperçu privé qui vous permet de prélever les frais de demande directement à partir des fonds alloués lors du transfert, offrant ainsi une séparation comptable nette. Contactez votre gestionnaire de compte Stripe pour demander l’accès.

Pour en savoir plus sur le traitement des paiements dans plusieurs devises avec Connect, veuillez consulter la page [Gérer plusieurs devises](https://docs.stripe.com/connect/currencies.md).
## Disponibilité des transferts
Le comportement par défaut consiste à transférer les fonds à partir du solde disponible du compte de la plateforme. Toute tentative de transfert dont le montant dépasse le solde disponible échoue et entraîne une erreur. Pour éviter ce problème, lorsque vous créez un transfert, associez-le à un [paiement](https://docs.stripe.com/api/charges.md) existant en précisant l’ID du paiement comme paramètre `source_transaction`. Avec la valeur `source_transaction`, la demande de transfert aboutit, quel que soit votre solde disponible, si le paiement correspondant n’a pas encore été réglé. Cependant, les fonds ne deviennent disponibles sur le compte de destination que lorsque les fonds du paiement associé peuvent être transférés depuis le compte de la plateforme.
> #### Les transferts avec séparation des fonds
>
> La fonctionnalité en version bêta privée funds segregation nécessite le paramètre `source_transaction` pour les transferts à partir de fonds alloués afin qu’ils soient liés à leur paiement d’origine.
> Si un transfert échoue en raison d’une insuffisance de fonds dans le solde de votre plateforme, l’ajout de fonds ne relance pas automatiquement l’action qui a échoué. Après avoir ajouté des fonds, vous devez à nouveau effectuer les transferts ou les virements ayant échoué.
Si le paiement source a une valeur `transfer_group`, Stripe affecte la même valeur au `transfer_group` du transfert. Si ce n’est pas le cas, Stripe génère une chaîne au format `group_` plus l’ID du PaymentIntent associé (par exemple : `group_pi_2NHDDD589O8KAxCG0179Du2s`), puis affecte cette chaîne en tant que `transfer_group` pour le paiement et le transfert.
> Vous devez spécifier la `source_transaction` lorsque vous créez un transfert. Vous ne pourrez pas mettre à jour cet attribut par la suite.
```curl
curl https://api.stripe.com/v1/transfers \
-u "<>:" \
-d amount=7000 \
-d currency=usd \
-d source_transaction="{{CHARGE_ID}}" \
-d destination="{{CONNECTEDACCOUNT_ID}}"
```
Vous pouvez obtenir l’ID du paiement à partir du *PaymentIntent* (API object that represents your intent to collect payment from a customer, tracking charge attempts and payment state changes throughout the process) :
- Obtenez l’[attribut latest_charge](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) du PaymentIntent. Cet attribut est l’ID du paiement le plus récent associé au PaymentIntent.
- [Créez une requête de liste des paiements](https://docs.stripe.com/api/charges/list.md), en spécifiant le `payment_intent` dans la requête. Cette méthode renvoie l’intégralité des données de tous les paiements associés au PaymentIntent.
Pour utiliser ce paramètre :
- Le montant du transfert ne doit pas dépasser celui du paiement source
- Vous pouvez créer plusieurs transferts avec la même `source_transaction`, tant que la somme des transferts ne dépasse pas le montant du paiement source
- Le transfert prend l’état en attente du paiement associé : si les fonds du paiement deviennent disponibles dans X jours, le règlement que reçoit le compte de destination Stripe pour le transfert devient également disponible dans X jours
- Stripe crée automatiquement le `transfer_group` pour vous
- La devise de l’opération sur solde associée au paiement doit correspondre à celle du transfert
Les *moyens de paiement asynchrones* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed), comme *ACH* (Automated Clearing House (ACH) is a US financial network used for electronic payments and money transfers that doesn’t rely on paper checks, credit card networks, wire transfers, or cash), peuvent échouer après toute demande de transfert ultérieure. Pour ces paiements, évitez d’utiliser `source_transaction`. Attendez plutôt qu’un événement [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded) soit déclenché avant de transférer les fonds. Si vous devez utiliser `source_transaction` avec ces paiements, activez une fonctionnalité permettant de gérer les échecs de paiement.
Lorsqu’un paiement utilisé comme `source_transaction` échoue, des fonds provenant du solde de compte de votre plateforme sont transférés vers le compte connecté pour couvrir le paiement. Pour récupérer ces fonds, [annulez](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reverse-transfers) le transfert associé à l’échec de la `source_transaction`.
## Émission de remboursements
Les paiements créés sur votre plateforme peuvent être remboursés à l’aide de la *clé secrète* (Stripe APIs use your secret API key to authenticate requests from your server; you can use this key to make any API call on behalf of your account, such as creating a charge or performing a refund) de votre plateforme. Cependant, le remboursement d’un paiement n’a aucun impact sur les transferts associés. Il incombe à votre plateforme de rapprocher tout montant qui lui est dû en réduisant le montant des transferts ultérieurs ou en [annulant les transferts](https://docs.stripe.com/connect/separate-charges-and-transfers.md#reversing-transfers).
> #### Remboursements avec ségrégation des fonds
>
> La fonction d’aperçu privé funds segregation utilise les fonds alloués pour les remboursements avant de débiter le solde des paiements de votre plateforme, offrant ainsi une séparation comptable nette.
```curl
curl https://api.stripe.com/v1/refunds \
-u "<>:" \
-d charge="{{CHARGE_ID}}"
```
## Annuler les transferts
Connect prend en charge la possibilité [d’annuler les transferts](https://docs.stripe.com/api.md#create_transfer_reversal) effectués sur les comptes connectés, totalement ou en partie (en définissant la valeur `amount`). N’utilisez les annulations de transfert que pour les remboursements ou les litiges liés au paiement, ou pour corriger des erreurs de transfert.
```curl
curl https://api.stripe.com/v1/transfers/{{TRANSFER_ID}}/reversals \
-u "<>:" \
-d amount=7000
```
Les annulations de transferts ajoutent le montant spécifié (ou la totalité du montant) au solde disponible de la plateforme, ce qui réduit en conséquence le solde disponible du compte connecté. Il est possible d’annuler un transfert uniquement si le solde disponible du compte connecté est supérieur au montant de l’annulation ou si les [réserves du compte connecté](https://docs.stripe.com/connect/account-balances.md#understanding-connected-reserve-balances) sont activées.
Si l’annulation du transfert nécessite une conversion de devise et que le montant de l’annulation entraîne un solde nul après la conversion, une erreur est renvoyée.
La désactivation des remboursements pour un compte connecté n’empêchera pas le traitement des annulations de transfert.
## See also
- [Gérer plusieurs devises](https://docs.stripe.com/connect/currencies.md)
- [Libellés de relevé bancaire avec Connect](https://docs.stripe.com/connect/statement-descriptors.md)
- [Comprendre les soldes de compte Connect](https://docs.stripe.com/connect/account-balances.md)
- [Litiges sur les plateformes Connect](https://docs.stripe.com/connect/disputes.md)