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'usageUtiliser Managed Payments
Utiliser Payment Links
Utiliser une page de paiement préconfiguré
Créer une intégration personnalisée avec Elements
Développer une intégration dans l'application
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
    Présentation
    Payment Element
      Bonnes pratiques concernant le composant Payment Element
      Comparaison avec Card Element
      Migrer vers le composant Element Payment avec Payment Intents
      Migrer vers le composant Element Payment avec les sessions Checkout
      Migrer vers les tokens de confirmation
    Express Checkout Element
    Address Element
    Currency Selector Element
    Link Authentication Element
    Payment Method Messaging Element
    Numéro d’identification fiscale
Paiements dans 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
Commerce agentique
Financial Connections
Climate
Comprendre la fraude
Radar pour la protection contre la fraude
Gestion des litiges
Vérifier l'identité
AccueilPaiementsWeb ElementsPayment Element

Migrer vers Payment Element avec l'API Checkout Sessions

Acceptez de nombreux moyens de paiement avec un seul Element, tout en gérant les taxes, les frais d'expédition, les remises, la conversion de devises, etc.

Auparavant, chaque moyen de paiement (cartes, iDEAL, etc.) nécessitait un Element distinct. En migrant vers le Payment Element, vous pouvez accepter plusieurs moyens de paiement avec un seul Element. Vous pouvez utiliser des fonctionnalités supplémentaires en migrant vers des sessions Checkout à partir de Payment Intents, ce qui permet à votre intégration de gérer les abonnements, les remises, les frais de livraison et la conversion de devises.

Si vous utilisez le Card Element avec PaymentIntents ou SetupIntents, et que vous souhaitez uniquement migrer vers le Payment Element, consultez Migrer vers le Payment Element. Vous pouvez également comparer d’autres intégrations de paiement si aucune des deux solutions ne correspond à votre cas d’usage.

Les PaymentIntents et les SetupIntents ont chacun leur propre lot de politiques de migration. Consultez le guide adéquat à votre chemin d’intégration, dont l’exemple de code.

Si votre intégration existante utilise l’API Payment Intents pour créer et suivre des paiements ponctuels ou pour sauvegarder des informations de carte bancaire pendant un paiement, procédez comme suit pour utiliser le composant Payment Element avec des sessions Checkout.

Activer des moyens de paiement

Mise en garde

Ce chemin d’intégration ne prend pas en charge BLIK ou les prélèvements automatiques qui utilisent le Système automatisé de compensation et de règlement (SACR).

Accédez à vos paramètres de 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 une session Checkout.

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.

Migrer votre appel de création de PaymentIntents
Côté serveur

Configurez le SDK pour qu’il utilise au minimum la version de l’API 2025-03-31.basil.

TypeScript
Node.js
Ruby
PHP
Python
Go
.NET
Java
No results
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys import Stripe from 'stripe'; const stripe = new Stripe(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
, { apiVersion: '2025-03-31.basil;' as any, });

Étant donné que Payment Element vous permet d’accepter plusieurs moyens de paiement, nous vous recommandons d’utiliser les moyens de paiement dynamiques, qui sont automatiquement activés si vous ne transmettez pas payment_method_types dans la session Checkout. Lorsque cette option est activée, pour déterminer la liste des moyens de paiement disponibles, Stripe prend en compte la devise, les restrictions liées aux moyens de paiement ainsi que d’autres paramètres. Nous priorisons les moyens de paiement susceptibles d’accroître le taux de conversion et qui sont les plus pertinents en fonction de la devise et de la localisation du client.

Mettez à jour votre appel de création de PaymentIntent pour créer une session Checkout à la place. Dans l’instance de la session Checkout, vous transmettrez :

  • line_items : Représente les postes de la commande
  • ui_mode: custom : Indique que vous utilisez des composants intégrés
  • mode: payment : Indique que vous accepterez des paiements ponctuels pour la session Checkout
  • return_url : Représente l’URL vers laquelle rediriger votre client une fois qu’il s’est authentifié ou a annulé son paiement sur l’application ou le site du moyen de paiement.

De plus, renvoyez le client_secret de la session Checkout côté client pour une utilisation ultérieure.

