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
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageManaged Payments
Utiliser Payment Links
Créer une page de paiement
Développer une intégration avancée
Développer une intégration dans l'application
    Présentation
    Payment Sheet
      Accepter des paiements dans l'application
      Ajouter des moyens de paiement personnalisés
      Personnaliser l'apparence
      Finaliser les paiements sur le serveur
      Enregistrer les coordonnées bancaires lors du paiement
      Configurer des paiements futurs
      Filtrer par marque de carte bancaire
    Composant Payment Element intégré
    Utiliser les redirections pour les achats intégrés à l'application
    Collecter les adresses
    Cartes bancaires américaines et canadiennes
Moyens de paiement
Ajouter des moyens de paiement
Gérer les moyens de paiement
Paiement accéléré avec Link
Interfaces de paiement
Payment Links
Checkout
Elements pour le web
Elements intégrés à l'application
Scénarios de paiement
Gérer plusieurs devises
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Paiements par TPE
Terminal
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Financial Connections
Climate
Comprendre la fraude
Radar pour la protection contre la fraude
Gestion des litiges
Vérifier l'identité
AccueilPaiementsBuild an in-app integrationPayment Sheet

Accepter les paiements dans l’application

Créez une intégration de paiement personnalisée dans votre application iOS, Android ou React Native à l'aide de Payment Sheet.

La Payment Sheet est un composant personnalisable qui affiche une liste de moyens de paiement et collecte les informations de paiement dans votre application à l’aide d’une feuille en bas.

Le Payment Element permet d’accepter plusieurs moyens de paiement à l’aide d’une seule intégration. Dans cette intégration, vous créez un tunnel de paiement personnalisé dans lequel vous affichez le composant Payment Element, créez le PaymentIntent et confirmez le paiement dans votre application. Pour confirmer le paiement sur le serveur, reportez-vous à la section Finaliser les paiements sur le serveur.

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

Côté serveur

Cette intégration exige que votre serveur dispose de endpoints 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
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Côté client

Le SDK React Native est disponible en open source et fait l’objet d’une documentation complète. En interne, il utilise des SDK Android et iOS natifs. 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) :

Command Line
yarn add @stripe/stripe-react-native

Ensuite, installez les autres dépendances nécessaires :

  • For iOS, go to the ios directory and run pod install to ensure that you also install the required native dependencies.
  • Pour Android, il n’y a plus de dépendances à installer.

Remarque

Nous vous recommandons de suivre le guide officiel de TypeScript 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 de l’API dans publishableKey est nécessaire. L’exemple suivant montre comment initialiser Stripe à l’aide du composant StripeProvider.

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 ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }

Remarque

Utilisez vos clés de test d’API lors de vos activités de test et de développement, et vos clés du mode production pour la publication de votre application.

Activer des moyens de paiement

Affichez vos 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 bancaires et les autres moyens de paiement courants qui peuvent vous permettre d’atteindre davantage de clients. Nous vous recommandons toutefois d’activer d’autres moyens de paiement pertinents pour votre entreprise et vos clients. Consultez la page Prise en charge des moyens de paiement pour en savoir plus sur la prise en charge des produits et des moyens de paiement, et notre page des tarifs pour prendre connaissance des frais que nous appliquons.

Configurer une URL de redirection
Côté client

Lorsqu’un client quitte votre application (par exemple, pour s’authentifier dans Safari ou dans son application bancaire), donnez-lui un moyen de revenir automatiquement dans votre application. De nombreux types de moyens de paiement nécessitent une URL de redirection. Si vous n’en fournissez pas, nous ne pourrons pas présenter à vos utilisateurs les moyens de paiement nécessitant une URL de redirection, même si vous les avez activés.

Pour fournir une URL de redirection :

  1. Enregistrez une URL personnalisée. Les liens universels ne sont pas pris en charge.
  2. Configurez votre URL personnalisée.
  3. Configurez votre composant racine pour qu’il transfère l’URL au SDK de Stripe, comme illustré ci-dessous.

Remarque

Si vous utilisez Expo, définissez votre schéma dans le fichier app.json.

App.tsx
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }

Définissez aussi la returnURL lorsque vous appelez la méthode initPaymentSheet :

await initPaymentSheet({ ... returnURL: 'your-app://stripe-redirect', ... });

Pour plus d’informations sur les schémas d’URL natifs, consultez la documentation Android et iOS.

Recueillir les informations de paiement
Côté client

L’intégration peut utiliser le tunnel de paiement par défaut ou un tunnel personnalisé.

Par défautFlux personnalisé
PaymentSheet
Custom flow
Affiche un formulaire permettant de collecter les informations de paiement et de finaliser le paiement. Le bouton du formulaire indique Payer X $ et permet d’effectuer le paiement.Affiche une feuille permettant de collecter uniquement les informations de paiement. Le bouton dans la feuille indique Continuer et redirige le client vers votre application, où votre propre bouton finalise le paiement.

