Accéder directement au contenu
Créez un compte
ou
connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compte
Connectez-vous
Démarrer
Paiements
Revenus
Plateformes et places de marché
Gestion de fonds
Ressources pour les développeurs
Aperçu
Démarrer avec Connect
Principes de base de l'intégration
Exemples d'intégration
Gestion de compte
Inscrire des comptes
Configurer les dashboards des comptes
Utiliser les types de comptes connectés
Traitement des paiements
Accepter des paiements
    Créer un paiement
      Paiements directs
      Paiement indirect
      Paiements et transferts distincts
    Définir des libellés de relevé bancaire
    Définir les codes de catégories de marchands (CCM)
    Gérer plusieurs devises
    Créer des liens de paiement avec Connect
    Utiliser Radar avec Connect
    Litiges sur Connect
    Créer des abonnements
    Créer des factures
    Configurations de moyens de paiement multiples
    Intégrer le composant des paramètres des moyens de paiement
    Solde du compte
Effectuer des virements vers des comptes
Administration de plateforme
Gérer votre plateforme Connect
Formulaires fiscaux pour votre plateforme Connect
AccueilPlateformes et places de marchéAccept paymentsCreate a charge

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 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.

Remarque

{ % if $conditions.can_access_payment_intent_transit_balances_docs %}Ségrégation des fonds{ % 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 :

Allemagne
Australie
Autriche
Belgique
Brésil
Bulgarie
Canada
Chypre
Croatie
Danemark
Espagne
Estonie
États-Unis
Finlande
France
Grèce
Hongrie
Irlande
Italie
Japon
Lettonie
Liechtenstein
Lituanie
Luxembourg
Malaisie
Malte
Mexique
Norvège
Nouvelle-Zélande
Pays-Bas
Pologne
Portugal
République tchèque
Roumanie
Royaume-Uni
Singapour
Slovaquie
Slovénie
Suède
Suisse

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.

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.

Configurer Stripe
Côté serveur
Cô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 :

Command Line
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Côté client

Le SDK Stripe Android est disponible en open source et fait l’objet d’une documentation complète.

Pour installer le SDK, ajoutez stripe-android au bloc dependencies de votre fichier app/build.gradle :

build.gradle.kts
Kotlin
Groovy
No results
plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:21.26.1") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:21.26.1") }

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 savoir quand une nouvelle version est disponible, surveillez les versions du référentiel.

Configurez le SDK avec votre clé publique Stripe de façon à ce qu’il puisse envoyer des requêtes à l’API Stripe, par exemple à la sous-classe Application :

Kotlin
Java
No results
import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext,
"pk_test_TYooMQauvdEDq54NiTphI7jx"
) } }

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 endpoint
Côté serveur

Cette intégration utilise trois objets de l’API Stripe :

  1. 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.
  2. 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.
  3. 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.
  2. Crée une clé éphémère pour le client.
  3. 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.
  4. 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.

You can fork and deploy an implementation of this endpoint on CodeSandbox for testing.

Command Line
curl
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -H "Stripe-Version: 2025-08-27.basil" \ -X "POST" \ -d "customer"=
{{CUSTOMER_ID}}
\ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -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" \

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
  • Inclure un bouton de règlement pour afficher l’interface utilisateur de Stripe

Initialisez une instance PaymentSheet dans la méthode onCreate de votre classe CheckoutActivity, puis transmettez une méthode pour gérer le résultat.

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 éphémère, l’ID du client 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 le PaymentSheet.