Chaque session de paiement génère un PaymentIntent lors de la confirmation. Si vous souhaitez conserver des paramètres supplémentaires de votre intégration actuelle lors de la création d’un PaymentIntent, reportez-vous aux options disponibles dans payment_intent_data.

Avant
Après
Ruby
Python
PHP
Node.js
Go
Java
.NET
No results
intent = Stripe::PaymentIntent.create({ amount: 1099, currency: 'usd', payment_method_types: ['card'], })
Ruby
Python
PHP
Node.js
Go
Java
.NET
No results
session = Stripe::Checkout::Session.create({ line_items: [ { price_data: { currency: 'usd', product_data: {name: 'T-shirt'}, unit_amount: 1099, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'custom', return_url: '{{RETURN_URL}}', }) { clientSecret: session.client_secret, }.to_json

FacultatifOptions supplémentaires de la session Checkout
Côté serveur

Les sessions Checkout acceptent des options supplémentaires qui influencent l’encaissement des paiements.

PropriétéTypeDescriptionObligatoire
mode
  • payment
  • setup
  • subscription
Indique si le Payment Element est utilisé avec un PaymentIntent, un SetupIntent ou un abonnement.Oui
line_items
  • array of objects
La liste des articles achetés par le client. Voir d’autres paramètres configurables.Oui, pour les modes payment et subscription
automatic_tax
  • {enabled: boolean}
L’activation de ce paramètre permet à Checkout de collecter toutes les informations relatives à l’adresse de facturation nécessaires au calcul des taxes.Non
allow_promotion_codes
  • boolean
Active les codes promotionnels utilisables par l’utilisateur.Non
billing_address_collection
  • auto
  • required
Indiquez si Checkout collecte ou non l’adresse de facturation du client. La valeur par défaut est auto.Non
payment_method_types
  • array of enums
Une liste des types de moyens de paiement (par exemple, carte bancaire) que cette session Checkout peut accepter. Cette procédure n’est pas obligatoire si vous utilisez des moyens de paiement dynamiques.Non
phone_number_collection
  • {enabled: boolean}
Contrôle les paramètres de collecte du numéro de téléphone pour la session. Vous pouvez définir les modes payment et subscription.Non
shipping_address_collection
  • {allowed_countries: array of enums}
Lorsqu’elle est définie, elle permet à Checkout de collecter l’adresse de livraison d’un client.Non
shipping_options
  • array of objects
Les options de frais d’expédition à appliquer à cette session. Jusqu’à un maximum de 5.Non
customer_creation
  • always
  • if_required
Contrôle si la session Checkout créera un Customer si aucun n’a déjà été transmis dans la session. Vous pouvez définir cette option en mode payment et en mode setup.Non

Migrer votre instance d'Elements
Côté client

Intégrez le script Stripe.js à votre page de paiement en l’ajoutant entre les balises head de votre fichier HTML. Chargez toujours Stripe.js directement à partir de js.stripe.com pour maintenir votre conformité PCI. Vous ne devez pas inclure le script dans un lot ni en héberger de copie.

Ensure you’re on the latest Stripe.js version by including the following script tag <script src=“https://js.stripe.com/clover/stripe.js”></script>. Learn more about Stripe.js versioning and support policy.

checkout.html
<head> <title>Checkout</title> <script src="https://js.stripe.com/clover/stripe.js"></script> </head>

Créez clientSecret en tant que Promise<string> | string qui contient le secret client renvoyé par votre serveur.

Remplacez votre appel stripe.elements() par stripe.initCheckout, en passant clientSecret. initCheckout renvoie une promesse qui se résout en une instance de Checkout.

L’objet Checkout est la clé de voûte de votre page de paiement, car il contient les données de la session Checkout et les méthodes permettant de les mettre à jour.

Utilisez l’objet renvoyé par checkout.session() comme référence pour les tarifs. Nous vous recommandons de lire et d’afficher les attributs total et lineItems de la session dans votre interface utilisateur.

Cela vous permet d’activer de nouvelles fonctionnalités avec un minimum de modifications du code. Par exemple, l’ajout de prix manuels des devises ne nécessite aucune modification de l’interface utilisateur si vous affichez le total.

Avant
Après
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements();
checkout.js
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const clientSecret = fetch('/create-checkout-session', {method: 'POST'}) .then((response) => response.json()) .then((json) => json.checkoutSessionClientSecret); stripe.initCheckout({clientSecret}) .then((checkout) => { const checkoutContainer = document.getElementById('checkout-container'); checkoutContainer.append(JSON.stringify(checkout.lineItems, null, 2)); checkoutContainer.append(document.createElement('br')); checkoutContainer.append(`Total: ${checkout.session().total.total.amount}`); });
index.html
<div id="checkout-container"></div>

Collecter les adresses e-mail des clients
Côté client

La migration vers des composants intégrés nécessite l’étape supplémentaire de collecte de l’adresse e-mail de votre client.

Si vous transmettez déjà un customer_email ou un Customer existant avec une adresse e-mail valide définie lors de la création de la session Checkout, vous pouvez ignorer cette étape.

Si vous implémentez votre propre validation d’adresse e-mail, vous pouvez transmettre l’adresse e-mail validée sur checkout.confirm et ignorer cette étape.

Créez un champ de saisie de l’adresse pour collecter l’adresse e-mail de votre client. Appelez updateEmail lorsque votre client finalise la saisie pour valider et enregistrer l’adresse e-mail.

En fonction de la conception de votre formulaire de paiement, vous pouvez appeler updateEmail de l’une des manières suivantes :

  • Directement avant l’envoi du paiement. Vous pouvez également appeler updateEmail pour valider plus tôt, par exemple lorsque le focus est retiré de la saisie.
  • Avant de passer à l’étape suivante, par exemple en cliquant sur un bouton Enregistrer, si votre formulaire comprend plusieurs étapes.
index.html
<input type="text" id="email" /> <div id="email-errors"></div>
checkout.js
const checkout = stripe.initCheckout({clientSecret}); const loadActionsResult = await checkout.loadActions(); if (loadActionsResult.type === 'success') { const {actions} = loadActionsResult; const emailInput = document.getElementById('email'); const emailErrors = document.getElementById('email-errors'); emailInput.addEventListener('input', () => { // Clear any validation errors emailErrors.textContent = ''; }); emailInput.addEventListener('blur', () => { const newEmail = emailInput.value; actions.updateEmail(newEmail).then((result) => { if (result.error) { emailErrors.textContent = result.error.message; } }); }); }

Ajouter le composant Element Payment
Côté client

Vous pouvez désormais remplacer le composant Element Card et les composants Elements des différents moyens de paiement par le composant Element Payment. Ce dernier s’adapte automatiquement pour recueillir les valeurs des champs de saisie en fonction du moyen de paiement et du pays (par exemple, collecte de l’adresse de facturation complète pour le prélèvement SEPA). Vous n’avez donc plus besoin de gérer des champs de saisie personnalisés.

L’exemple suivant remplace CardElement par PaymentElement :

checkout.html
<form id="payment-form"> <div id="card-element"> </div> <div id="payment-element"> <!-- Mount the Payment Element here --> </div> <button id="submit">Submit</button> </form>
checkout.js
const cardElement = elements.create("card"); cardElement.mount("#card-element"); const paymentElement = checkout.createPaymentElement(); paymentElement.mount("#payment-element");

Mettre à jour le gestionnaire d'envoi
Côté client

Au lieu d’utiliser des méthodes de confirmation individuelles comme stripe.confirmCardPayment ou stripe.confirmP24Payment, utilisez checkout.confirm pour collecter les informations de paiement et les soumettre à Stripe.

Pour confirmer la session Checkout, mettez à jour votre gestionnaire d’envoi afin qu’il utilise checkout.confirm plutôt que des méthodes de confirmation individuelles.

Lorsqu’il est appelé, le paramètre checkout.confirm tente d’effectuer toutes les actions requises, comme l’affichage d’une boîte de dialogue 3DS ou la redirection des utilisateurs vers la page d’autorisation de leur banque. Une fois la confirmation terminée, les clients sont redirigés vers la return_url que vous avez configurée, qui correspond généralement à une page de votre site Web indiquant l’état du paiement.

Si vous souhaitez conserver le même tunnel de paiement pour les paiements par carte et rediriger vos clients uniquement pour les moyens de paiement qui l’exigent, vous pouvez définir la redirection sur if_required.

L’exemple de code suivant remplace stripe.confirmCardPayment par checkout.confirm :

Avant
Après
// Create the PaymentIntent and obtain clientSecret const res = await fetch("/create-intent", { method: "POST", headers: {"Content-Type": "application/json"}, }); const {client_secret: clientSecret} = await res.json(); const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); const {error} = await stripe.confirmCardPayment(clientSecret, { payment_method: { card: elements.getElement(CardElement) } }); if (error) { handleError(error); } };
const handleSubmit = async (event) => { event.preventDefault(); if (!stripe) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } setLoading(true); const {error} = await checkout.confirm(); if (error) { handleError(error); } };

FacultatifEnregistrer les coordonnées bancaires lors du paiement

Si votre intégration existante enregistre les informations de carte bancaire lors du paiement, utilisez l’option saved_payment_method_options.payment_method_save à la création de la session Checkout, au lieu de transmettre setup_future_usage à l’étape de confirmation du paiement avec stripe.confirmCardPayment.

L’enregistrement d’un moyen de paiement nécessite un objet Customer. Transmettez un objet Customer existant ou, pour en créer un, définissez le paramètre customer_creation de la session Checkout sur always.

Ruby
Python
PHP
Node.js
Go
Java
.NET
No results
session = Stripe::Checkout::Session.create({ line_items: [ { price_data: { currency: 'usd', product_data: {name: 'T-shirt'}, unit_amount: 1099, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'custom', return_url: '{{RETURN_URL}}', customer_creation: 'always', saved_payment_method_options: {payment_method_save: 'enabled'}, })

Vous devez également transmettre une valeur pour savePaymentMethod lors de la confirmation de la session Checkout afin de confirmer si le moyen de paiement est enregistré ou non.

const {errors} = await checkout.confirm( {savePaymentMethod: true} )

Gérer les événements post-paiement
Côté serveur

Une fois le paiement effectué, Stripe envoie un événement checkout.session.completed. Utilisez l’outil de webhook du Dashboard ou suivez le Quickstart 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.

Nous vous conseillons d’écouter ces événements plutôt que d’attendre un rappel de votre client. 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, et des tentatives de manipulation de la réponse par des clients malintentionnés ne sont par ailleurs pas à exclure. 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 l’événement checkout.session.completed, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :

ÉvénementDescriptionAction
checkout.session.completedEnvoyé lorsqu’un client effectue un paiement avec succès.Envoyez au client une confirmation de commande et traitez sa commande.
checkout_session.async_payment_succeededEnvoyé lorsqu’un paiement effectué par un client à l’aide d’un moyen de paiement différé aboutit finalement.Envoyez au client une confirmation de commande et traitez sa commande.
checkout.session.async_payment_failedEnvoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec.Si un paiement sort de l’état async_payment_failed, proposez au client de retenter le paiement.
checkout.session.expiredEnvoyé lorsque la Checkout d’un client a expiré, c’est-à-dire après 24 heures.Si un paiement passe de expired à payment_failed, proposez au client de recharger la page de paiement et de créer une nouvelle Checkout.

Tester l'intégration

  1. Accédez à votre page de paiement.
  2. Renseignez les informations d’un moyen de paiement du tableau suivant. Pour les paiements par carte :
    • Saisissez une date d’expiration postérieure à la date du jour.
    • Saisissez un code CVC à 3 chiffres.
    • Saisissez un code postal de facturation.
  3. Envoyez le paiement à Stripe.
  4. Accédez au Dashboard et recherchez le paiement sur la page Transactions. Si votre paiement a abouti, il apparaîtra dans cette liste.
  5. Cliquez sur votre paiement afin d’afficher plus d’informations (par exemple, les informations de facturation et la liste des articles achetés). Vous pouvez utiliser ces informations pour traiter la commande.
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.

Voir aussi

  • Collecter les adresses de facturation et de livraison
  • Utiliser des codes promotionnels
  • Collecter automatiquement des taxes
  • Activer les quantités de postes modifiables
  • Conversion automatique des devises
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