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 ou pour sauvegarder des informations de carte pendant un paiement, procédez comme suit pour utiliser le 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).
View your payment methods settings and enable the payment methods you want to support. You need at least one payment method enabled to create a Checkout Session.
By default, Stripe enables cards and other common payment methods that can help you reach more customers, but we recommend turning on additional payment methods that are relevant for your business and customers. See Payment method support for product and payment method support, and our pricing page for fees.
Migrer votre appel de création de PaymentIntentsCôté serveur
Configurez le SDK pour qu’il utilise au minimum la version de l’API 2025-03-31.
.
É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_
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_
: Représente les postes de la commandeitems ui_
: Indique que vous utilisez des composants intégrésmode: custom mode: payment
: Indique que vous accepterez des paiements ponctuels pour la session Checkoutreturn_
: 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.url
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.
Collecter les adresses e-mail des clientsCô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.
Ajouter le composant Element PaymentCô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
:
Mettre à jour le gestionnaire d'envoiCôté client
Au lieu d’utiliser des méthodes de confirmation individuelles comme stripe.
ou stripe.
, 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.
plutôt que des méthodes de confirmation individuelles.
Lorsqu’il est appelé, le paramètre checkout.
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_
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_
.
L’exemple de code suivant remplace stripe.
par checkout.
:
// 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); } };
Gérer les événements post-paiementCô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.
, nous vous recommandons de gérer ces autres événements lorsque vous encaissez des paiements à l’aide de l’Element Payment :
Événement | Description | Action |
---|---|---|
checkout.session.completed | Envoyé lorsqu’un client effectue un paiement avec succès. | Envoyez au client une confirmation de commande et traitez sa commande. |
checkout_session.async_payment_succeeded | Envoyé 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_failed | Envoyé lorsqu’un client effectue une tentative de paiement qui se solde par un échec. | Si un paiement sort de l’état async_ , proposez au client de retenter le paiement. |
checkout.session.expired | Envoyé lorsque la Checkout d’un client a expiré, c’est-à-dire après 24 heures. | Si un paiement passe de expired à payment_ , proposez au client de recharger la page de paiement et de créer une nouvelle Checkout. |
Tester l'intégration
- Accédez à votre page de paiement.
- 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.
- Envoyez le paiement à Stripe.
- Accédez au Dashboard et recherchez le paiement sur la page Transactions. Si votre paiement a abouti, il apparaîtra dans cette liste.
- 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.
Consultez la section consacrée aux tests pour obtenir des informations supplémentaires sur la manière de tester votre intégration.