Initialiser la PaymentSheet

Lorsque vous souhaitez accepter un paiement, par exemple lorsqu’un client effectue un paiement, initialisez la PaymentSheet avec un intentConfiguration. L’objet intentConfiguration contient des informations sur le paiement, comme le montant et la devise, et un rappel confirmHandler.

import {View, Button} from 'react-native'; import { useStripe, useEffect, PaymentMethod, IntentCreationCallbackParams } from '@stripe/stripe-react-native'; export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const initializePaymentSheet = async () => { const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", intentConfiguration: { mode: { amount: 1099, currencyCode: 'USD', }, confirmHandler: confirmHandler } }); if (error) { // handle error } }; useEffect(() => { initializePaymentSheet(); }, []); const confirmHandler = async ( paymentMethod: PaymentMethod.Result, shouldSavePaymentMethod: boolean, intentCreationCallback: (params: IntentCreationCallbackParams) => void ) => { // explained later } const didTapCheckoutButton = async () => { // implement later } return ( <View> <Button title="Checkout" onPress={didTapCheckoutButton} /> </View> ); }

Présenter la PaymentSheet

Présentez ensuite la PaymentSheet. La méthode presentPaymentSheet aboutit par une promesse lorsque le client a finalisé le paiement et que le formulaire est fermé.

import { PaymentSheetError } from '@stripe/stripe-react-native'; export default function CheckoutScreen() { // ... const didTapCheckoutButton = async () => { const { error } = await presentPaymentSheet(); if (error) { if (error.code === PaymentSheetError.Canceled) { // Customer canceled - you should probably do nothing. } else { // PaymentSheet encountered an unrecoverable error. You can display the error to the user, log it, etc. } } else { // Payment completed - show a confirmation screen. } } // ... }

Confirmer les du paiement

Lorsque le client appuie sur le bouton Payer dans le PaymentSheet, cela appelle le rappel que vous avez transmis à initPaymentSheet avec un objet PaymentMethod.Result représentant les informations de paiement du client.

Implémentez cette méthode pour envoyer une requête à votre serveur. Votre serveur crée un PaymentIntent et renvoie la clé secrète du client (voir l’étape suivante).

Lorsque la requête est renvoyée, appelez le rappel intentCreationCallback en transmettant la clé secrète du client ou une erreur. Le PaymentSheet confirmer le PaymentIntent à l’aide de la clé secrète du client.

export default function CheckoutScreen() { // ... const confirmHandler = async ( paymentMethod: PaymentMethod.Result, shouldSavePaymentMethod: boolean, intentCreationCallback: (params: IntentCreationCallbackParams) => void ) => { // Make a request to your own server. const response = await fetch(`${API_URL}/create-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }}); // Call the `intentCreationCallback` with your server response's client secret or error const { client_secret, error } = await response.json(); if (client_secret) { intentCreationCallback({clientSecret: client_secret}); } else { intentCreationCallback({error}); } } // ... }

Créer un PaymentIntent
Côté serveur

Sur votre serveur, créez a PaymentIntent en indiquant un montant et une devise. Vous pouvez gérer les moyens de paiement depuis le Dashboard. Stripe gère le l’affichage des moyens de paiement admissibles en fonction de facteurs tels que le montant de la transaction, la devise et le tunnel de paiement. Pour éviter que des clients malveillants ne choisissent eux-mêmes leurs tarifs, décidez toujours du montant à débiter côté serveur (un environnement sécurisé) plutôt que côté client.

Si l’appel réussit, renvoyez la clé secrète du client du PaymentIntent. Si l’appel échoue, traitez l’erreur et renvoyez un message d’erreur avec une courte explication à l’intention de votre client.

Remarque

Vérifiez que toutes les propriétés de l’IntentConfiguration correspondent à votre PaymentIntent (par exemple, setup_future_usage, amount et currency).

main.rb
Ruby
Python
PHP
Node
Java
Go
.NET
No results
require 'stripe' Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
post '/create-intent' do data = JSON.parse request.body.read params = { amount: 1099, currency: 'usd', # In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. automatic_payment_methods: {enabled: true}, } begin intent = Stripe::PaymentIntent.create(params) {client_secret: intent.client_secret}.to_json rescue Stripe::StripeError => e {error: e.error.message}.to_json end end

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.

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 les cartes sauvegardées
Côté serveur
Côté client

FacultatifAutoriser les moyens de paiement à notification différée
Côté client

FacultatifActiver Apple Pay

FacultatifActiver Google Pay

FacultatifActiver la numérisation de carte

FacultatifPersonnaliser le formulaire

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