Configurer des paiements futurs
Comment enregistrer les données de paiement de vos clients et les débiter ultérieurement.
Pour collecter les informations de paiement du client que vous pourrez réutiliser ultérieurement, utilisez le mode configuration de Checkout. Le mode configuration utilise l’API Setup Intents pour créer des moyens de paiement.
Consultez notre exemple fonctionnel complet sur GitHub.
Configurer StripeCôté serveur
Tout d’abord, il vous faut un compte Stripe. S’inscrire.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
Créer une session CheckoutCôté clientCôté serveur
Ajoutez à votre site Web un bouton de paiement qui appelle un endpoint côté serveur afin de créer une session Checkout.
<html> <head> <title>Checkout</title> </head> <body> <form action="/create-checkout-session" method="POST"> <button type="submit">Checkout</button> </form> </body> </html>
Pour créer une session en mode configuration, utilisez le paramètre mode
avec la valeur setup
lors de la création de la session. Vous pouvez éventuellement spécifier le paramètre client pour associer automatiquement le moyen de paiement créé à un client existant. Checkout utilise des moyens de paiement dynamiques par défaut, ce qui vous oblige à transmettre le paramètre currency lorsque vous utilisez le mode setup
.
Associez la variable de modèle {CHECKOUT_
à l’URL success_
pour accéder à l’ID de session une fois que votre client termine sa session Checkout. Après avoir créé la session Checkout, redirigez votre client vers l’URL renvoyée dans la réponse.
Payment methods
By default, Stripe enables cards and other common payment methods. You can turn individual payment methods on or off in the Stripe Dashboard. In Checkout, Stripe evaluates the currency and any restrictions, then dynamically presents the supported payment methods to the customer.
To see how your payment methods appear to customers, enter a transaction ID or set an order amount and currency in the Dashboard.
You can enable Apple Pay and Google Pay in your payment methods settings. By default, Apple Pay is enabled and Google Pay is disabled. However, in some cases Stripe filters them out even when they’re enabled. We filter Google Pay if you enable automatic tax without collecting a shipping address.
Checkout’s Stripe-hosted pages don’t need integration changes to enable Apple Pay or Google Pay. Stripe handles these payments the same way as other card payments.
Récupérer la session CheckoutCôté serveur
Une fois que votre client a terminé sa session Checkout, vous devez récupérer l’objet session. Il y a deux façons de procéder :
- De manière asynchrone : en traitant les webhooks
checkout.
, qui contiennent un objet session. En savoir plus sur la configuration des webhooks.session. completed - De manière synchrone : obtenez l’ID de session à partir de l’URL
success_
lorsqu’un utilisateur est redirigé vers votre site. Utilisez l’ID de session pour récupérer l’objet de session.url
Le choix entre ces deux méthodes dépend de votre tolérance aux abandons de paiement. En effet, il peut arriver que vos clients n’arrivent pas à l’URL success_
après la réussite d’un paiement. Ils peuvent par exemple fermer l’onglet de leur navigateur avant d’être correctement redirigés. Si votre intégration traite les webhooks, elle ne sera pas exposée à ce type d’abandon de paiement.
Après avoir récupéré l’objet session, obtenez la valeur de la clé setup_
, qui correspond à l’ID du SetupIntent créé lors de la session Checkout. Un SetupIntent est un objet permettant de configurer les coordonnées de compte bancaire de votre client en vue de paiements futurs.
Exemple de charge utile checkout.
:
{ "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "client_reference_id": null, "customer": "", "customer_email": null, "display_items": [], "mode": "setup", "setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" }
Prenez note de l’ID du setup_
pour la prochaine étape.
Récupérer le SetupIntentCôté serveur
À l’aide de l’ID de setup_
, récupérez l’objet SetupIntent. L’objet renvoyé contient un ID de payment_
que vous pouvez associer à un client à l’étape suivante.
Remarque
Si vous récupérez ces informations de manière synchrone auprès de l’API Stripe (et non en traitant des webhooks), vous pouvez combiner cette étape-ci à l’étape précédente en développant l’objet SetupIntent dans votre requête au endpoint /v1/checkout/session. De cette manière, vous n’avez pas besoin d’effectuer deux requêtes réseau différentes pour accéder à l’ID du PaymentMethod qui vient d’être créé.
Débiter ultérieurement le moyen de paiement enregistréCôté serveur
Si vous n’avez pas renseigné de client existant à la création de la session Checkout, utilisez l’ID de PaymentMethod pour associer l’objet PaymentMethod à un client. Une fois cette opération effectuée, vous pouvez effectuer un paiement hors session à l’aide d’un PaymentIntent :
- Définissez customer sur l’ID du client et payment_method sur l’ID du PaymentMethod.
- Définissez l’attribut off_session sur
true
pour indiquer que le client ne se trouve pas dans votre tunnel de paiement lors d’une tentative de paiement, et qu’il ne peut donc pas répondre à une demande d’authentification effectuée par un partenaire, comme un émetteur de cartes, une banque ou un autre établissement de paiement. Si un partenaire demande une authentification dans le tunnel de paiement, Stripe demande une exemption en s’appuyant sur les informations utilisée par le client pendant une session précédente. Si les conditions d’exemption ne sont pas remplies, le PaymentIntent peut renvoyer une erreur. - Définissez la propriété confirm du PaymentIntent sur la valeur
true
, ce qui aura pour effet de générer immédiatement une confirmation lorsque vous créez le PaymentIntent.
Lorsqu’une tentative de paiement échoue, la requête échoue également avec un code d’état HTTP 402. L’état du PaymentIntent est requires_payment_method. Vous devez inviter votre client à revenir dans votre application (par e-mail ou par une notification dans l’application par exemple) et orientez votre client vers une nouvelle session Checkout pour sélectionner un autre moyen de paiement.