Accéder directement au contenu
Créez un compte
ou
connecter-vous
Logo de la documentation Stripe
/
Demander à l'assistant IA
Créez un compte
Connectez-vous
Démarrer
Paiements
Revenus
Plateformes et places de marché
Gestion de fonds
Ressources pour les développeurs
Aperçu
À propos des paiements Stripe
Mettre votre intégration à niveau
Analyses des paiements
Paiements en ligne
PrésentationTrouver votre cas d'usageManaged Payments
Utiliser Payment Links
Créer une page de paiement
    Présentation
    Solutions de démarrage rapide
    Personnaliser l'apparence
    Collecter des informations supplémentaires
    Collecter des taxes
    Mise à jour dynamique lors du paiement
      Personnalisation dynamique des options d'expédition
      Mise à jour dynamique des postes de facture
      Mettre à jour la durée des essais de manière dynamique
      Mettre à jour dynamiquement les réductions
    Gérer votre catalogue de produits
    Abonnements
    Gérer les moyens de paiement
    Offrir aux clients la possibilité de payer dans leur devise locale
    Ajoutez des réductions, des ventes incitatives et des articles facultatifs
    Configurer des paiements futurs
    Enregistrer les coordonnées bancaires lors du paiement
    Approuver manuellement les paiements sur votre serveur
    Après le paiement
    Liste des modifications de la version bêta d'Elements avec l'API Checkout Sessions
    Migrer depuis l'ancienne version de Checkout
    Migrer vers Checkout pour utiliser Prices
Développer une intégration avancée
Développer une intégration dans l'application
Moyens de paiement
Ajouter des moyens de paiement
Gérer les moyens de paiement
Paiement accéléré avec Link
Interfaces de paiement
Payment Links
Checkout
Elements pour le web
Elements intégrés à l'application
Scénarios de paiement
Gérer plusieurs devises
Tunnels de paiement personnalisés
Acquisition flexible
Orchestration
Paiements par TPE
Terminal
Au-delà des paiements
Constituez votre entreprise
Cryptomonnaies
Financial Connections
Climate
Comprendre la fraude
Radar pour la protection contre la fraude
Gestion des litiges
Vérifier l'identité
AccueilPaiementsBuild a checkout pageDynamically update checkout

Mettre à jour les réductions de manière dynamiqueVersion bêta privée

Mettez à jour les réductions en réponse aux modifications apportées par les clients lors du paiement.

Version bêta privée

Cette fonctionnalité est disponible en version bêta privée. Demander l’accès aux réductions dynamiques dans la page de paiement.

Découvrez comment ajouter ou supprimer dynamiquement des réductions sur une session Checkout.

Cas d’usage

Ce guide vous explique comment intégrer votre système de réductions interne pour créer des remises dynamiques, mais vous pouvez également appliquer :

  • Des remises de fidélité : appliquez automatiquement des remises en fonction du niveau de fidélité du client ou de l’historique d’achat.
  • Des promotions sur la valeur du panier : Ajoutez des réductions lorsque le total de la commande dépasse des seuils spécifiques (par exemple, 10 $ de réduction sur les commandes de plus de 100 $).
  • Des offres à durée limitée : appliquez des remises promotionnelles à durée limitée ou supprimez les codes de réduction expirés.
  • Des remises basées sur la localisation : appliquez des remises spécifiques à chaque région en fonction de l’adresse de livraison du client.
  • Des offres spécifiques aux clients : créez des montants de remise personnalisés en fonction de certains segments de clientèle ou comportements d’achat passés.

Configurer le SDK
Côté serveur

Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :

Command Line
Ruby
Python
PHP
Node
.NET
Go
Java
No results
gem install stripe -v 15.1.0-beta.2

Mettre à jour le SDK du serveur
Côté serveur

Pour utiliser cette fonctionnalité en version bêta, commencez par mettre à jour votre SDK afin d’utiliser l’en-tête de version bêta checkout_server_update_beta=v1.

