# Facturer la livraison Créez différents tarifs de livraison pour vos clients. # API Checkout Sessions > This is a API Checkout Sessions for when payment-ui is embedded-components. View the full page at https://docs.stripe.com/payments/advanced/charge-shipping?payment-ui=embedded-components. Les frais de livraison vous permettent de proposer différentes options d’envoi (Standard, Express, 24 heures, etc.) avec des estimations de livraison plus précises. Vous pouvez facturer les frais de livraison à vos clients en utilisant les produits Stripe. Avant de créer des frais de livraison, découvrez comment [ recueillir les adresses de facturation et de livraison ](https://docs.stripe.com/payments/collect-addresses.md). > Les tarifs d’expédition ne prennent en charge que des valeurs fixes pour l’ensemble de la commande. Vous ne pouvez pas ajuster les frais de livraison en fonction du nombre d’articles dans la commande. ## Créer des frais de livraison [Côté serveur] Les frais de livraison ne prennent en charge que des valeurs de montant fixe pour l’ensemble de la commande. Vous ne pouvez pas ajuster les frais de livraison en fonction du nombre d’articles dans la commande. #### Dashboard Pour ajouter des [frais de livraison](https://dashboard.stripe.com/test/shipping-rates) à l’aide du Dashboard : 1. Cliquez sur **Créer des frais de livraison**. 1. Renseignez un montant, une description et, si vous le souhaitez, une estimation du délai de livraison. 1. Cliquez sur **Enregistrer** et copiez l’ID des frais de livraison (`shr_123456`). ![](https://b.stripecdn.com/docs-statics-srv/assets/create-shipping-rate-dashboard.ddd79821d5edee523d7da9d22682be59.png) Saisir les détails de vos frais de livraison ### Modifier des frais de livraison Vous ne pouvez pas mettre à jour un montant d’une devise qui a déjà été défini sur un tarif de livraison. Après avoir défini une devise et un montant sur un tarif de livraison, vous pouvez seulement ajouter de nouvelles devises. Pour mettre à jour un tarif de livraison dans le Dashboard, vous devez archiver le tarif de livraison, puis en créer un nouveau. ### Archiver les frais de livraison Pour archiver des frais de livraison : 1. Dans l’onglet [Frais de livraison](https://dashboard.stripe.com/test/shipping-rates), sélectionnez les frais de livraison applicables. 1. Cliquez sur le menu déroulant ⋯, puis sélectionnez **Archiver**. Pour désarchiver les frais de livraison, cliquez sur le menu déroulant ⋯ et sélectionnez **Désarchiver les frais de livraison**. #### API > #### Vous souhaitez mettre dynamiquement à jour les frais de livraison ? > > Checkout vous permet de mettre dynamiquement à jour les frais de livraison en fonction de l’adresse fournie par votre client ou de la valeur de la commande. Consultez la section [Personnalisation dynamique des options d’expédition](https://docs.stripe.com/payments/checkout/custom-shipping-options.md) sur cette fonctionnalité en version bêta. [Créez des frais de livraison](https://docs.stripe.com/api/shipping_rates.md), ce qui nécessite au minimum les paramètres `type` et `display_name`. L’exemple de code suivant utilise ces deux paramètres avec `fixed_amount` et `delivery_estimate` pour créer des frais de livraison : ```curl curl https://api.stripe.com/v1/shipping_rates \ -u "<>:" \ -d "display_name=Ground shipping" \ -d type=fixed_amount \ -d "fixed_amount[amount]=500" \ -d "fixed_amount[currency]=usd" \ -d "delivery_estimate[minimum][unit]=business_day" \ -d "delivery_estimate[minimum][value]=5" \ -d "delivery_estimate[maximum][unit]=business_day" \ -d "delivery_estimate[maximum][value]=7" ``` ### Modifier des frais de livraison Pour [mettre à jour les frais de livraison](https://docs.stripe.com/api/shipping_rates/update.md), appelez `Stripe::ShippingRate.update` et mettez à jour les paramètres si nécessaire. ## Créer une session Checkout [Côté serveur] Pour créer une session Checkout qui inclut vos frais de livraison, transmettez l’identifiant du tarif généré au paramètre [shipping_options ](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-shipping_options). Si vous souhaitez créer les frais de livraison en même temps qu’une session Checkout, utilisez le paramètre `shipping_rate_data` avec `shipping_options`. Seules les sessions Checkout en [mode paiement](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) prennent en charge les options de livraison. L’exemple de code suivant ajoute deux options d’expédition à la session Checkout : - Livraison gratuite sous 5 à 7 jours ouvrables (estimation). - Livraison par voie aérienne sous 1 jour ouvré (estimation) pour un coût de 15,00 USD. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d billing_address_collection=required \ -d "shipping_address_collection[allowed_countries][0]=US" \ -d "shipping_address_collection[allowed_countries][1]=CA" \ -d "shipping_options[0][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][amount]=0" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[0][shipping_rate_data][display_name]=Free shipping" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][value]=5" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][value]=7" \ -d "shipping_options[1][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[1][shipping_rate_data][fixed_amount][amount]=1500" \ -d "shipping_options[1][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[1][shipping_rate_data][display_name]=Next day air" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][minimum][value]=1" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][maximum][value]=1" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/return" ``` ## Collecter l'option de livraison choisie par le client [Côté client] #### HTML + JS Côté client, utilisez l’objet [ shippingOptions ](https://docs.stripe.com/js/custom_checkout/session_object#custom_checkout_session_object-shippingOptions) pour afficher les options de livraison disponibles, par exemple dans une liste de boutons radio. Lorsque votre client sélectionne une option de livraison, appelez [ updateShippingOption ](https://docs.stripe.com/js/custom_checkout/update_shipping_option) avec l’identifiant de l’option de livraison. ```html
``` ```javascript actions.getSession().shippingOptions.forEach((option) => { const form = document.createElement('form'); shippingOptions.forEach(option => { const label = document.createElement('label'); const radio = document.createElement('input'); radio.type = 'radio'; radio.id = option.id; radio.name = 'shippingOption'; radio.value = option.id; radio.addEventListener('click', () => {actions.updateShippingOption(option.id) }) const labelText = document.createTextNode(option.displayName); label.appendChild(radio); label.appendChild(labelText); form.appendChild(label); }); document.getElementById('shipping-options').appendChild(form); }); const shippingAddressElement = checkout.createShippingAddressElement(); shippingAddressElement.mount('#shipping-address'); ``` #### React Côté client, utilisez l’objet [ shippingOptions ](https://docs.stripe.com/js/custom_checkout/session_object#custom_checkout_session_object-shippingOptions) pour afficher les options de livraison disponibles, par exemple dans une liste de boutons radio. Lorsque votre client sélectionne une option de livraison, appelez [ updateShippingOption ](https://docs.stripe.com/js/custom_checkout/update_shipping_option) avec l’identifiant de l’option de livraison. ```jsx import React from 'react'; import {useCheckoutElements} from '@stripe/react-stripe-js/checkout' const ShippingOptions = () => { const checkoutState = useCheckoutElements(); if (checkoutState.type === 'loading') { return (
Loading...
); } else if (checkoutState.type === 'error') { return (
Error: {checkoutState.error.message}
); } const {shipping, shippingOptions, updateShippingOption} = checkoutState.checkout; const handleChange = (shippingOptionId) => () => { updateShippingOption(shippingOptionId); }; return (
{shippingOptions.map((option) => { return ( ); })}
) }; ``` ## Optional: Gérer les transactions réussies Une fois le paiement aboutit, vous pouvez récupérer le montant de la livraison dans l’attribut [amount_total](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-amount_total) de [shipping_cost](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-shipping_cost). Vous pouvez également récupérer le tarif de livraison sélectionné à l’aide de l’attribut `shipping_rate` de `shipping_cost`. Pour accéder à la propriété `shipping_cost`, vous devez [créer un gestionnaire d’événements](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler) pour gérer les sessions Checkout terminées. Vous pouvez tester un gestionnaire en [installant la CLI Stripe](https://docs.stripe.com/stripe-cli.md) et en utilisant `stripe listen --forward-to localhost:4242/webhook` pour [transférer les événements vers votre serveur local](https://docs.stripe.com/webhooks.md#test-webhook). Dans l’exemple de code suivant, le gestionnaire permet à l’utilisateur d’accéder à `shipping_property` : #### Ruby ```ruby # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. client = Stripe::StripeClient.new("<>") require 'sinatra' # You can find your endpoint's secret in your webhook settings 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' checkout_session = event['data']['object'] fulfill_order(checkout_session) end status 200 end def fulfill_order(checkout_session)selected_shipping_rate = client.v1.shipping_rates.retrieve(checkout_session.shipping_cost.shipping_rate) shipping_total = checkout_session.shipping_cost.amount_total # TODO: Remove error and implement... raise NotImplementedError.new(<<~MSG) Given the Checkout Session "#{checkout_session.id}" load your internal order from the database then implement your own fulfillment logic. MSG end ``` ## Optional: Établir une estimation du délai de livraison Vous pouvez configurer des tarifs de livraison avec différentes combinaisons d’estimations du délai de livraison. Le tableau suivant présente des exemples d’estimations, avec leurs valeurs `delivery_estimate.minimum` et `delivery_estimate.maximum` correspondantes : | Estimation du délai de livraison | Minimum | Maximum | | -------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | 1 jour | ```es6 { unit: 'day', value: 1, } ``` | ```es6 { unit: 'day', value: 1, } ``` | | 1 jour ouvré | ```es6 { unit: 'business_day', value: 1, } ``` | ```es6 { unit: 'business_day', value: 1, } ``` | | Au moins 2 jours ouvrés | ```es6 { unit: 'business_day', value: 2, } ``` | ```es6 null ``` | | 3 à 7 jours | ```es6 { unit: 'day', value: 3, } ``` | ```es6 { unit: 'day', value: 7, } ``` | | 4 à 8 heures | ```es6 { unit: 'hour', value: 4, } ``` | ```es6 { unit: 'hour', value: 8, } ``` | | De 4 heures à 2 jours ouvrés | ```es6 { unit: 'hour', value: 4, } ``` | ```es6 { unit: 'business_day', value: 2, } ``` | ## Optional: Appliquer la taxe aux frais de livraison Vous pouvez utiliser [Stripe Tax](https://docs.stripe.com/tax/checkout.md) pour calculer automatiquement la taxe appliquée aux frais de livraison en définissant un `tax_code` et un `tax_behavior` sur vos frais de livraison. Stripe Tax détermine automatiquement si la livraison est imposable ([car la fiscalité varie selon l’état et le pays](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md#shipping-tax-code)), puis applique le taux de taxe adapté si c’est le cas. Lors de la création d’un tarif d’expédition avec `shipping_rate_data` ou par le biais de [Create a Shipping Rate](https://docs.stripe.com/api/shipping_rates/create.md), vous pouvez ajouter un paramètre `tax_behavior` et `tax_code` au tarif d’expédition. Nous vous recommandons de définir le `tax_code` sur `Shipping` (`txcd_92010001`) pour vous assurer que vous facturez toujours la juste taxe. Vous pouvez également définir le `tax_code` du tarif de livraison sur `Nontaxable` (`txcd_00000000`) si vous ne souhaitez facturer aucune taxe. Dans cet exemple, nous définissons le `tax_behavior` sur `exclusive` (courant aux États-Unis). Pour plus d’informations, reportez-vous à notre documentation relative au [comportement fiscal](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md#tax-behavior). ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d billing_address_collection=required \ -d "shipping_address_collection[allowed_countries][0]=US" \ -d "shipping_address_collection[allowed_countries][1]=CA" \ -d "shipping_options[0][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][amount]=0" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[0][shipping_rate_data][display_name]=Free shipping" \ -d "shipping_options[0][shipping_rate_data][tax_behavior]=exclusive" \ -d "shipping_options[0][shipping_rate_data][tax_code]=txcd_92010001" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][value]=5" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][value]=7" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][price_data][tax_behavior]=exclusive" \ -d "line_items[0][quantity]=1" \ -d "automatic_tax[enabled]=true" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/return" ``` # API Payment Intents > This is a API Payment Intents for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/advanced/charge-shipping?payment-ui=elements. Les frais de livraison vous permettent d’afficher diverses options de livraison (standard, express et en 24 heures) avec des estimations de livraison plus précises. Facturez vos clients pour la livraison à l’aide de différents produits Stripe, dont certains nécessitent l’écriture de code. Avant de créer des frais de livraison, découvrez comment [collecter les adresses de facturation et de livraison](https://docs.stripe.com/payments/advanced/collect-addresses.md). > #### Plugins tiers > > Si vous utilisez une application tierce avec Stripe (par exemple, [Thrivecart](https://support.thrivecart.com/help/setting-your-physical-fulfilment-shipping-options/) ou [Shopify](https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping/setting-up-shipping-rates)) et que vous souhaitez modifier les frais de livraison, consultez la documentation relative à ce service. L’API Payment Intents ne prend pas en charge le calcul ou la définition des frais de livraison. Si vous avez besoin de cette fonctionnalité, Stripe recommande de la créer vous-même ou d’utiliser [ Checkout ](https://docs.stripe.com/payments/checkout.md). Si vous choisissez de développer vous-même cette fonctionnalité, vous pouvez inclure les frais de livraison dans le prix du produit ou dans le montant total. Cela implique de prendre en compte les frais de livraison lors du calcul du prix total des articles du panier ou de la commande. De cette façon, le client paie un montant unique qui comprend à la fois le prix du produit et les frais de livraison. Voici un aperçu des étapes à suivre : 1. **Déterminer les frais de livraison** : définissez vos frais de livraison. Prenez en compte l’adresse de destination, le poids du colis, la distance ou tout autre critère applicable à votre entreprise. 1. **Calculer le montant total** : ajoutez les frais de livraison au prix des produits pour calculer le montant total. 1. **Intégrer Stripe Elements** : utilisez Stripe Elements pour créer un formulaire de paiement afin de collecter les informations de paiement du client. 1. **Présenter le montant total** : affichez le montant total (à savoir le prix du produit auquel sont ajoutés les frais de livraison) au client sur la page de paiement. 1. **Traiter le paiement** : lorsque le client soumet ses informations de paiement, traitez le paiement dans votre code côté serveur.