Accéder directement au contenu
Créez un compte
ou
connectez-vous
Le logo de la documentation Stripe
/
Demander à l’IA
Créer un compte
Connectez-vous
Commencer
Paiements
Revenus
Plateformes et places de marché
Gestion des fonds
Ressources de développement
AperçuDécouvrez tous les produits
Commencer à développer
Commencer le développement
    Configurez l'environnement de développement
    Envoyer votre première requête à l'API
    Accepter un paiement
    Créer et tester de nouvelles fonctionnalités
    Liste de contrôle pour la mise en production
Exemples de projets
À propos des API
Créer avec un LLM
Utiliser Stripe sans codage
Configurer Stripe
Créer un compte
Dashboard Web
Dashboard mobile
Migrer vers Stripe
Gérer le risque de fraude
Comprendre la fraude
Radar pour la protection contre la fraude
Gérer les litiges
Vérifier l'identité
AccueilCommencerStart developing

Accepter un paiement

Acceptez les paiements en ligne en toute sécurité.

Créez un formulaire de paiement ou utilisez une page de paiement préconfigurée pour commencer à accepter les paiements en ligne.

Intégrez l’interface utilisateur de paiement préconfigurée de Stripe au processus de paiement de votre application Android avec la classe PaymentSheet.

Configurer Stripe
Côté serveur
Côté client

Tout d’abord, il vous faut un compte Stripe. Inscrivez-vous.

Côté serveur

Pour cette intégration, votre serveur doit être doté de points de terminaison qui communiquent avec l’API Stripe. Utilisez les bibliothèques officielles pour accéder à l’API Stripe à partir de votre serveur :

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Côté client

La trousse SDK Stripe Android est à code source libre et possède une documentation complète.

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

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

Remarques

Pour obtenir de plus amples informations sur la version la plus récente de la trousse 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.

Activer les moyens de paiement

Accédez aux paramètres des moyens de paiement et activez les moyens de paiement que vous souhaitez prendre en charge. Vous devez activer au moins un moyen de paiement pour créer un PaymentIntent.

Par défaut, Stripe active les cartes et les autres modes de paiement courants qui peuvent vous permettre d’atteindre davantage de clients. Nous vous recommandons toutefois d’activer d’autres modes de paiement pertinents pour votre entreprise et vos clients. Consultez la page Prise en charge des modes de paiement pour en savoir plus sur la prise en charge des produits et des modes de paiement, et notre page de tarification pour prendre connaissance des frais que nous appliquons.

Ajouter un point de terminaison
Côté serveur

Remarque

Pour afficher PaymentSheet avant de créer un PaymentIntent, consultez la Collecter les détails du paiement avant de créer un Intent.

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

  1. PaymentIntent : Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise cet objet qui suit les tentatives de débit et les changements d’état du paiement tout au long du processus.

  2. (Facultatif) Client : Pour configurer un mode de paiement pour les paiements futurs, vous devrez l’associer à un client. Créez un objet Customer lorsque votre client crée un compte auprès de votre entreprise. Si votre client effectue un paiement en tant qu’invité, vous pourrez créer un objet Customer avant le paiement, puis l’associer ultérieurement à votre représentation interne du compte du client.

  3. (Facultatif) Clé éphémère du client : L’objet Customer contient des informations sensibles qu’il n’est pas possible de récupérer directement à partir d’une application. Une clé éphémère permet d’accorder à la trousse SDK un accès temporaire à l’objet Customer.

Remarques

Si vous n’enregistrez jamais les cartes des clients et que vous n’autorisez pas vos clients réguliers à réutiliser les cartes enregistrées, vous pourrez exclure les objets Customer et Customer Ephemeral Key de votre intégration.

Pour des raisons de sécurité, votre application ne peut pas créer ces objets. Ajoutez plutôt un point de terminaison sur votre serveur qui :

  1. Récupère l’objet Customer ou en crée un nouveau.
  2. Crée une clé éphémère pour l’objet Customer.
  3. Création d’un PaymentIntent avec les paramètres amount, currency, customer. Vous pouvez également inclure le paramètre automatic_payment_methods. Stripe active sa fonctionnalité par défaut dans la dernière version de l’API.
  4. Renvoi de la clé secrète du client du Payment Intent, de l’objet secret de la clé éphémère, de l’id du client et de votre clé publiable à votre application.

Les modes de paiement présentés aux clients lors du processus de paiement sont également compris dans le PaymentIntent. Les modes de paiement peuvent être récupérés par Stripe à partir de vos paramètres Dashboard, ou vous pouvez les ajouter manuellement. Quelle que soit l’option que vous choisissez, sachez que la devise transmise dans le PaymentIntent filtre les modes de paiement présentés au client. Par exemple, si vous transmettez eur dans le PaymentIntent et que vous avez activé OXXO dans le Dashboard, OXXO ne sera pas présenté au client, car OXXO ne prend pas en charge les paiements eur.

À moins que votre intégration ne nécessite du code pour la présentation des modes de paiement, Stripe vous recommande l’option automatisée. En effet, Stripe évalue la devise, les restrictions sur les modes de paiement et d’autres paramètres pour déterminer la liste des modes de paiement pris en charge. Les modes 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 priorisés.

Remarques

Testez une mise en œuvre fonctionnelle de ce point de terminaison sur Glitch.

Vous pouvez gérer les moyens de paiement à partir du Dashboard. Stripe gère le retour des moyens de paiement admissibles en fonction de facteurs tels que le montant, la devise et le flux de paiement de la transaction. Le PaymentIntent est créé à l’aide des moyens de paiement configurés dans le Dashboard. Si vous ne souhaitez pas utiliser le Dashboard ou si vous souhaitez préciser des moyens de paiement manuellement, vous pouvez les répertorier à l’aide de l’attribut payment_method_types.