Ruby
Python
PHP
Node
.NET
Go
Java
No results
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
Stripe.api_version = '2025-03-31.basil; checkout_server_update_beta=v1;'

Configurer les autorisations de mise à jour de Checkout Session
Côté serveur

Transmettez permissions.update_discounts=server_only lors de la création de la session Checkout pour activer la mise à jour des réductions à partir de votre serveur. La transmission de cette option désactive l’application de la réduction côté client, ce qui permet de garantir que toute la logique de remise passe par votre serveur.

Command Line
cURL
Ruby
Python
PHP
Java
Node
Go
.NET
No results
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-03-31.basil; checkout_server_update_beta=v1;" \ -d ui_mode=custom \ -d "permissions[update_discounts]"=server_only \ -d "line_items[0][price]"=
{{PRICE_ID}}
\ -d "line_items[0][quantity]"=1 \ -d mode=payment \ --data-urlencode return_url="https://example.com/return"

Mettre à jour les réductions de manière dynamique
Côté serveur

Créez un nouvel endpoint sur votre serveur pour appliquer des réductions à la session Checkout. Vous l’appellerez à partir du front-end dans une étape ultérieure.

Conseil en matière de sécurité

Le code côté client s’exécute dans un environnement entièrement contrôlé par l’utilisateur. Un utilisateur malveillant peut contourner votre validation côté client, intercepter et modifier les requêtes, ou même créer des requêtes entièrement nouvelles pour votre serveur.

Pour concevoir l’endpoint, nous recommandons ce qui suit :

  • Concevez des endpoints pour des interactions spécifiques avec le client plutôt que de les formuler de manière trop générique (par exemple, « appliquer une remise de fidélité » plutôt qu’une action générale comme « mettre à jour »). Des endpoints spécifiques permettent de garder l’objectif clair et facilitent l’écriture et le maintien de la logique de validation.
  • Évitez de transmettre les données de session directement depuis le client à votre endpoint. Des clients malveillants peuvent modifier les données de requête, ce qui en fait une source peu fiable pour déterminer l’état de la session Checkout. Transmettez plutôt l’ID de session à votre serveur et utilisez-le pour récupérer en toute sécurité les données de l’API de Stripe.
Ruby
Python
PHP
Node
.NET
Go
Java
No results
require 'sinatra' require 'json' require 'stripe' set :port, 4242 # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
# Return a boolean indicating whether the discounts are valid. def validate_discounts(discounts, session # Basic validation - ensure we only have one discount if any return true if discounts.empty? || discounts == "" # Ensure only one discount is being applied return false if discounts.is_a?(Array) && discounts.length > 1 # Add your own validation logic here # For example, validate promo codes against your internal system true end # Return an array of the updated discounts or the original ones if no update is needed. def recompute_discounts(discounts, session) # If removing discounts, return empty return [] if discounts.empty? || discounts == "" # Example: Access your internal discounts system # This could be based on customer ID, promo codes, cart value, etc. customer_id = session.customer || session.client_reference_id cart_total = session.amount_total # Example internal discount calculation discount_amount = calculate_customer_discount(customer_id, cart_total) if discount_amount > 0 # Create a dynamic discount using coupon_data [{ coupon_data: { name: "Customer Discount", amount_off: discount_amount, currency: session.currency || 'usd' } }] else # No discount applicable [] end end # Example function to integrate with your internal discounts system def calculate_customer_discount(customer_id, cart_total) # Example logic - replace with your actual discount system # This could check: # - Customer loyalty tier # - Active promotions # - Cart value thresholds # - Seasonal discounts # Example: 10% off for carts over 100 USD, max 20 USD discount if cart_total > 10000 # 100 USD in cents discount = [cart_total * 0.1, 2000].min # Max 20 USD discount discount.to_i else 0 end end post '/update-discounts' do content_type :json request.body.rewind request_data = JSON.parse(request.body.read) checkout_session_id = request_data['checkout_session_id'] discounts = request_data['discounts'] # 1. Retrieve the Checkout Session session = Stripe::Checkout::Session.retrieve(checkout_session_id) # 2. Validate the discounts if !validate_discounts(discounts, session) return { type: 'error', message: 'Your discounts are invalid. Please refresh your session.' }.to_json end # 3. Recompute the discounts with your custom logic discounts = recompute_discounts(discounts, session) # 4. Update the Checkout Session with the new discounts if discounts Stripe::Checkout::Session.update(checkout_session_id, { discounts: discounts, }) return { type: 'object', value: { succeeded: true } }.to_json else return { type: 'error', message: "We could not update your discounts. Please try again." }.to_json end end

