# Traiter les commandes Découvrez comment traiter les paiements reçus avec l’API Checkout Sessions. # Page entièrement hébergée > This is a Page entièrement hébergée for when payment-ui is stripe-hosted. View the full page at https://docs.stripe.com/checkout/fulfillment?payment-ui=stripe-hosted. Lorsque vous recevez un paiement via l’API Checkout Sessions (y compris Payment Links), vous devez peut-être effectuer une action pour fournir à votre client ce pour quoi il a payé. Par exemple, vous devrez peut-être lui accorder l’accès à un service ou lui expédier des biens physiques. Ce processus est connu sous le nom de traitement des commandes, et vous avez deux façons de procéder : - **Manuellement** : vous pouvez réaliser manuellement des commandes en utilisant les informations que Stripe met à votre disposition. Par exemple, vous pouvez surveiller le [Dashboard](https://docs.stripe.com/dashboard/basics.md), vérifier les e-mails de notification de paiement ou consulter les rapports, puis réaliser les commandes. - **Automatiquement** : vous pouvez créer un système de réalisation automatisé. (Recommended) La première option convient aux projets à faible volume ou expérimentaux, mais dans la plupart des cas, nous recommandons d’automatiser le traitement des commandes. La suite de ce guide vous explique comment mettre en place un système de traitement automatique des commandes. ## Exécution automatique Le système de traitement automatique décrit ci-dessous utilise une combinaison de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et une redirection vers votre site web pour déclencher l’exécution. Vous devez utiliser des webhooks pour vous assurer que le traitement a lieu pour chaque paiement, et les redirections permettent à vos clients d’accéder aux services ou aux détails de l’exécution immédiatement après le paiement. > Payment Links utilise Checkout, de sorte que toutes les informations ci-dessous s’appliquent à la fois à Payment Links et à Checkout, sauf indication contraire. ## Créer une fonction de réalisation [Côté serveur] Créez une fonction sur votre serveur pour initier le traitement une fois les paiements effectués. Les webhooks en place déclencheront cette fonction, qui sera appelée lorsque les clients seront renvoyés sur votre site Web après avoir effectué le paiement. Ce guide fait référence à cette fonction sous le nom de `fulfill_checkout`, mais vous pouvez lui donner un autre nom. Ne procédez à l’exécution qu’une seule fois par paiement. En raison du mode de fonctionnement de Checkout et d’Internet, votre fonction `fulfill_checkout` peut être appelée plusieurs fois, éventuellement en même temps, pour la même session Checkout. Exécuter le paiement une seule fois permet d’éviter tout comportement indésirable. Votre fonction `fulfill_checkout` doit : 1. Gérer correctement le fait d’être appelée plusieurs fois avec le même identifiant de session Checkout. 1. Accepter un ID de *Session Checkout* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription) comme argument. 1. Récupérer la session Checkout depuis l’API avec la propriété [line_items](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-line_items) [étendue](https://docs.stripe.com/api/expanding_objects.md). 1. Vérifier la propriété [payment_status](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_status) pour déterminer si le traitement doit être déclenché. 1. Lancer le traitement des postes de facture. 1. Enregistrer l’état du traitement pour la session Checkout fournie. Utilisez le code ci-dessous comme point de départ pour votre fonction `fulfill_checkout`. Les commentaires `TODO` indiquent les fonctionnalités que vous devez implémenter. > Les extraits de code ci-dessous peuvent nommer la fonction `fulfill_checkout` `fulfillCheckout` ou `FulfillCheckout` selon la le langage sélectionné. Il s’agit bien d’une même fonction. #### Ruby ```ruby def fulfill_checkout(session_id) # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. client = Stripe::StripeClient.new('<>') puts "Fullfilling Checkout Session #{session_id}" # TODO: Make this function safe to run multiple times, # even concurrently, with the same session ID # TODO: Make sure fulfillment hasn't already been # performed for this Checkout Session # Retrieve the Checkout Session from the API with line_items expanded checkout_session = client.v1.checkout.sessions.retrieve( session_id, {expand: ['line_items']}, ) # Check the Checkout Session's payment_status property # to determine if fulfillment should be performed if checkout_session.payment_status != 'unpaid' # TODO: Perform fulfillment of the line items # TODO: Record/save fulfillment status for this # Checkout Session end end ``` > Si une session Checkout comporte de nombreux postes, utilisez la [pagination automatique](https://docs.stripe.com/api/pagination/auto.md) avec l’[API pour les postes Checkout](https://docs.stripe.com/api/checkout/sessions/line_items.md) pour les récupérer tous. En fonction des moyens de paiement que vous acceptez et des besoins de votre activité, vous pouvez demander à votre fonction `fulfill_checkout` d’effectuer les opérations suivantes : - Fournir l’accès aux services. - Déclencher l’envoi des marchandises. - Enregistrer une copie des détails du paiement et des postes de la commande dans votre base de données. - Envoyer à votre client un reçu personnalisé par e-mail si vous n’avez pas activé les [reçus de Stripe](https://docs.stripe.com/receipts.md). - Rapprocher les postes et les quantités achetées si vous autorisez les clients à ajuster les quantités dans Checkout. - Actualiser les registres d’inventaire ou de stock. ## Créer un gestionnaire d'événement de paiement [Côté serveur] Pour déclencher le traitement, créez un gestionnaire d’événements webhook pour écouter les événements de paiement et lancer votre fonction `fulfill_checkout`. Lorsqu’un règlement est effectué, un événement `checkout.session.completed` est créé. Configurez un endpoint sur votre serveur pour accepter, traiter et confirmer la réception de ces événements. ### Moyens de paiement immédiat ou différé Certains moyens de paiement ne sont pas [instantanés](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les [prélèvements ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit.md) et autres virements bancaires. Cela signifie que les fonds ne seront pas immédiatement disponibles une fois le paiement finalisé. Les moyens de paiement différé génèrent un événement [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) lorsque le paiement est exécuté ultérieurement. L’objet reste indiqué comme étant en cours de traitement jusqu’à ce que le paiement aboutisse ou échoue. > La clé secrète du webhook (`whsec_...`) indiquée dans le code ci-dessous provient soit de l’interface CLI Stripe, soit de votre endpoint de webhook. Vous pouvez utiliser la CLI Stripe pour des tests locaux, et Stripe utilise un endpoint de webhook pour envoyer des événements à votre gestionnaire d’événements lorsqu’il est exécuté sur un serveur. Pour en savoir plus, consulter la section suivante. #### Ruby ```ruby require 'sinatra' # Use the secret provided by Stripe CLI for local testing # or your webhook endpoint's secret. endpoint_secret = 'whsec_...' post '/webhook' do event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. begin sig_header = request.env['HTTP_STRIPE_SIGNATURE'] payload = request.body.read event = Stripe::Webhook.construct_event(payload, sig_header, endpoint_secret) rescue JSON::ParserError => e # Invalid payload return status 400 rescue Stripe::SignatureVerificationError => e # Invalid signature return status 400 end if event['type'] == 'checkout.session.completed' || event['type'] == 'checkout.session.async_payment_succeeded' fulfill_checkout(event['data']['object']['id']) end status 200 end ``` Vous pouvez également vouloir écouter et gérer les événements `checkout.session.async_payment_failed`. Par exemple, vous pouvez envoyer un e-mail à votre client en cas d’échec d’un paiement différé. ## Testez votre gestionnaire d'événements localement Le moyen le plus rapide de développer et de tester votre gestionnaire d’événements de webhook est avec la [CLI Stripe](https://docs.stripe.com/stripe-cli.md). Si vous n’avez pas la CLI Stripe, suivez le [guide d’installation](https://docs.stripe.com/stripe-cli/install.md) pour démarrer. Lorsque la CLI Stripe est installée, vous pouvez tester votre gestionnaire d’événements localement. Lancez votre serveur (par exemple, sur `localhost:4242`), puis exécutez la commande [écouter stripe](https://docs.stripe.com/cli/listen) pour que la CLI Stripe transmette les événements à votre serveur local : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_' (^C to quit) ``` Ajoutez le secret du webhook (`whsec_...`) à votre code de gestion des événements, puis testez la réalisation en utilisant Checkout en tant que client : - Appuyez sur le bouton de paiement qui vous permet de passer à Checkout, ou visitez votre Payment Link - Fournissez les données de test suivantes dans Checkout : - Saisissez `4242 4242 4242 4242` comme numéro de carte bancaire - Saisissez n’importe quelle date future comme date d’expiration - Saisissez n’importe quel code CVC à 3 chiffres - Saisissez un code postal pour la facturation (`90210`) - Appuyez sur le bouton **Payer** Une fois le paiement effectué, vérifiez les points suivants : - Sur votre ligne de commande, où `stripe listen` s’exécute, vous voyez un événement `checkout.session.completed` transmis à votre serveur local. - Les logs de votre serveur affichent la sortie attendue de votre fonction `fulfill_checkout`. ## Créer un endpoint de webhook Après avoir effectué des tests localement, configurez votre gestionnaire d’événements webhook sur votre serveur. Ensuite, [créez un endpoint webhook](https://docs.stripe.com/webhooks.md#register-webhook) pour envoyer les événements `checkout.session.completed` à votre serveur, puis testez à nouveau le tunnel de paiement. ## Configurer l'URL d'une page d'accueil [Recommandé] Configurez Checkout pour rediriger vos clients vers une page de votre site Web une fois qu’ils ont terminé leur commande. Incluez l’espace réservé `{CHECKOUT_SESSION_ID}` dans l’URL de votre page. Il sera remplacé par l’ID de session Checkout lorsque vos clients seront redirigés depuis Checkout. ### Checkout hébergé Pour les Checkout Sessions avec l’[ui_mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) défini par défaut sur `hosted_page`, définissez l’URL `success_url`. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}" ``` Lorsque vous avez configuré un endpoint webhook pour écouter les événements `checkout.session.completed` et que vous définissez une `success_url`, Checkout attend jusqu’à 10 secondes que votre serveur réponde à l’envoi de l’événement webhook avant de rediriger votre client. Si vous utilisez cette approche, assurez-vous que votre serveur réponde aux événements `checkout.session.completed` le plus rapidement possible. Si vous utilisez l’interface Stripe CLI pour des tests locaux, Checkout redirige immédiatement vers la `success_url`. Ce comportement n’est pas pris en charge pour les endpoints webhook enregistrés dans un compte [organisation](https://docs.stripe.com/get-started/account/orgs.md). Stripe n’attend pas que les endpoints webhook organisation qui écoutent `checkout.session.completed` répondent lors de la redirection des clients Checkout. ### Payment Links Pour les liens de paiement que vous créez avec l’API, définissez l’URL [after_completion.redirect.url](https://docs.stripe.com/api/payment-link/create.md#create_payment_link-after_completion-redirect-url). ```curl curl https://api.stripe.com/v1/payment_links \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "after_completion[type]=redirect" \ --data-urlencode "after_completion[redirect][url]=https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}" ``` Pour les Payment Links que vous [créez dans le Dashboard](https://dashboard.stripe.com/payment-links/create) : 1. Accédez à l’onglet **Après le paiement**. 1. Sélectionnez **Ne pas afficher la page de confirmation**. 1. Fournissez l’URL de votre page d’accueil qui inclut le paramètre substituable `{CHECKOUT_SESSION_ID}` (par exemple, `https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}`) ## Déclencher la réalisation sur votre page d'accueil [Recommandé] Il est nécessaire d’[écouter les webhooks](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler) pour vous assurer de toujours déclencher l’exécution de chaque paiement, mais les webhooks peuvent parfois être retardés. Pour optimiser votre tunnel de paiement et garantir une exécution immédiate lorsque votre client est présent, déclenchez également l’exécution depuis votre page d’accueil. Utilisez l’identifiant de la session Checkout de l’URL indiquée à l’étape précédente pour effectuer les opérations suivantes : 1. Lorsque votre serveur reçoit une requête pour votre page d’accueil Checkout, extrayez l’identifiant de session Checkout de l’URL. 1. Exécutez votre fonction `fulfill_checkout` avec l’identifiant fourni. 1. Affichez la page une fois la tentative de traitement terminée. Lorsque vous affichez votre page d’accueil, vous pouvez présenter les éléments suivants : - Détails du processus de traitement. - Liens ou informations sur les services auxquels le client a désormais accès. - Détails relatifs à l’expédition ou à la logistique des biens physiques. > #### Les webhooks sont indispensables > > Vous ne pouvez pas compter uniquement sur votre page d’accueil Checkout pour déclencher l’exécution, car rien ne garantit que vos clients visiteront cette page. Par exemple, un client peut réussir à payer dans Checkout, puis perdre sa connexion Internet avant que votre page d’accueil ne se charge. > > [Configurez un gestionnaire d’événements webhook](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler) pour que Stripe envoie les événements de paiement directement à votre serveur, sans passer par le client. Les webhooks constituent le moyen le plus fiable d’obtenir la confirmation que vous avez été payé. En cas d’échec de l’envoi d’un événement webhook, Stripe [réessaie plusieurs fois](https://docs.stripe.com/webhooks.md#automatic-retries). # Page entièrement intégrée > This is a Page entièrement intégrée for when payment-ui is embedded-page. View the full page at https://docs.stripe.com/checkout/fulfillment?payment-ui=embedded-page. Lorsque vous recevez un paiement via l’API Checkout Sessions (y compris Payment Links), vous devez peut-être effectuer une action pour fournir à votre client ce pour quoi il a payé. Par exemple, vous devrez peut-être lui accorder l’accès à un service ou lui expédier des biens physiques. Ce processus est connu sous le nom de traitement des commandes, et vous avez deux façons de procéder : - **Manuellement** : vous pouvez réaliser manuellement des commandes en utilisant les informations que Stripe met à votre disposition. Par exemple, vous pouvez surveiller le [Dashboard](https://docs.stripe.com/dashboard/basics.md), vérifier les e-mails de notification de paiement ou consulter les rapports, puis réaliser les commandes. - **Automatiquement** : vous pouvez créer un système de réalisation automatisé. (Recommended) La première option convient aux projets à faible volume ou expérimentaux, mais dans la plupart des cas, nous recommandons d’automatiser le traitement des commandes. La suite de ce guide vous explique comment mettre en place un système de traitement automatique des commandes. ## Exécution automatique Le système de traitement automatique décrit ci-dessous utilise une combinaison de *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) et une redirection vers votre site web pour déclencher l’exécution. Vous devez utiliser des webhooks pour vous assurer que le traitement a lieu pour chaque paiement, et les redirections permettent à vos clients d’accéder aux services ou aux détails de l’exécution immédiatement après le paiement. ## Créer une fonction de réalisation [Côté serveur] Créez une fonction sur votre serveur pour initier le traitement une fois les paiements effectués. Les webhooks en place déclencheront cette fonction, qui sera appelée lorsque les clients seront renvoyés sur votre site Web après avoir effectué le paiement. Ce guide fait référence à cette fonction sous le nom de `fulfill_checkout`, mais vous pouvez lui donner un autre nom. Ne procédez à l’exécution qu’une seule fois par paiement. En raison du mode de fonctionnement de Checkout et d’Internet, votre fonction `fulfill_checkout` peut être appelée plusieurs fois, éventuellement en même temps, pour la même session Checkout. Exécuter le paiement une seule fois permet d’éviter tout comportement indésirable. Votre fonction `fulfill_checkout` doit : 1. Gérer correctement le fait d’être appelée plusieurs fois avec le même identifiant de session Checkout. 1. Accepter un ID de *Session Checkout* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription) comme argument. 1. Récupérer la session Checkout depuis l’API avec la propriété [line_items](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-line_items) [étendue](https://docs.stripe.com/api/expanding_objects.md). 1. Vérifier la propriété [payment_status](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_status) pour déterminer si le traitement doit être déclenché. 1. Lancer le traitement des postes de facture. 1. Enregistrer l’état du traitement pour la session Checkout fournie. Utilisez le code ci-dessous comme point de départ pour votre fonction `fulfill_checkout`. Les commentaires `TODO` indiquent les fonctionnalités que vous devez implémenter. > Les extraits de code ci-dessous peuvent nommer la fonction `fulfill_checkout` `fulfillCheckout` ou `FulfillCheckout` selon la le langage sélectionné. Il s’agit bien d’une même fonction. #### Ruby ```ruby def fulfill_checkout(session_id) # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. client = Stripe::StripeClient.new('<>') puts "Fullfilling Checkout Session #{session_id}" # TODO: Make this function safe to run multiple times, # even concurrently, with the same session ID # TODO: Make sure fulfillment hasn't already been # performed for this Checkout Session # Retrieve the Checkout Session from the API with line_items expanded checkout_session = client.v1.checkout.sessions.retrieve( session_id, {expand: ['line_items']}, ) # Check the Checkout Session's payment_status property # to determine if fulfillment should be performed if checkout_session.payment_status != 'unpaid' # TODO: Perform fulfillment of the line items # TODO: Record/save fulfillment status for this # Checkout Session end end ``` > Si une session Checkout comporte de nombreux postes, utilisez la [pagination automatique](https://docs.stripe.com/api/pagination/auto.md) avec l’[API pour les postes Checkout](https://docs.stripe.com/api/checkout/sessions/line_items.md) pour les récupérer tous. En fonction des moyens de paiement que vous acceptez et des besoins de votre activité, vous pouvez demander à votre fonction `fulfill_checkout` d’effectuer les opérations suivantes : - Fournir l’accès aux services. - Déclencher l’envoi des marchandises. - Enregistrer une copie des détails du paiement et des postes de la commande dans votre base de données. - Envoyer à votre client un reçu personnalisé par e-mail si vous n’avez pas activé les [reçus de Stripe](https://docs.stripe.com/receipts.md). - Rapprocher les postes et les quantités achetées si vous autorisez les clients à ajuster les quantités dans Checkout. - Actualiser les registres d’inventaire ou de stock. ## Créer un gestionnaire d'événement de paiement [Côté serveur] Pour déclencher le traitement, créez un gestionnaire d’événements webhook pour écouter les événements de paiement et lancer votre fonction `fulfill_checkout`. Lorsqu’un règlement est effectué, un événement `checkout.session.completed` est créé. Configurez un endpoint sur votre serveur pour accepter, traiter et confirmer la réception de ces événements. ### Moyens de paiement immédiat ou différé Certains moyens de paiement ne sont pas [instantanés](https://docs.stripe.com/payments/payment-methods.md#payment-notification), comme les [prélèvements ACH Direct Debit](https://docs.stripe.com/payments/ach-direct-debit.md) et autres virements bancaires. Cela signifie que les fonds ne seront pas immédiatement disponibles une fois le paiement finalisé. Les moyens de paiement différé génèrent un événement [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) lorsque le paiement est exécuté ultérieurement. L’objet reste indiqué comme étant en cours de traitement jusqu’à ce que le paiement aboutisse ou échoue. > La clé secrète du webhook (`whsec_...`) indiquée dans le code ci-dessous provient soit de l’interface CLI Stripe, soit de votre endpoint de webhook. Vous pouvez utiliser la CLI Stripe pour des tests locaux, et Stripe utilise un endpoint de webhook pour envoyer des événements à votre gestionnaire d’événements lorsqu’il est exécuté sur un serveur. Pour en savoir plus, consulter la section suivante. #### Ruby ```ruby require 'sinatra' # Use the secret provided by Stripe CLI for local testing # or your webhook endpoint's secret. endpoint_secret = 'whsec_...' post '/webhook' do event = nil # Verify webhook signature and extract the event # See https://stripe.com/docs/webhooks#verify-events for more information. begin sig_header = request.env['HTTP_STRIPE_SIGNATURE'] payload = request.body.read event = Stripe::Webhook.construct_event(payload, sig_header, endpoint_secret) rescue JSON::ParserError => e # Invalid payload return status 400 rescue Stripe::SignatureVerificationError => e # Invalid signature return status 400 end if event['type'] == 'checkout.session.completed' || event['type'] == 'checkout.session.async_payment_succeeded' fulfill_checkout(event['data']['object']['id']) end status 200 end ``` Vous pouvez également vouloir écouter et gérer les événements `checkout.session.async_payment_failed`. Par exemple, vous pouvez envoyer un e-mail à votre client en cas d’échec d’un paiement différé. ## Testez votre gestionnaire d'événements localement Le moyen le plus rapide de développer et de tester votre gestionnaire d’événements de webhook est avec la [CLI Stripe](https://docs.stripe.com/stripe-cli.md). Si vous n’avez pas la CLI Stripe, suivez le [guide d’installation](https://docs.stripe.com/stripe-cli/install.md) pour démarrer. Lorsque la CLI Stripe est installée, vous pouvez tester votre gestionnaire d’événements localement. Lancez votre serveur (par exemple, sur `localhost:4242`), puis exécutez la commande [écouter stripe](https://docs.stripe.com/cli/listen) pour que la CLI Stripe transmette les événements à votre serveur local : ```bash stripe listen --forward-to localhost:4242/webhook Ready! Your webhook signing secret is 'whsec_' (^C to quit) ``` Ajoutez le secret du webhook (`whsec_...`) à votre code de gestion des événements, puis testez la réalisation en utilisant Checkout en tant que client : - Appuyez sur le bouton de paiement qui vous permet de passer à Checkout, ou visitez votre Payment Link - Fournissez les données de test suivantes dans Checkout : - Saisissez `4242 4242 4242 4242` comme numéro de carte bancaire - Saisissez n’importe quelle date future comme date d’expiration - Saisissez n’importe quel code CVC à 3 chiffres - Saisissez un code postal pour la facturation (`90210`) - Appuyez sur le bouton **Payer** Une fois le paiement effectué, vérifiez les points suivants : - Sur votre ligne de commande, où `stripe listen` s’exécute, vous voyez un événement `checkout.session.completed` transmis à votre serveur local. - Les logs de votre serveur affichent la sortie attendue de votre fonction `fulfill_checkout`. ## Créer un endpoint de webhook Après avoir effectué des tests localement, configurez votre gestionnaire d’événements webhook sur votre serveur. Ensuite, [créez un endpoint webhook](https://docs.stripe.com/webhooks.md#register-webhook) pour envoyer les événements `checkout.session.completed` à votre serveur, puis testez à nouveau le tunnel de paiement. ## Configurer l'URL d'une page d'accueil [Recommandé] Configurez Checkout pour rediriger vos clients vers une page de votre site Web une fois qu’ils ont terminé leur commande. Incluez l’espace réservé `{CHECKOUT_SESSION_ID}` dans l’URL de votre page. Il sera remplacé par l’ID de session Checkout lorsque votre client aura terminé le processus de paiement. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/after-checkout?session_id={CHECKOUT_SESSION_ID}" ``` ## Déclencher la réalisation sur votre page d'accueil [Recommandé] Il est nécessaire d’[écouter les webhooks](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler) pour vous assurer de toujours déclencher l’exécution de chaque paiement, mais les webhooks peuvent parfois être retardés. Pour optimiser votre tunnel de paiement et garantir une exécution immédiate lorsque votre client est présent, déclenchez également l’exécution depuis votre page d’accueil. Utilisez l’identifiant de la session Checkout de l’URL indiquée à l’étape précédente pour effectuer les opérations suivantes : 1. Lorsque votre serveur reçoit une requête pour votre page d’accueil Checkout, extrayez l’identifiant de session Checkout de l’URL. 1. Exécutez votre fonction `fulfill_checkout` avec l’identifiant fourni. 1. Affichez la page une fois la tentative de traitement terminée. Lorsque vous affichez votre page d’accueil, vous pouvez présenter les éléments suivants : - Détails du processus de traitement. - Liens ou informations sur les services auxquels le client a désormais accès. - Détails relatifs à l’expédition ou à la logistique des biens physiques. > #### Les webhooks sont indispensables > > Vous ne pouvez pas compter uniquement sur votre page d’accueil Checkout pour déclencher l’exécution, car rien ne garantit que vos clients visiteront cette page. Par exemple, un client peut réussir à payer dans Checkout, puis perdre sa connexion Internet avant que votre page d’accueil ne se charge. > > [Configurez un gestionnaire d’événements webhook](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler) pour que Stripe envoie les événements de paiement directement à votre serveur, sans passer par le client. Les webhooks constituent le moyen le plus fiable d’obtenir la confirmation que vous avez été payé. En cas d’échec de l’envoi d’un événement webhook, Stripe [réessaie plusieurs fois](https://docs.stripe.com/webhooks.md#automatic-retries).