Bouton de demande de paiementObsolète
Recueillez les informations de paiement et d'adresse des clients qui utilisent Apple Pay, Google Pay ou Link.
Ancienne fonctionnalité
Le contenu de cette page fait référence à un ancien Element. Utilisez plutôt Express Checkout Element. Si vous avez déjà intégré un bouton de demande de paiement, utilisez notre guide de migration pour passer à Express Checkout Element.
Le bouton de demande de paiement présente les limitations suivantes :
- Seuls les moyens de paiement par carte sont pris en charge
- Link est pris en charge, mais uniquement lorsque des sources de financement par carte sont utilisées
- N’affiche qu’une seule option de paiement
Démonstration
Mise en garde
Le composant Payment Request Button Element affiche de manière dynamique les options de portefeuille lors du paiement, vous offrant une intégration unique pour Apple Pay, Google Pay et Link. Vous pouvez également utiliser le composant Express Checkout Element pour proposer plusieurs boutons de paiement en un clic à vos clients. Comparez les composants Express Checkout Element et Payment Request Button Element.
Les clients voient Apple Pay ou Google Pay si ces moyens de paiement sont activés sur leur appareil, et en fonction du navigateur qu’ils utilisent. Si Link apparaît, c’est peut-être parce que les clients :
- n’ont pas activé Apple Pay ou Google Pay sur leur appareil.
- utilisent Chrome avec des sessions Link actives et authentifiées.
Navigateur + portefeuille | Bouton de paiement |
---|---|
Safari + Apple Pay activé | Apple Pay |
Chrome + Link authentifié | Lien |
Chrome + Google Pay activé et Link non authentifié | Google Pay |
Chrome sur iOS 16 + Apple Pay et Google Pay activés | Apple Pay |
Tout navigateur + ni Apple Pay ni Google Pay actif | Lien |
Conditions préalables
Avant de commencer, vous devez :
Vérifiez les conditions requises pour chaque type de bouton de paiement :
- Apple Pay et Google Pay ne s’affichent pas pour les adresses IP en Inde, alors planifiez vos tests d’intégration en conséquence.
- Apple Pay nécessite macOS 10.12.1, iOS 10.1, ou des versions ultérieures.
- Les appareils compatibles prennent automatiquement en charge Google Pay.
Enregistrez et vérifiez votre domaine en mode test et en mode production.
Ajouter un moyen de paiement à votre navigateur. Vous pouvez par exemple enregistrer une carte dans Chrome ou ajouter une carte à votre compte Google Pay ou à Wallet pour Safari.
Fournissez votre application via HTTPS. Il s’agit d’une exigence à la fois en développement et en production. Vous pouvez également utiliser un service tel que ngrok.
Configurer Stripe ElementsCôté client
Elements est disponible dans Stripe.js. Incluez cette bibliothèque dans votre page et créez un conteneur pour l’Element paymentRequestButton
:
<script src="https://js.stripe.com/v3/"></script> <div id="payment-request-button"> <!-- A Stripe Element will be inserted here. --> </div>
Votre clé API Stripe publiable est également nécessaire, car elle identifie votre site Web auprès de Stripe :
const stripe = Stripe(
, { apiVersion: "2024-11-20.acacia", });'pk_test_TYooMQauvdEDq54NiTphI7jx'
Créer une instance paymentRequestCôté client
Create an instance of stripe.paymentRequest with all required options.
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 1099, }, requestPayerName: true, requestPayerEmail: true, });
Note
Utilisez le paramètre requestPayerName
pour recueillir l’adresse de facturation du payeur pour Apple Pay et Link. Vous pouvez l’utiliser pour effectuer une vérification d’adresse et bloquer les paiements frauduleux. Tous les autres moyens de paiement collectent automatiquement l’adresse de facturation lorsqu’elle est disponible.
Créer et monter l'élément paymentRequestButtonCôté client
Créez l’Element paymentRequestButton
et vérifiez que votre client dispose d’un moyen de paiement actif à l’aide de canMakePayment()
. Dans l’affirmative, montez l’Element dans le conteneur pour afficher le bouton Payment Request. Sinon, vous ne pourrez pas monter l’Element. Dans ce cas, nous vous recommandons de présenter un formulaire de paiement classique à la place.
Note
Si vous acceptez Apple Pay avec le Payment Request Button, vous devez proposer Apple Pay comme principale option de paiement sur votre site Web conformément aux directives d’Apple. En interne, le Payment Request Button utilise l’API canMakePaymentWithActiveCard
d’Apple Pay.
const elements = stripe.elements(); const prButton = elements.create('paymentRequestButton', { paymentRequest, }); (async () => { // Check the availability of the Payment Request API first. const result = await paymentRequest.canMakePayment(); if (result) { prButton.mount('#payment-request-button'); } else { document.getElementById('payment-request-button').style.display = 'none'; } })();
Créer un PaymentIntentCôté serveur
Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus.
Créez un PaymentIntent
sur votre serveur avec un montant et une devise. Décidez toujours du montant à débiter côté serveur, un environnement sécurisé, plutôt que côté client. Cette précaution empêchera les clients malintentionnés de fixer leurs propres tarifs.
Le PaymentIntent renvoyé contient la clé secrète du client, qui est utilisée pour finaliser le paiement de manière sécurisée au lieu de transmettre la totalité de l’objet PaymentIntent. Renvoyez la clé secrète au client pour pouvoir l’utiliser à l’étape suivante.
Finaliser le paiementCôté client
Écoutez l’événement paymentmethod
pour recevoir un objet PaymentMethod. Transmettez l’ID PaymentMethod et la clé secrète du client contenue dans le PaymentIntent à stripe.confirmCardPayment pour finaliser le paiement.
paymentRequest.on('paymentmethod', async (ev) => { // Confirm the PaymentIntent without handling potential next actions (yet). const {paymentIntent, error: confirmError} = await stripe.confirmCardPayment( clientSecret, {payment_method: ev.paymentMethod.id}, {handleActions: false} ); if (confirmError) { // Report to the browser that the payment failed, prompting it to // re-show the payment interface, or show an error message and close // the payment interface. ev.complete('fail'); } else { // Report to the browser that the confirmation was successful, prompting // it to close the browser payment method collection interface. ev.complete('success'); // Check if the PaymentIntent requires any actions and, if so, let Stripe.js // handle the flow. If using an API version older than "2019-02-11" // instead check for: `paymentIntent.status === "requires_source_action"`. if (paymentIntent.status === "requires_action") { // Let Stripe.js handle the rest of the payment flow. const {error} = await stripe.confirmCardPayment(clientSecret); if (error) { // The payment failed -- ask your customer for a new payment method. } else { // The payment has succeeded -- show a success message to your customer. } } else { // The payment has succeeded -- show a success message to your customer. } } });
Mise en garde
Certains navigateurs permettent à vos clients de fermer l’interface de paiement même après que le paiement a été autorisé. Vous pouvez donc recevoir un événement d’annulation sur votre objet PaymentRequest après avoir reçu un événement paymentmethod
. Si vous utilisez l’événement cancel
comme hook pour annuler la commande, veillez également à rembourser le paiement que vous venez de créer.
Tester votre intégration
Pour tester votre intégration, vous devez utiliser le protocole HTTPS et un navigateur pris en charge. Si vous utilisez le paymentRequestButton
Element dans un iframe, l’attribut allow de cet iframe doit être défini sur « payment * ».
Tests régionauxInde
Stripe Elements ne prend pas en charge Google Pay ou Apple Pay pour les comptes et clients Stripe en Inde. Par conséquent, vous ne pouvez pas tester votre intégration Google Pay ou Apple Pay si l’adresse IP du testeur se trouve en Inde, même si le compte Stripe est basé en dehors de l’Inde.
Par ailleurs, chaque moyen de paiement et navigateur présente des exigences spécifiques :
Recueillir les informations de livraison
Pour recueillir les informations de livraison, commencez par inclure l’expression requestShipping: true
dans la requête de création du paiement.
Si vos options de livraison sont indépendantes de l’adresse du client, vous pouvez également fournir plusieurs shippingOptions
à cette étape.
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 1099, }, requestShipping: true, // `shippingOptions` is optional at this point: shippingOptions: [ // The first shipping option in this list appears as the default // option in the browser payment interface. { id: 'free-shipping', label: 'Free shipping', detail: 'Arrives in 5 to 7 days', amount: 0, }, ], });
Ensuite, écoutez l’événement shippingaddresschange
pour détecter quand un client sélectionne une adresse de livraison. Utilisez cette adresse pour récupérer les options de livraison valides sur votre serveur, mettre à jour le total de la commande ou exécuter une autre logique métier. Vous pouvez anonymiser les données d’adresse de l’événement shippingaddresschange
dans le navigateur afin d’éviter de révéler des informations sensibles qui ne sont pas pertinentes pour le calcul des frais de port.
Pour poursuivre le flux, le client doit fournir une option shippingOptions
valide à cette étape.
paymentRequest.on('shippingaddresschange', async (ev) => { if (ev.shippingAddress.country !== 'US') { ev.updateWith({status: 'invalid_shipping_address'}); } else { // Perform server-side request to fetch shipping options const response = await fetch('/calculateShipping', { data: JSON.stringify({ shippingAddress: ev.shippingAddress }) }); const result = await response.json(); ev.updateWith({ status: 'success', shippingOptions: result.supportedShippingOptions, }); } });
Afficher les postes de facture
Use displayItems to display PaymentItem objects and show the price breakdown in the browser’s payment interface.
const paymentRequest = stripe.paymentRequest({ country: 'US', currency: 'usd', total: { label: 'Demo total', amount: 2000, }, displayItems: [ { label: 'Sample item', amount: 1000, }, { label: 'Shipping cost', amount: 1000, } ], });
Personnaliser le bouton
Utilisez les paramètres suivants pour personnaliser l’élément :
elements.create('paymentRequestButton', { paymentRequest, style: { paymentRequestButton: { type: 'default', // One of 'default', 'book', 'buy', or 'donate' // Defaults to 'default' theme: 'dark', // One of 'dark', 'light', or 'light-outline' // Defaults to 'dark' height: '64px', // Defaults to '40px'. The width is always '100%'. }, }, });
Utilisation de votre propre bouton
Si vous souhaitez concevoir votre propre bouton plutôt que d’utiliser le paymentRequestButton
Element, vous pouvez afficher un bouton personnalisé en fonction du résultat de paymentRequest.canMakePayment(). Ensuite, utilisez paymentRequest.show() pour afficher l’interface du navigateur au moment du clic.
Si vous choisissez de concevoir votre propre bouton, suivez les bonnes pratiques d’Apple Pay et Google Pay.
Mise en garde
Link n’est pas pris en charge dans les configurations de boutons personnalisés. Par conséquent, cette option ne sera pas affichée au client si vous décidez d’en utiliser un.
Ajouter un jeton marchand Apple Pay pour les transactions initiées par le marchand
Configurez votre bouton de demande de paiement pour demander un MPAN Apple Pay afin de faciliter les transactions initiées par le marchand (MIT) pour les paiements récurrents, différés ou par chargement automatique.
- Créez une instance de Payment Request.
- Transmettez l’objet
applePay
qui correspond à votre cas d’usage MPAN (sélectionnez un des exemples de code de cas d’usage dans la liste déroulante). - Incluez les paramètres pertinents pour votre cas d’usage.
Utiliser l’élément paymentRequestButton avec Stripe Connect
Les plateformes Connect qui créent des paiements directs ou ajoutent le token à un objet Customer sur le compte connecté doivent suivre des étapes supplémentaires pour utiliser le Payment Request Button Element.
- Sur votre front-end, avant de créer l’instance
PaymentRequest
, définissez l’optionstripeAccount
sur l’instance Stripe :
const stripe = Stripe(
, { apiVersion: "2024-11-20.acacia", stripeAccount: 'CONNECTED_STRIPE_ACCOUNT_ID', });'pk_test_TYooMQauvdEDq54NiTphI7jx'
- Enregistrez tous les domaines sur lesquels vous prévoyez d’afficher le bouton de demande de paiement.
Link pour le bouton de demande de paiement
When new customers come to your site, they can use Link in the Payment Request Button to pay with their saved payment details. With Link, they don’t need to manually enter their payment information. Link requires domain registration.
Mentionner le fonctionnement de Stripe à vos clients
Stripe recueille des informations sur les interactions des clients avec Elements afin de vous fournir des services, de prévenir la fraude et d’améliorer ses services. Cela inclut l’utilisation de cookies et d’adresses IP pour identifier les Elements qu’un client a vus au cours d’une même session Checkout. Vous êtes responsable de la divulgation et de l’obtention de tous les droits et consentements nécessaires pour que Stripe puisse utiliser les données à cette fin. Pour en savoir plus, visitez notre Centre de confidentialité.