import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import 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<PaymentSheet.CustomerConfiguration?>(null) } var paymentIntentClientSecret by remember { mutableStateOf<String?>(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( id = networkResult.customer, ephemeralKeySecret = networkResult.ephemeralKey ) 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 pour afficher le formulaire de paiement. Une fois que le client a effectué le paiement, le formulaire se ferme et le PaymentSheetResultCallback est appelé avec un PaymentSheetResult.

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 @OptIn(ExperimentalCustomerSessionApi::class) @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() val context = LocalContext.current var customerConfig by remember { mutableStateOf<PaymentSheet.CustomerConfiguration?>(null) } var paymentIntentClientSecret by remember { mutableStateOf<String?>(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( id = networkResult.customer, ephemeralKeySecret = networkResult.ephemeralKey ) 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") } } }

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.

Gérer les événements post-paiement
Cô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_intent.succeeded, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :

ÉvénementDescriptionAction
payment_intent.succeededEnvoyé lorsqu’un client effectue un paiement avec succès.Envoyez au client une confirmation de commande et traitez sa commande.
payment_intent.processingEnvoyé 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_failedEnvoyé 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 et en précisant le transfer_group utilisé.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/transfers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=7000 \ -d currency=usd \ -d destination=
{{CONNECTED_ACCOUNT_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.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/transfers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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é.

Remarque

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 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_transaction définie.

Tester l'intégration

Numéro de carteScénarioMéthode de test
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.
Le paiement par carte bancaire requiert une 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.
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.
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.

Consultez la section consacrée aux tests pour obtenir des informations supplémentaires sur la manière de tester votre intégration.

FacultatifActiver Google Pay

Configurer votre intégration

Pour utiliser Google Pay, commencez par activer l’API Google Pay en ajoutant les informations suivantes au libellé <application> de votre AndroidManifest.xml :

AndroidManifest.xml
<application> ... <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </application>

Pour en savoir plus, consultez cette page indiquant comment configurer l’API Google Pay pour Android.

Ajouter Google Pay

Pour ajouter Google Pay à votre intégration, transmettez un PaymentSheet.GooglePayConfiguration avec votre environnement Google Pay (en mode production ou en mode test), ainsi que le code pays de votre entreprise lors de l’initialisation de PaymentSheet.Configuration.

Kotlin
Java
No results
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 tests par le biais de sa suite de cartes de test. La suite de test prend en charge l’utilisation des cartes de test Stripe.

Vous pouvez tester Google Pay à l’aide d’un appareil Android physique. Assurez-vous d’avoir un appareil dans un pays où Google Pay est pris en charge et connectez-vous à un compte Google sur votre appareil de test avec une vraie carte enregistrée dans Google Wallet.

FacultatifPersonnaliser la fiche

Pour personnaliser le formulaire de paiement, vous devez obligatoirement utiliser l’objet PaymentSheet.Configuration.

Appearance

Personnalisez les couleurs, les polices et même plus afin de vous adapter à l’apparence de votre application en utilisant l’API Appearance.

Mise en page des moyens de paiement

Configurez la mise en page des moyens de paiement dans la feuille à l’aide de paymentMethodLayout. Vous pouvez les afficher horizontalement, verticalement ou laisser Stripe optimiser la mise en page automatiquement.

Kotlin
Java
No results
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.

Nom d’affichage de l’entreprise

Spécifiez un nom d’entreprise à afficher pour le client en définissant merchantDisplayName. Par défaut, il s’agit du nom de votre application.

Kotlin
Java
No results
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
Java
No results
// 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
Java
No results
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
Java
No results
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()

Remarque

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.

FacultatifFinaliser 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.

Remarque

A sample integration is available on our GitHub.

  1. Tout d’abord, initialisez PaymentSheet.FlowController au lieu de PaymentSheet en utilisant l’une des méthodes Builder.
Android (Kotlin)
Android (Java)
No results
class CheckoutActivity : AppCompatActivity() { private lateinit var flowController: PaymentSheet.FlowController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) flowController = PaymentSheet.FlowController.Builder( paymentResultCallback = ::onPaymentSheetResult, paymentOptionCallback = ::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(). Cette propriété contient une image et une étiquette représentant le moyen de paiement actuellement sélectionné par le client.
Android (Kotlin)
Android (Java)
No results
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 pour collecter les informations de paiement. Lorsque le client a terminé, le formulaire se ferme et appelle le paymentOptionCallback 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)
Android (Java)
No results
// ... flowController.presentPaymentOptions() // ... private fun onPaymentOption(paymentOption: 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 pour mener à bien le paiement. Lorsque le client a terminé, le formulaire se ferme et appelle le paymentResultCallback transmis plus tôt dans create.
Android (Kotlin)
Android (Java)
No results
// ... 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, 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.

FacultatifActiver d'autres moyens de paiement

Naviguez vers la page Gérer les moyens de paiement pour vos comptes connectés 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 pour vous aider à choisir les moyens de paiement adaptés à votre plateforme.
  • Fonctionnalités du compte 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 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éfautVos 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 doivent les activer depuis leur page des paramètres.
Désactivé par défautVos 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 à 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 à gérer leurs propres moyens de paiement, ils n’ont pas la possibilité de l’activer.
Options de liste déroulante pour les moyens de paiement, chacune affichant une option disponible (Bloqué, Activé par défaut, Désactivé par défaut)

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 qui s'affiche après avoir cliqué sur le bouton Enregistrer, avec une liste des modifications apportées par l'utilisateur

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 d’afficher et de mettre à jour leur page de Moyens de paiement. 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.

Capture d'écran de la case à cocher pour permettre aux propriétaires connectés de personnaliser leurs moyens de paiement

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, vous devez vous assurer qu’ils disposent de fonctionnalités actives pour chaque moyen de paiement. La plupart des moyens de paiement ont les mêmes exigences de vérification que la fonctionnalité card_payments, avec quelques restrictions et exceptions. Le tableau des fonctionnalités des modes de paiement répertorie les moyens de paiement qui nécessitent une vérification supplémentaire par rapport aux cartes.

Accédez aux paramètres de paiement du compte connecté dans le Dashboard pour demander des fonctionnalités sur vos comptes connectés nouveaux et existants pour chaque combinaison de moyen de paiement et de pays.

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_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 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_behalf_of est ignoré, la plateforme est l’entreprise de référence pour le paiement.

Mise en garde

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. Les comptes soumis au contrat de service pour les bénéficiaires ne peuvent pas demander card_payments ou d’autres fonctionnalités de paiement.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=10000 \ -d currency=usd \ -d "automatic_payment_methods[enabled]"=true \ -d on_behalf_of=
{{CONNECTED_ACCOUNT_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.
  2. 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.
  3. La plateforme transfère 70 USD vers le compte connecté du restaurant et 20 USD vers le compte connecté du chauffeur.
  4. 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{ % 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.

Répartition des frais entre le compte de la plateforme et les transferts pour les comptes connectés

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_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 fonction d’aperçu privé { % if $conditions.can_access_payment_intent_transit_balances_docs %}ségrégation des fonds{ % else / %}segregation{ % /if %} nécessite le paramètre source_transaction pour transferts des fonds alloués afin qu’ils soient liés à leur paiement initial.

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_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.

Remarque

Vous devez spécifier la source_transaction lorsque vous créez un transfert. Vous ne pourrez pas mettre à jour cet attribut par la suite.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/transfers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=7000 \ -d currency=usd \ -d source_transaction=
{{CHARGE_ID}}
\ -d destination=
{{CONNECTED_ACCOUNT_ID}}

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_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, comme ACH, 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 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 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 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.

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.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/refunds \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d charge=
{{CHARGE_ID}}

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.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/transfers/
{{TRANSFER_ID}}
/reversals
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=7000

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.

Voir aussi

  • Gérer plusieurs devises
  • Libellés de relevé bancaire avec Connect
  • Comprendre les soldes de compte Connect
  • Litiges sur les plateformes Connect
Cette page vous a-t-elle été utile ?
OuiNon
  • Besoin d'aide ? Contactez le service Support.
  • Rejoignez notre programme d'accès anticipé.
  • Consultez notre log des modifications.
  • Des questions ? Contactez l'équipe commerciale.
  • LLM ? Lire llms.txt.
  • Propulsé par Markdoc