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.

Cette intégration réunit toutes les étapes requises pour le paiement (la collecte des données du paiement et la confirmation du paiement) dans une seule et même feuille qui s’affiche par-dessus votre application.
Configurer StripeCôté serveurCô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 :
Côté client
La trousse SDK de React Native est un logiciel libre très bien documenté. À l’interne, elle utilise les trousses SDK pour iOS natif et pour Android. Pour installer la trousse SDK de React Native, exécutez l’une des commandes suivantes dans le répertoire de votre projet (qui dépend du gestionnaire de progiciel que vous utilisez) :
Ensuite, installez les autres dépendances nécessaires :
- Pour iOS, accédez au répertoire ** ios ** et exécutez la fonctionnalité
pod install
pour vous assurer d’installer également les dépendances natives requises. - Pour Android, il n’y a plus de dépendances à installer.
Remarques
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, enveloppez votre écran de paiement avec le composant StripeProvider
ou utilisez la méthode d’initialisation initStripe
. Seule la clé publiable de l’API est requise dans l’objet publishableKey
. 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> ); }
Remarques
Utilisez vos clés de test d’API lors de vos activités de test et de développement, et vos clés de production pour la publication de votre application.
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 terminaisonCô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 :
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.
(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.
(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 :
- Récupère l’objet Customer ou en crée un nouveau.
- Crée une clé éphémère pour l’objet Customer.
- Création d’un PaymentIntent avec les paramètres amount, currency, customer. Vous pouvez également inclure le paramètre
automatic_
. Stripe active sa fonctionnalité par défaut dans la dernière version de l’API.payment_ methods - 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.
Collecter les informations de paiementCôté client
Avant d’afficher le Payment Element mobile, votre page de paiement doit :
- Présenter les produits commandés et le montant total des achats
- Collecter les éventuelles informations de livraison requises
- Inclure un bouton de paiement pour afficher l’interface utilisateur de Stripe
Au cours du processus de paiement de votre application, effectuez une demande réseau auprès du point de terminaison de l’application dorsale que vous avez créé à l’étape précédente, puis appelez initPaymentSheet
à partir du hook useStripe
.
export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const [loading, setLoading] = useState(false); const fetchPaymentSheetParams = async () => { const response = await fetch(`${API_URL}/payment-sheet`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const { paymentIntent, ephemeralKey, customer } = await response.json(); return { paymentIntent, ephemeralKey, customer, }; }; const initializePaymentSheet = async () => { const { paymentIntent, ephemeralKey, customer, } = await fetchPaymentSheetParams(); const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, // Set `allowsDelayedPaymentMethods` to true if your business can handle payment //methods that complete payment after a delay, like SEPA Debit and Sofort. allowsDelayedPaymentMethods: true, defaultBillingDetails: { name: 'Jane Doe', } }); if (!error) { setLoading(true); } }; const openPaymentSheet = async () => { // see below }; useEffect(() => { initializePaymentSheet(); }, []); return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
Lorsque votre client touche le bouton Paiement, appelez presentPaymentSheet()
pour ouvrir le formulaire de paiement. Une fois la transaction finalisée, le formulaire se ferme et la promesse aboutit avec le résultat facultatif StripeError<PaymentSheetError>
.
export default function CheckoutScreen() { // continued from above const openPaymentSheet = async () => { const { error } = await presentPaymentSheet(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert('Success', 'Your order is confirmed!'); } }; return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
En l’absence d’erreur, informez l’utilisateur que l’opération est terminée (par exemple, en affichant un écran de confirmation de commande).
Si vous définissez allowsDelayedPaymentMethods
à 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.
Configurer une URL de redirection (iOS uniquement)Côté client
Lorsqu’un client quitte votre application (par exemple, pour s’authentifier dans Safari ou dans son application bancaire), fournissez-lui un moyen d’y revenir automatiquement. De nombreux types de modes de paiement nécessitent une URL de redirection. Si vous ne la fournissez pas, nous ne pourrons pas présenter à vos utilisateurs des modes de paiement nécessitant une URL de redirection, même si vous les avez activés.
Pour fournir une URL de redirection :
- Enregistrer une URL personnalisée. Les liens universels ne sont pas pris en charge.
- Configurer votre URL personnalisée.
- Configurez votre composant racine pour qu’il transfère l’URL à la trousse SDK Stripe, comme illustré ci-dessous.
Remarques
Si vous utilisez Expo, définissez votre schéma dans le fichier app.
.
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> ); }
De plus, définissez le returnURL
lorsque vous appelez la méthode initPaymentSheet
:
await initPaymentSheet({ ... returnURL: 'your-app://stripe-redirect', ... });
Pour en savoir plus sur les schémas d’URL natifs, consultez la documentation Android ou iOS.
Gérer les événements post-paiement
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_
, nous vous recommandons de gérer les autres événements suivants lorsque vous encaissez des paiements à l’aide du Payment Element :
Événement | Description | Action |
---|---|---|
payment_intent.succeeded | Envoyé lorsqu’un client a effectué un paiement. | Envoyez au client une confirmation de commande et traitez sa commande. |
payment_intent.processing | Envoyé 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_ ou payment_ . | 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_failed | Envoyé lorsqu’un client tente d’effectuer un paiement, mais que le paiement échoue. | Si un paiement passe de l’état processing à l’état payment_ , proposez au client de retenter le paiement. |
Tester l'intégration
Consultez la section Test pour obtenir des informations supplémentaires sur la manière de tester votre intégration.
FacultatifActiver Link
Activez Link dans vos paramètres de moyens de paiement pour permettre à vos clients d’enregistrer et de réutiliser leurs informations de paiement en toute sécurité à l’aide du bouton de paiement express en un clic de Link.
Transmettez le courriel de votre client au Payment Element pour mobile
Link authentifie un client à l’aide de son adresse courriel. Stripe recommande de remplir automatiquement autant d’informations que possible pour simplifier le processus de paiement.
Pour remplir automatiquement le nom, l’adresse courriel et le numéro de téléphone du client, fournissez à defaultBillingDetails
les informations de votre client à initPaymentSheet
.
await initPaymentSheet({ ... defaultBillingDetails: { name: 'Jenny Rosen', email: 'jenny.rosen@example.com', phone: '888-888-8888', }, });
FacultatifActiver Apple Pay
Demander un ID de marchand Apple
Pour obtenir un ID de marchand Apple, demandez un nouvel identifiant sur le site Web Apple Developer.
Renseignez le formulaire en indiquant une description et un identifiant. La description n’est destinée qu’à votre propre information et vous pourrez la modifier ultérieurement au besoin. En ce qui concerne l’identifiant, Stripe vous recommande d’utiliser le nom de votre application (par exemple, merchant.
).
Créer un nouveau certificat Apple Pay
Créez un certificat permettant à votre application de chiffrer les données de paiement.
Accédez aux paramètres des certificats iOS dans le Dashboard, cliquez sur Ajouter une nouvelle application et suivez le guide.
Téléchargez un fichier de demande de signature de certificat (CSR) pour obtenir un certificat sécurisé auprès d’Apple qui vous permet d’utiliser Apple Pay.
Un fichier CSR doit être utilisé pour émettre exactement un certificat. Si vous changez votre identifiant Apple Merchant ID, vous devez accéder aux paramètres de certificat iOS du Dashboard pour obtenir un nouveau CSR et un nouveau certificat.
Réaliser une intégration avec Xcode
Ajoutez la fonctionnalité Apple Pay à votre application. Dans Xcode, ouvrez les paramètres de votre projet, cliquez sur l’onglet Signing & Capabilities (Signature et fonctionnalités), et ajoutez la fonctionnalité Apple Pay. On pourrait alors vous demander de vous connecter à votre compte de développeur. Sélectionnez l’ID du marchand que vous venez de créer, et votre application peut maintenant accepter Apple Pay.

Activer la fonctionnalité Apple Pay dans Xcode
Ajouter Apple Pay
Suivi des commandes
Pour ajouter des informations de suivi des commandes dans la version iOS 16 ou une version ultérieure, configurez une fonction de rappel setOrderTracking
. Stripe fait appel à votre implémentation une fois le paiement effectué, mais avant qu’iOS ne rejette la feuille Apple Pay.
Dans votre implémentation de la fonction de rappel setOrderTracking
, récupérez les détails de la commande dans votre serveur pour la commande terminée et transmettez les détails à la fonction completion
fournie.
Pour en savoir plus sur le suivi des commandes, consultez la documentation sur les commandes du portefeuille numérique Apple.
await initPaymentSheet({ // ... applePay: { // ... setOrderTracking: async complete => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch( `${apiEndpoint}/retrieve-order?orderId=${orderId}`, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }, ); if (response.status === 200) { const orderDetails = await response.json(); // orderDetails should include orderIdentifier, orderTypeIdentifier, // authenticationToken and webServiceUrl complete(orderDetails); } }, }, });
FacultatifActiver Google Pay
Configurer votre intégration
Pour utiliser Google Pay, commencez par activer l’API Google Pay. Pour cela, ajoutez les informations suivantes au libellé <application>
de votre AndroidManifest.xml :
<application> ... <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </application>
Pour en savoir plus, consultez la page de Google Pay Configurer l’API Google Pay pour Android.
Ajouter Google Pay
Lorsque vous initialisez PaymentSheet
, définissez merchantCountryCode
sur le code pays de votre entreprise et définissez googlePay
à true.
Vous pouvez également utiliser l’environnement de test en transmettant le paramètre testEnv
. Vous ne pouvez tester Google Pay que sur un appareil Android physique. Suivez la documentation React Native pour tester votre application sur un appareil physique.
const { error, paymentOption } = await initPaymentSheet({ // ... googlePay: { merchantCountryCode: 'US', testEnv: true, // use test environment }, });
FacultatifActiver le balayage de carte (iOS uniquement)Côté client
Pour que vous puissiez utiliser la numérisation des cartes, définissez le paramètre NSCameraUsageDescription
(Confidentialité – Description de l’utilisation de l’appareil photo) dans le fichier Info.plist de votre application et expliquez la raison pour laquelle vous devez accéder à l’appareil photo (« Pour numériser des cartes », par exemple). Les appareils équipés d’iOS 13 ou version ultérieure prennent en charge la numérisation des cartes.
FacultatifPersonnaliser la feuilleCôté client
Toute personnalisation est configurée au moyen de l’objet initPaymentSheet
.
Appearance
Personnalisez les couleurs, les polices et plus encore afin de les adapter à l’apparence de votre application à l’aide de l’API Appearance.
Nom d’affichage du marchand
Renseignez le nom usuel de votre entreprise en configurant merchantDisplayName
. Par défaut, il s’agit du nom de votre application.
await initPaymentSheet({ // ... merchantDisplayName: 'Example Inc.', });
Mode sombre
Par défaut, PaymentSheet
s’adapte automatiquement aux paramètres d’affichage du système de l’utilisateur (mode clair ou mode sombre). Sur iOS, vous pouvez modifier ce comportement en définissant la propriété style
sur le mode alwaysLight
ou alwaysDark
.
await initPaymentSheet({ // ... style: 'alwaysDark', });
Sur Android, configurez le mode clair ou le mode sombre sur votre application :
// force dark AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // force light AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Informations de facturation par défaut
Pour définir des valeurs par défaut des informations de facturation recueillies dans la PaymentSheet, configurez la propriété defaultBillingDetails
. LaPaymentSheet
pré-remplit ses champs en fonction des valeurs que vous fournissez.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', address: { country: 'US', }, }, });
Recueillir les informations de facturation
Utilisez billingDetailsCollectionConfiguration
pour préciser comment vous souhaitez recueillir les informations de facturation dans la PaymentSheet.
Vous pouvez recueillir le nom, l’adresse de courriel, le numéro de téléphone et l’adresse de votre client.
Si vous n’avez pas l’intention de collecter les valeurs requises par le mode de paiement, vous devez suivre les étapes ci-après :
- Joignez les valeurs qui ne sont pas collectées par
PaymentSheet
à la propriétédefaultBillingDetails
. - Définissez
billingDetailsCollectionConfiguration.
surattachDefaultsToPaymentMethod true
.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', } billingDetailsCollectionConfiguration: { name: PaymentSheet.CollectionMode.ALWAYS, email: PaymentSheet.CollectionMode.NEVER, address: PaymentSheet.AddressCollectionMode.FULL, attachDefaultsToPaymentMethod: true }, });
Remarques
Consultez votre conseiller juridique au sujet des lois qui s’appliquent à la collecte de renseignements. Ne collectez les numéros de téléphone que si vous en avez besoin pour la transaction.
FacultatifGérer la déconnexion de l'utilisateur
PaymentSheet
sauvegarde certaines informations localement pour se rappeler si un utilisateur a utilisé Link dans une application. Pour effacer l’état interne de PaymentSheet
, effectuez un appel à la méthode resetPaymentSheetCustomer()
lorsque votre utilisateur se déconnecte.
export default function CheckoutScreen() { // continued from above const { initPaymentSheet, presentPaymentSheet, resetPaymentSheetCustomer } = useStripe(); const logout = async () => { await resetPaymentSheetCustomer(); }; return ( <Screen> <Button title="Checkout" onPress={openPaymentSheet} /> <Button title="Checkout" onPress={logout} /> </Screen> ); }
FacultatifFinaliser le paiement dans votre interface utilisateur
Vous pouvez présenter le formulaire de paiement pour la seule collecte des données du moyen de paiement, puis appeler une méthode confirm
pour mener à bien l’opération de paiement dans l’interface utilisateur de votre application. Cette approche est utile si vous avez intégré un bouton d’achat personnalisé ou si des étapes supplémentaires sont nécessaires après la collecte des données de paiement.

Remarques
Un exemple d’intégration est disponible sur notre GitHub.
- Tout d’abord, appelez
initPaymentSheet
et transmettezcustomFlow: true
.initPaymentSheet
se résout avec une option de paiement initiale contenant une image et une étiquette représentant le moyen de paiement du client. Mettez à jour votre interface utilisateur avec ces informations.
const { initPaymentSheet, presentPaymentSheet, confirmPaymentSheetPayment, } = useStripe() const { error, paymentOption } = await initPaymentSheet({ customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, customFlow: true, merchantDisplayName: 'Example Inc.', }); // Update your UI with paymentOption
- Utilisez
presentPaymentSheet
pour collecter les données de paiement. Lorsque le client a terminé, la fiche se ferme et résout la promesse. Mettez à jour votre interface utilisateur avec les détails du moyen de paiement sélectionné.
const { error, paymentOption } = await presentPaymentSheet();
- Utilisez
confirmPaymentSheetPayment
pour confirmer le paiement. L’opération se résout avec le résultat du paiement.
const { error } = await confirmPaymentSheetPayment(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert( 'Success', 'Your order is confirmed!' ); }
Si vous définissez allowsDelayedPaymentMethods
à 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.