Mettre à jour le SDK du client
Côté client

Initialisez stripe.js avec l’en-tête bêta % code %}custom_checkout_server_updates_1.

checkout.js
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
, { betas: ['custom_checkout_server_updates_1'], });

Appeler les mises à jour du serveur
Côté client

Déclenchez la mise à jour à partir de votre front-end en envoyant une requête à votre serveur et en l’incluant dans runServerUpdate. Si la requête aboutit, l’objet Session est mis à jour avec la nouvelle réduction.

index.html
<button id="apply-customer-discount"> Apply Customer Discount </button>
checkout.js
document.getElementById('apply-customer-discount') .addEventListener("click", async (event) => { const updateCheckout = () => { return fetch("/apply-customer-discount", { method: "POST", headers: { "Content-type": "application/json", }, body: JSON.stringify({ checkout_session_id: checkout.session().id, }) }); }; const response = await checkout.runServerUpdate(updateCheckout); if (!response.ok) { // Handle error state return; } // Update UI to reflect the applied discount event.target.textContent = "Discount Applied!"; event.target.disabled = true; });

Tester l'intégration

Suivez ces étapes pour tester votre intégration et vous assurer que vos remises dynamiques fonctionnent correctement.

  1. Configurez un environnement de test qui reflète votre configuration en mode production. Utilisez les clés API d’environnement de test Stripe pour cet environnement.

  2. Simulez différents scénarios de remise pour vérifier que votre fonction recomputeDiscounts gère correctement les différents scénarios.

  3. Vérifiez la logique côté serveur en utilisant des outils de journalisation ou de débogage pour vous assurer que votre serveur :

    • Récupère la session Checkout.
    • Valide les demandes de réduction.
    • Recalcule les réductions mises à jour en fonction de votre logique métier.
    • Mets à jour la session Checkout avec les nouvelles réductions lorsque vos conditions personnalisées sont remplies. Assurez-vous que la réponse de mise à jour contient les nouvelles réductions. Par défaut, la réponse ne contient pas le champ discounts, sauf si la requête développe l’objet.
  4. Vérifiez la logique côté client en effectuant plusieurs fois le processus de paiement dans votre navigateur. Observez la façon dont l’interface utilisateur se met à jour après l’application d’une réduction. Assurez-vous que :

    • La fonction runServerUpdate est appelée comme prévu.
    • Les remises s’appliquent correctement en fonction de votre logique métier.
    • Le total du paiement est mis à jour pour refléter la réduction appliquée.
    • Les messages d’erreur s’affichent correctement lorsqu’une application de réduction a échoué.
  5. Testez divers scénarios de réduction, y compris des demandes de remise non valides, ou simulez des erreurs de serveur pour tester la gestion des erreurs, tant du côté serveur que du côté client.

Cette page vous a-t-elle été utile ?
OuiNon
  • Besoin d'aide ? Contactez le service Support.
  • Rejoignez notre programme d'accès anticipé.
  • Consultez notre log des modifications.
  • Des questions ? Contactez l'équipe commerciale.
  • LLM ? Lire llms.txt.
  • Propulsé par Markdoc