Personnaliser dynamiquement les options d'expédition
Actualisez les options de livraison en fonction de l'adresse de livraison du client.
Learn how to dynamically update shipping options based on the address that your customer enters in Checkout.
Use cases 
- Validate an address: Confirm whether you can ship a product to a customer’s address using your own custom validation rules. You can also create a custom UI for customers to confirm their preferred address.
- Show relevant shipping options: Display only available shipping methods, based on the customer’s address. For example, show overnight shipping only for deliveries in your country.
- Dynamically calculate shipping rates: Calculate and display shipping fees based on a customer’s delivery address.
- Update shipping rates based on order total: Offer shipping rates based on the shipping address or order total, such as free shipping for orders over 100 USD. For checkouts allowing quantity changes or cross-sells, see Dynamically updating line items.
Limitations 
- Only supported in payment mode. Shipping rates aren’t available in subscription mode.
- Doesn’t support updates in response to changes from outside of the checkout page.
Créer une session CheckoutCôté serveur
Sur votre serveur, créez une session Checkout.
- Définissez le champ ui_mode sur
embedded
. - Définissez le champ permissions.update_shipping_details sur
server_
.only - Définissez le champ shipping_address_collection.allowed_countries sur la liste des pays auxquels vous souhaitez offrir des services de livraison.
- Définissez l’attribut shipping_options.shipping_rate_data qui crée des frais de livraison fictifs avec un montant de 0 USD.
Par défaut, le client Stripe Checkout met automatiquement à jour le champ shipping_details de l’objet Checkout Session avec les informations d’expédition saisies par le client, y compris son nom et son adresse.
Avertissement
Lorsque le champ permissions.update_shipping_details est défini sur server_
, la mise à jour automatique côté client est désactivée et seul votre serveur peut mettre à jour les informations d’expédition à l’aide de votre clé secrète Stripe.
Personnaliser les options d'expéditionCôté serveur
À partir de votre serveur, créez un nouvel endpoint pour calculer les options d’expédition en fonction de l’adresse de livraison du client.
- Récupérer la session Checkout en utilisant l’
identifiant
checkoutSessionId` du corps de la demande. - Validez les informations de livraison du client fournies dans le corps de la demande.
- Calculez les options d’expédition en fonction de l’adresse de livraison du client et des articles de la session Checkout.
- Modifiez la session Checkout avec les shipping_details et les shipping_options du client.
Monter CheckoutCôté client
Mise en garde
Renvoyez toujours une Promise
à partir de votre fonction onShippingDetailsChange
et résolvez-la avec un objet ResultAction.
Le client Checkout met à jour l’interface utilisateur en fonction du résultat de la fonction onShippingDetailsChange
.
- Lorsque le résultat présente
type: "accept"
, l’interface utilisateur de Checkout affiche les options d’expédition que vous avez définies sur votre serveur. - Lorsque le résultat est
type: "reject"
, l’interface utilisateur de Checkout affiche le message d’erreur que vous avez défini dans le résultat.
Si vous le souhaitez, vous pouvez écouter onShippingDetailsChange
et créer une interface utilisateur personnalisée permettant aux clients de sélectionner et de confirmer leur adresse préférée parmi plusieurs adresses possibles.
Checkout s’affiche dans un iframe qui envoie de manière sécurisée les informations de paiement à Stripe via une connexion HTTPS.
Erreur fréquente
Évitez de placer Checkout dans un autre iframe, car certains moyens de paiement nécessitent une redirection vers une autre page pour la confirmation du paiement.
Tester l'intégration
Follow these steps to test your integration, and ensure your custom shipping options work correctly.
Set up a sandbox environment that mirrors your production setup. Use your Stripe sandbox API keys for this environment.
Simulate various shipping addresses to verify that your
calculateShippingOptions
function handles different scenarios correctly.Verify server-side logic by using logging or debugging tools to confirm that your server:
- Retrieves the Checkout Session.
- Validates shipping details.
- Calculates shipping options.
- Updates the Checkout Session with new shipping details and options. Make sure the update response contains the new shipping details and options.
Verify client-side logic by completing the checkout process multiple times in your browser. Pay attention to how the UI updates after entering shipping details. Make sure that:
- The
onShippingDetailsChange
function is called when expected. - Shipping options update correctly based on the provided address.
- Error messages display properly when shipping is unavailable.
- The
Enter invalid shipping addresses or simulate server errors to test error handling, both server-side and client-side.