# Migrer vers les tokens de confirmation Finaliser les paiements sur le serveur en utilisant un ConfirmationToken au lieu d'un PaymentMethod. Ce guide vous explique comment finaliser des paiements côté serveur en utilisant un [ConfirmationToken](https://docs.stripe.com/api/confirmation_tokens/object.md) plutôt qu’un [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) pour envoyer à votre serveur les données collectées auprès de votre client. Un `ConfirmationToken` contient un surensemble des données d’un `PaymentMethod` (par exemple, les informations de livraison), et active de nouvelles fonctionnalités à mesure que nous les développons. ## Créer le Token de confirmation [côté client] Au lieu d’appeler [stripe.createPaymentMethod](https://docs.stripe.com/js/payment_methods/create_payment_method_elements), appelez [stripe.createConfirmationToken](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token) pour créer un objet `ConfirmationToken`. Transmettez ce ConfirmationToken au serveur pour confirmer le PaymentIntent. La méthode `stripe.createConfirmationToken` accepte les mêmes paramètres que `stripe.createPaymentMethod` (via [params.payment_method_data](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token#create_confirmation_token-options-params-payment_method_data)), ainsi que les paramètres [shipping](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token#create_confirmation_token-options-params-shipping) et [return_url](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token#create_confirmation_token-options-params-return_url) supplémentaires. ### Before ```javascript if (error) { // This point is only reached if there's an immediate error when creating the PaymentMethod. // Show the error to your customer (for example, payment details incomplete) handleError(error); return; } // Create and confirm the PaymentIntent const res = await fetch("/create-confirm-intent", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ }), }); ``` ### After ```javascript // Create the ConfirmationToken using the details collected by the Payment Element and additional shipping information. Provide shipping and return_url if you don't want to provide it when confirming the intent on the server const {error, confirmationToken} = await stripe.createConfirmationToken({ elements, params: { payment_method_data: { billing_details: { name: 'Jenny Rosen', } }, // Remove shipping if you're collecting it using Address Element or don't require it shipping: { name: 'Jenny Rosen', address: { line1: '1234 Main Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94111', }, }, return_url: 'https://example.com/order/123/complete', } }); if (error) { // This point is only reached if there's an immediate error when creating the ConfirmationToken. // Show the error to your customer (for example, payment details incomplete) handleError(error); return; } // Create and confirm the PaymentIntent const res = await fetch("/create-confirm-intent", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({confirmationTokenId: confirmationToken.id, }), }); ``` ## Créer et envoyer le paiement à Stripe [côté serveur] Vous transmettez le ConfirmationToken au serveur pour confirmer le [PaymentIntent](https://docs.stripe.com/api/payment_intents.md), plutôt que de transmettre un [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) comme vous l’avez fait précédemment. Les propriétés stockées sur le `ConfirmationToken` sont appliquées à l’Intent lorsque son ID est fourni dans le paramètre [confirmation_token](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-confirmation_token) au moment de la confirmation. > Si vous renseignez les paramètres [shipping](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token#create_confirmation_token-options-params-shipping) et [return_url](https://docs.stripe.com/js/confirmation_tokens/create_confirmation_token#create_confirmation_token-options-params-return_url) du ConfirmationToken, vous n’avez pas besoin de les spécifier à nouveau lors de la confirmation du PaymentIntent. ### Before ```javascript app.post('/create-confirm-intent', async (req, res) => { try { const intent = await stripe.paymentIntents.create({ confirm: true, amount: 1099, currency: 'usd', // In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. automatic_payment_methods: {enabled: true}, use_stripe_sdk: true, }); res.json({ client_secret: intent.client_secret, status: intent.status }); } catch (err) { res.json({ error: err }) } }); ``` ### After ```javascript app.post('/create-confirm-intent', async (req, res) => { try { const intent = await stripe.paymentIntents.create({ confirm: true, amount: 1099, currency: 'usd', // In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. automatic_payment_methods: {enabled: true}, use_stripe_sdk: true,// the ConfirmationToken ID sent by your client that already has the shipping, mandate_data, and return_url data confirmation_token: req.body.confirmationTokenId, }); res.json({ client_secret: intent.client_secret, status: intent.status }); } catch (err) { res.json({ error: err }) } }); ``` Tous les paramètres fournis directement au PaymentIntent ou au SetupIntent au moment de la confirmation, tels que `shipping`, remplacent les propriétés correspondantes au niveau du ConfirmationToken. ## Optional: Définition des paramètres conditionnels setup_future_usage ou capture_method en fonction du moyen de paiement Avec un [ConfirmationToken](https://docs.stripe.com/api/confirmation_tokens/object.md), nous avons ajouté des validations supplémentaires pour nous assurer que les paramètres de votre client sont cohérents avec vos paramètres serveur. Cela peut entrer en conflit avec votre intégration si vous définissez `setup_future_usage` ou `capture_method` sur le `PaymentIntent` ou le `SetupIntent` en fonction du moyen de paiement choisi par le client final. Si vous rencontrez ce problème, voici la bonne méthode d’intégration : 1. Ne définissez *pas* `setup_future_usage` ni `capture_method` lors de l’instanciation d’Elements. 1. Ne définissez *pas* `setup_future_usage` ou `capture_method` pour le paramètre de niveau supérieur de l’Intent (par exemple, `paymentIntent.create({ setup_future_usage = ‘off_session’})`). 1. Définissez les paramètres `setup_future_usage` ou `capture_method` pour chacun des moyens de paiement dans le paramètre `payment_method_options` de l’Intent. Par exemple : ```javascript stripe.paymentIntents.create({ amount: 100, currency: 'USD', payment_method_options: { card: { setup_future_usage: 'off_session', capture_method: 'manual' }, ideal: { setup_future_usage: 'off_session' } } }); ``` ## Voir aussi - [Concevoir une intégration](https://docs.stripe.com/payments/payment-element/design-an-integration.md)