Command Line
curl
# 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-05-28.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"=1099 \ -d "currency"="eur" \ # 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 \

Collecter les informations de paiement
Côté client

Avant d’afficher le Payment Element mobile, votre page de paiement doit :

  • Afficher les produits achetés et le montant total
  • Collecter toutes les informations de livraison requises à l’aide du composant Address Element
  • Inclure un bouton de paiement pour afficher l’interface utilisateur de Stripe

Lancez 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é publique à partir du point de terminaison que vous avez créé à l’étape précédente. Configurez la clé publique à l’aide du paramètre PaymentConfiguration et utilisez les autres lorsque vous présentez 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 // Add the following lines to build.gradle to use this example's networking library: // implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1' import com.github.kittinunf.fuel.httpPost import com.github.kittinunf.fuel.json.responseJson import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult import com.github.kittinunf.result.Result @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) { "Your backend endpoint/payment-sheet".httpPost().responseJson { _, _, result -> if (result is Result.Success) { val responseJson = result.get().obj() paymentIntentClientSecret = responseJson.getString("paymentIntent") customerConfig = PaymentSheet.CustomerConfiguration( id = responseJson.getString("customer"), ephemeralKeySecret = responseJson.getString("ephemeralKey") ) val publishableKey = responseJson.getString("publishableKey") PaymentConfiguration.init(context, publishableKey) } } } } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps }

Lorsque le client touche votre bouton de paiement, appelez presentWithPaymentIntent pour présenter 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 // Add the following lines to build.gradle to use this example's networking library: // implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1' import com.github.kittinunf.fuel.httpPost import com.github.kittinunf.fuel.json.responseJson import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult import com.github.kittinunf.result.Result @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) { "Your backend endpoint/payment-sheet".httpPost().responseJson { _, _, result -> if (result is Result.Success) { val responseJson = result.get().obj() paymentIntentClientSecret = responseJson.getString("paymentIntent") customerConfig = PaymentSheet.CustomerConfiguration( id = responseJson.getString("customer"), ephemeralKeySecret = responseJson.getString("ephemeralKey") ) val publishableKey = responseJson.getString("publishableKey") PaymentConfiguration.init(context, 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 à true, les modes de paiement à notification différée, comme les comptes bancaires américains, seront acceptés. Pour ces modes de paiement, l’état final du paiement n’est pas connu à la fin de la PaymentSheet. À la place, il réussit ou échoue plus tard. Si vous prenez en charge ces types de modes de paiement, informez le client que sa commande est confirmée et ne la traitez (par exemple, n’expédiez son produit) 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 sur les webhooks pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par courriel à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.

Écoutez ces événements plutôt que d’attendre un rappel de votre client. Du côté client, il arrive en effet que l’utilisateur ferme la fenêtre de son navigateur ou quitte l’application avant même l’exécution du rappel, et des clients malveillants pourraient 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 intégration.

En plus de gérer l’événement payment_intent.succeeded, nous vous recommandons de gérer les autres événements suivants lorsque vous encaissez des paiements à l’aide du Payment Element :

ÉvénementDescriptionAction
payment_intent.succeededEnvoyé lorsqu’un client a effectué un paiement.Envoyez au client une confirmation de commande et traitez sa commande.
payment_intent.processingEnvoyé lorsqu’un client a entrepris un paiement, mais qu’il ne l’a pas encore finalisé. Dans la plupart des cas, cet événement est envoyé lorsque le client entreprend 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, nous vous recommandons de traiter la commande sans attendre que le paiement soit effectué.
payment_intent.payment_failedEnvoyé lorsqu’un client tente d’effectuer un paiement, mais que le paiement échoue.Si un paiement passe de l’état processing à l’état payment_failed, proposez au client de retenter le paiement.

Tester l'intégration

Numéro de carteScénarioComment tester
Le paiement par carte est réussi et ne nécessite pas d’authentification.Remplissez le formulaire de paiement par carte de crédit en saisissant le numéro de carte de crédit ainsi qu’une date d’expiration, un CVC et un code postal de votre choix.
Le paiement par carte requiert une authentification.Remplissez le formulaire de paiement par carte de crédit en saisissant le numéro de carte de crédit ainsi qu’une date d’expiration, un CVC et un 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 de crédit en saisissant le numéro de carte de crédit ainsi qu’une date d’expiration, un CVC et un code postal de votre choix.
Le numéro de carte UnionPay a une longueur variable de 13 à 19 chiffres.Remplissez le formulaire de paiement par carte de crédit en saisissant le numéro de carte de crédit ainsi qu’une date d’expiration, un CVC et un code postal de votre choix.

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

FacultatifActiver Link

FacultatifActiver Google Pay

FacultatifActiver le balayage de carte

FacultatifActiver les paiements ACH

FacultatifPersonnaliser la feuille

FacultatifGérer la déconnexion de l'utilisateur

FacultatifFinaliser le paiement dans votre interface utilisateur

FacultatifActiver la récupération du code CVC lors de la confirmation

Cette page vous a-t-elle été utile?
OuiNon
Besoin d'aide? Contactez le service d'assistance.
Rejoignez notre programme d'accès anticipé.
Consultez notre journal des modifications.
Des questions? Contactez l'équipe commerciale.
GML? Lire llms.txt.
Optimisé par Markdoc
Code quickstart
Guides associés
API Elements Appearance
Plus de scénarios de paiement
Fonctionnement des cartes
Produits utilisés
Payments
Elements
Checkout