# Autoriser les modifications de quantité Offrez à vos clients la possibilité d'ajuster la quantité des postes au moment du paiement. # Page hébergée > This is a Page hébergée for when payment-ui is stripe-hosted. View the full page at https://docs.stripe.com/payments/checkout/adjustable-quantity?payment-ui=stripe-hosted. Les postes de chaque [session Checkout](https://docs.stripe.com/api/checkout/sessions.md) permettent de garder une trace des achats de votre client. Vous pouvez configurer la session Checkout de façon à ce que les clients puissent ajuster les quantités d’articles au moment du paiement. ## Créer une session Checkout avec une quantité modifiable Définissez `adjustable_quantity` sur vos `line_items` lors de la création d’une session Checkout pour permettre à vos clients de modifier la quantité d’un poste lors du paiement. Vous pouvez personnaliser les paramètres par défaut pour les quantités minimale et maximale autorisées en définissant `adjustable_quantity.minimum` et `adjustable_quantity.maximum`. Par défaut, la quantité modifiable minimale d’un poste est de `0` et la quantité modifiable maximale est de `99`. Vous pouvez indiquer une valeur allant jusqu’à `999999` pour `adjustable_quantity.maximum`. Lorsque vous utilisez des quantités variables dont la valeur `line_items[].quantity` est supérieure à `99` (la limite variable maximale par défaut), définissez une valeur `adjustable_quantity.maximum` supérieure ou égale à la quantité de ce poste. Si vous utilisez des quantités réajustables, modifiez votre configuration de façon à ce qu’elle utilise `adjustable_quantity.maximum` lors de la création de la session Checkout pour réserver la quantité en stock au lieu de la quantité `line_items`. Checkout empêche le client de retirer un élément s’il s’agit du seul élément restant. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -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][adjustable_quantity][enabled]=true" \ -d "line_items[0][adjustable_quantity][minimum]=1" \ -d "line_items[0][adjustable_quantity][maximum]=10" \ -d "line_items[0][quantity]=1" \ -d "automatic_tax[enabled]=true" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" ``` ## Gérer les transactions réussies Une fois le paiement effectué, vous pouvez lancer une requête sur les [postes](https://docs.stripe.com/api/checkout/sessions/line_items.md) finalisés et leurs quantités. Si votre client supprime un poste, celui-ci est également supprimé de la réponse relative aux postes. Consultez le [guide d’exécution](https://docs.stripe.com/checkout/fulfillment.md) pour apprendre à créer un gestionnaire d’événements pour traiter les sessions Checkout terminées. > Pour tester votre gestionnaire d’événements, [installez la CLI Stripe](https://docs.stripe.com/stripe-cli.md) et utilisez `stripe listen --forward-to localhost:4242/webhook` pour [transmettre des événements à votre serveur local](https://docs.stripe.com/webhooks.md#test-webhook). #### Ruby ```ruby # 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 = "<>" 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'] line_items = Stripe::Checkout::Session.list_line_items(checkout_session['id'], {limit: 100}) # Fulfill the purchase... begin fulfill_order(checkout_session, line_items) rescue NotImplementedError => e return status 400 end end status 200 end def fulfill_order(checkout_session, line_items) # TODO: Remove error and implement... raise NotImplementedError.new(<<~MSG) Given the Checkout Session "#{checkout_session.id}" load your internal order from the database here. Then you can reconcile your order's quantities with the final line item quantity purchased. You can use `checkout_session.metadata` and `price.metadata` to store and later reference your internal order and item ids. MSG end ``` # Page intégrée > This is a Page intégrée for when payment-ui is embedded-form. View the full page at https://docs.stripe.com/payments/checkout/adjustable-quantity?payment-ui=embedded-form. Les postes de chaque [session Checkout](https://docs.stripe.com/api/checkout/sessions.md) permettent de garder une trace des achats de votre client. Vous pouvez configurer la session Checkout de façon à ce que les clients puissent ajuster les quantités d’articles au moment du paiement. ## Créer une session Checkout avec une quantité modifiable Définissez `adjustable_quantity` sur vos `line_items` lors de la création d’une session Checkout pour permettre à vos clients de modifier la quantité d’un poste lors du paiement. Vous pouvez personnaliser les paramètres par défaut pour les quantités minimale et maximale autorisées en définissant `adjustable_quantity.minimum` et `adjustable_quantity.maximum`. Par défaut, la quantité modifiable minimale d’un poste est de `0` et la quantité modifiable maximale est de `99`. Vous pouvez indiquer une valeur allant jusqu’à `999999` pour `adjustable_quantity.maximum`. Lorsque vous utilisez des quantités variables dont la valeur `line_items[].quantity` est supérieure à `99` (la limite variable maximale par défaut), définissez une valeur `adjustable_quantity.maximum` supérieure ou égale à la quantité de ce poste. Si vous utilisez des quantités réajustables, modifiez votre configuration de façon à ce qu’elle utilise `adjustable_quantity.maximum` lors de la création de la session Checkout pour réserver la quantité en stock au lieu de la quantité `line_items`. Checkout empêche le client de retirer un élément s’il s’agit du seul élément restant. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -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][adjustable_quantity][enabled]=true" \ -d "line_items[0][adjustable_quantity][minimum]=1" \ -d "line_items[0][adjustable_quantity][maximum]=10" \ -d "line_items[0][quantity]=1" \ -d "automatic_tax[enabled]=true" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" ``` ## Gérer les transactions réussies Une fois le paiement effectué, vous pouvez lancer une requête sur les [postes](https://docs.stripe.com/api/checkout/sessions/line_items.md) finalisés et leurs quantités. Si votre client supprime un poste, celui-ci est également supprimé de la réponse relative aux postes. Consultez le [guide d’exécution](https://docs.stripe.com/checkout/fulfillment.md) pour apprendre à créer un gestionnaire d’événements pour traiter les sessions Checkout terminées. > Pour tester votre gestionnaire d’événements, [installez la CLI Stripe](https://docs.stripe.com/stripe-cli.md) et utilisez `stripe listen --forward-to localhost:4242/webhook` pour [transmettre des événements à votre serveur local](https://docs.stripe.com/webhooks.md#test-webhook). #### Ruby ```ruby # 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 = "<>" 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'] line_items = Stripe::Checkout::Session.list_line_items(checkout_session['id'], {limit: 100}) # Fulfill the purchase... begin fulfill_order(checkout_session, line_items) rescue NotImplementedError => e return status 400 end end status 200 end def fulfill_order(checkout_session, line_items) # TODO: Remove error and implement... raise NotImplementedError.new(<<~MSG) Given the Checkout Session "#{checkout_session.id}" load your internal order from the database here. Then you can reconcile your order's quantities with the final line item quantity purchased. You can use `checkout_session.metadata` and `price.metadata` to store and later reference your internal order and item ids. MSG end ```