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.
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 frais convient mieux aux places de marché qui doivent répartir les paiements entre plusieurs parties, comme DoorDash, une plateforme de livraison de plats à domicile.
Stripe prend en charge des paiements et transferts distincts dans les régions suivantes :
Dans la plupart des cas, votre plateforme et le compte connecté doivent se trouver dans la même région. Toute tentative de transfert de fonds au-delà d’une frontière non autorisée renvoie une erreur. Pour plus d’informations sur la prise en charge interrégionale, consultez la page Transferts internationaux. Vous ne devez utiliser les transferts qu’en combinaison avec les cas d’utilisation autorisés pour les paiements, les recharges et les frais. Nous vous recommandons d’utiliser les paiements et transferts distincts pour les comptes connectés qui ont accès au Dashboard Express ou aucun accès au Dashboard.
Version bêta privée
Vous pouvez utiliser les paiements indirects, sans le paramètre on_
, lorsque votre plateforme et votre compte connecté se trouvent dans des pays différents, aux États-Unis, au Royaume-Uni et dans l’UE. Pour un accès anticipé, contactez-nous.

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. Consultez notre exemple d’intégration sur GitHub.
Configurer StripeCôté serveurCôté client
Pour commencer, vous devez créer un compte Stripe. S’inscrire.
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 :
Côté client
Le SDK iOS de Stripe est disponible en open source et fait l’objet d’une documentation complète. Il est également compatible avec les applications prenant en charge iOS 13 et les versions ultérieures.
Remarque
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 sur GitHub. Pour recevoir une notification lors de la publication d’une nouvelle version, surveillez les versions à partir du référentiel.
Configurez le SDK avec votre clé publiable Stripe au démarrage de votre application. Cela lui permet d’envoyer des requêtes à l’API Stripe.
Remarque
Utilisez vos clés de test lors de vos activités de test et de développement et vos clés du mode production pour la publication de votre application.
Ajouter un endpointCôté serveur
Cette intégration utilise trois objets de l’API Stripe :
- Un PaymentIntent. 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.
- Un objet Customer (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.
- 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 :
- Récupère l’objet Customer ou en crée un nouveau.
- Crée une clé éphémère pour le client.
- Crée un objet PaymentIntent, en précisant le montant, la devise, le client, ainsi qu’un groupe de transfert à associer ultérieurement au transfert de fonds.
- Renvoie la clé secrète du client du composant Payment Intent, le
secret
de la clé éphémère, l’ID du client et votre clé publiable à 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, 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.
Intégrer la fiche de paiementCô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 pour collecter toutes les informations de livraison requises auprès du client
- Ajouter un bouton de paiement pour afficher l’interface utilisateur de Stripe
Si la valeur de PaymentSheetResult
est .
, 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, 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 redirectionCô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é 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.
Gérer les événements post-paiementCôté serveur
Stripe envoie un événement payment_intent.succeeded à l’issue du paiement. Utilisez l’outil de webhook du Dashboard ou suivez le guide consacré aux webhooks 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 avec une seule et même intégration.
En plus de l’événement payment_
, 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 | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et traitez sa commande. |
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_ ou payment_ . | 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 | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement passe de l’état processing à payment_ , proposez au client de retenter le paiement. |
Créer un transfertCôté serveur
Sur votre serveur, envoyez des fonds de votre compte vers un compte connecté en créant un transfert et en précisant le transfer_
utilisé.
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_
.
Options de transfert
Vous pouvez attribuer n’importe quelle valeur à la chaîne transfer_
, mais elle doit représenter une seule action commerciale. Vous pouvez également effectuer un transfert sans paiement associé ou sans transfer_
, par exemple, lorsque vous devez payer un fournisseur, mais qu’il n’y a pas de paiement client associé.
Remarque
Le paramètre transfer_
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_
du transfert.
Par défaut, une demande de transfert échoue lorsque le montant dépasse le solde de compte disponible 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, 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.
Remarque
Si vous utilisez les paiements et transferts distincts, tenez compte de cela lorsque vous planifiez la fréquence de vos virements. Les virements automatiques peuvent interférer avec les transferts qui n’ont pas de source_
définie.
Tester l'intégration
Consultez la section consacrée aux tests pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
Sélectionner l’entité de règlement
Le choix de l’entité de règlement dépend des fonctionnalités 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_
sur l’ID d’un compte connecté pour faire de ce compte l’entité de règlement pour le paiement. Lorsque vous utilisez on_
:
- Les paiements sont réglés dans le pays et dans la devise de règlement 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 est bloqué avant d’être versé dépend du paramètre delay_days du compte connecté.
Si le paramètre on_
est ignoré, la plateforme est l’entreprise de référence pour le paiement.
Mise en garde
Le paramètre on_
est uniquement pris en charge pour les comptes connectés disposant d’une fonctionnalité de paiement comme card_payments. Les comptes soumis au contrat de service pour les bénéficiaires ne peuvent pas demander card_
ou d’autres fonctionnalités de paiement.
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 :
- Le client paie 100 USD.
- 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.
- La plateforme transfère 70 USD vers le compte connecté du restaurant et 20 USD vers le compte connecté du chauffeur.
- Des frais de plateforme de 6,80 USD restent sur le compte de la plateforme.

Pour en savoir plus sur le traitement des paiements dans plusieurs devises avec Connect, veuillez consulter la page Gérer plusieurs devises.
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 existant en précisant l’ID du paiement comme paramètre source_
. Avec la valeur source_
, 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.
Remarque
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_
, Stripe affecte la même valeur au transfer_
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_
), puis affecte cette chaîne en tant que transfer_
pour le paiement et le transfert.
Remarque
Vous devez spécifier la source_
lorsque vous créez un transfert. Vous ne pourrez pas mettre à jour cet attribut par la suite.
Vous pouvez obtenir l’ID du paiement à partir du PaymentIntent :
- Obtenez l’attribut 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, en spécifiant le
payment_
dans la requête. Cette méthode renvoie l’intégralité des données de tous les paiements associés au PaymentIntent.intent
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_
, tant que la somme des transferts ne dépasse pas le montant du paiement sourcetransaction - 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_
pour vousgroup - La devise de l’opération sur solde associée au paiement doit correspondre à celle du transfert
Les moyens de paiement asynchrones, comme ACH, peuvent échouer après toute demande de transfert ultérieure. Pour ces paiements, évitez d’utiliser source_
. Attendez plutôt qu’un événement charge.succeeded soit déclenché avant de transférer les fonds. Si vous devez utiliser source_
avec ces paiements, activez une fonctionnalité permettant de gérer les échecs de paiement.
Lorsqu’un paiement utilisé comme source_
é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 le transfert associé à l’échec de la source_
.
Émission de remboursements
Les paiements créés sur votre plateforme peuvent être remboursés à l’aide de la clé secrète 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.
Annuler les transferts
Connect prend en charge la possibilité d’annuler les transferts 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.
Les annulations de transferts rajoutent le montant spécifié (ou l’intégralité du montant) au solde disponible de la plateforme, réduisant ainsi le solde disponible du compte connecté. Il n’est possible d’annuler un transfert que si le solde disponible du compte connecté est supérieur au montant de l’annulation ou si les réserves connectées 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.