# Ajouter des réductions Découvrez comment appliquer des réductions avec des bons de réduction et des codes de promotion dans votre intégration personnalisée. Vous pouvez utiliser des réductions avec l’API Checkout Sessions pour réduire le montant débité à un client. Les bons de réduction et les codes de promotion vous permettent de : - Appliquer une réduction à l’ensemble du sous-total d’un achat - Appliquer une réduction à des produits spécifiques - Déduire un pourcentage ou un montant fixe du total facturé - Créer des codes promotionnels destinés aux clients en plus de bons de réduction à partager directement avec les clients > #### API Payment Intents > > En utilisant l’API Payment Intents, vous pouvez appliquer des réductions en calculant le montant réduit côté serveur et en créant ou en réajustant le PaymentIntent avec le montant ajusté. ## Créer un bon de réduction Les bons de réduction offrent une remise d’un montant fixe. Vous pouvez créer pour vos clients des codes promotionnels qui se rapportent à un seul bon de réduction sous-jacent. Ainsi, les codes `FALLPROMO` et `SPRINGPROMO` peuvent tous les deux pointer vers un bon de réduction de 25 %. Vous pouvez créer des bons de réduction dans le [Dashboard](https://dashboard.stripe.com/coupons) ou avec l’[API](https://docs.stripe.com/api.md#coupons) : ```curl curl https://api.stripe.com/v1/coupons \ -u "<>:" \ -d percent_off=20 \ -d duration=once ``` ## Utiliser un bon de réduction Pour créer une session avec une réduction appliquée, passez l’[identifiant du bon de réduction ](https://docs.stripe.com/api/coupons/object.md#coupon_object-id) dans le paramètre `coupon` du tableau [remises](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts). Les sessions Checkout prennent en charge un seul bon de réduction ou code promotionnel. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "discounts[0][coupon]={{COUPON_ID}}" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/checkout/return" ``` ## Configurer un bon de réduction Les bons de réduction disposent des paramètres suivants que vous pouvez utiliser : - `currency` - `percent_off` ou`amount_off` - `max_redemptions` - `redeem_by`: indique la date limite du bon de réduction - `applies_to` : limite les produits auxquels s’applique le bon de réduction ### Limiter le nombre d’utilisations Les valeurs`max_redemptions` et `redeem_by` s’appliquent au bon de réduction, quelle que soit l’application. Par exemple, vous pouvez limiter un bon de réduction aux 50 premières utilisations ou définir une date d’expiration. ### Limiter les produits éligibles Vous pouvez limiter les produits pouvant bénéficier d’une réduction en ajoutant les identifiants de produit dans le hachage `applies_to` de l’objet `Coupon`. Tout code promotionnel associé à ce bon de réduction ne s’appliquera qu’à la liste de produits éligibles. ### Supprimer un bon de réduction Vous pouvez supprimer des bons de réduction depuis le Dashboard ou l’API. La suppression d’un bon de réduction empêche son application future à d’autres transactions ou clients. ## Créer un code promotionnel Les codes promotionnels sont des codes destinés aux clients et qui reposent sur des bons de réduction. Vous pouvez également préciser des restrictions supplémentaires concernant le moment où un client peut appliquer la promotion. Vous pouvez partager ces codes avec les clients, qui peuvent les saisir lors du paiement pour appliquer une réduction. Pour créer un [code promotionnel](https://docs.stripe.com/api/promotion_codes.md), spécifiez un `coupon` existant ainsi que d’éventuelles restrictions (par exemple, une limitation à un objet [customer](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer) ou [customer_account](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer_account)). Si vous souhaitez fournir un code précis à votre client (par exemple, `FALL25OFF`), définissez le champ `code`. Si vous laissez ce champ vide, nous générerons un `code` aléatoire pour vous. Le `code` est insensible à la casse et doit être différent de tous les codes promotionnels actifs, quels que soient les clients concernés. Par exemple : - Vous pouvez créer plusieurs codes promotionnels réservés à certains clients avec un même `code`, mais vous ne pouvez pas réutiliser ce `code` pour créer un code promotionnel destinés à tous les clients. - Si vous créez un code promotionnel que n’importe quel client peut utiliser, vous ne pouvez pas créer un autre code promotionnel actif avec le même `code`. - Vous pouvez créer un code promotionnel avec le paramétrage `code: NEWUSER`, le désactiver en transmettant `active: false`, puis créer un nouveau code promotionnel avec `code: NEWUSER`. Les codes promotionnels peuvent être créés dans la section des bons de réduction du [Dashboard](https://dashboard.stripe.com/coupons/create) ou avec l’[API](https://docs.stripe.com/api.md#promotion_codes) : ```curl curl https://api.stripe.com/v1/promotion_codes \ -u "<>:" \ -d coupon={{COUPON_ID}} \ -d code=VIPCODE ``` ## Utiliser un code promotionnel Sur votre serveur, activez les codes promotionnels remboursables par le client à l’aide du paramètre [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) dans une session Checkout. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=elements \ -d allow_promotion_codes=true \ --data-urlencode "return_url=https://example.com/checkout/return" ``` Côté client, utilisez [ applyPromotionCode ](https://docs.stripe.com/js/custom_checkout/apply_promotion_code) pour appliquer un code promotionnel saisi par votre client. Utilisez [ removePromotionCode ](https://docs.stripe.com/js/custom_checkout/remove_promotion_code) pour supprimer tous les codes promotionnels précédemment appliqués. #### HTML + JS ```html
``` ```js const checkout = stripe.initCheckoutElementsSdk({clientSecret}); const loadActionsResult = await checkout.loadActions(); if (loadActionsResult.type === 'success') { const {actions} = loadActionsResult; const input = document.getElementById('promotion-code'); document.getElementById('apply-promotion-code').addEventListener('click', () => { actions.applyPromotionCode(input.value).then((result) => { if (result.error) { // Display an error message document.getElementById('promotion-code-error').textContent = result.error.message; } else { // Clear the input if the promotion code was successfully applied input.value = ''; } }); }); document.getElementById('remove-promotion-codes').addEventListener('click', () => { actions.removePromotionCode(); }); } ``` #### React ```jsx import React from 'react'; import {useCheckoutElements} from '@stripe/react-stripe-js/checkout'; const PromotionCode = () => {const checkoutState = useCheckoutElements(); const [draft, setDraft] = React.useState(''); const [loading, setLoading] = React.useState(false); if (checkoutState.type === 'loading') { return (
Loading...
); } else if (checkoutState.type === 'error') { return (
Error: {checkoutState.error.message}
); } const {applyPromotionCode, removePromotionCode} = checkoutState.checkout; const handleChange = (e: React.ChangeEvent) => { setDraft(e.target.value); }; const handleSubmit = () => { setLoading(true);applyPromotionCode(draft).finally(() => { setDraft(''); setLoading(false); }); }; const handleRemove = () => { removePromotionCode(); }; return (
); }; export default PromotionCode; ``` ## Configurer un code promotionnel Pour chaque code promotionnel, vous pouvez personnaliser les critères d’admissibilité des clients, le nombre d’utilisations ainsi que d’autres limites. ### Limiter à un client donné Pour limiter une promotion à un client particulier, spécifiez un objet [customer](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer) ou [customer_account](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer_account) lors de la création du code promotionnel. Si aucun client n’est spécifié, n’importe quel client peut utiliser le code. ### Limiter à la première commande Il est aussi possible de limiter le code promotionnel aux nouveaux clients avec [restrictions.first_time_transaction](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-first_time_transaction). Si un objet `customer` ou `customer_account` n’est pas défini, ou si un objet `customer` ou `customer_account` défini n’a aucun paiement précédent ni aucune *facture* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice) non annulée, la transaction est considérée comme une première transaction. > Les sessions qui ne créent pas de client créent à la place un [client invité](https://docs.stripe.com/payments/checkout/guest-customers.md) dans le Dashboard. Les codes promotionnels limités aux nouveaux clients sont toujours acceptés pour ces sessions. ### Définir un montant minimum Avec les codes promotionnels, vous pouvez fixer un montant de transaction minimum pour la remise admissible en configurant les paramètres [minimum_amount](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount) et [minimum_amount_currency](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount_currency). Étant donné que les restrictions applicables aux codes promotionnels sont vérifiées au moment de l’utilisation du bon de réduction, le montant de transaction minimal ne s’applique qu’au paiement initial d’un abonnement. ### Personnaliser les dates d’expiration Vous pouvez définir une date d’expiration pour le code promotionnel à l’aide du paramètre [expires_at](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-expires_at). Si le paramètre `redeem_by` du bon de réduction sous-jacent est déjà défini, alors l’expiration du code promotionnel ne peut pas être fixée à une date ultérieure à celle du bon de réduction. Si aucune date n’est spécifiée dans `promotion_code[expires_at]`, le paramètre `redeem_by` du bon de réduction renseigne automatiquement le paramètre `expires_at`. Imaginons que vous prévoyez de proposer un bon de réduction pendant un an, mais souhaitez qu’il ne puisse être utilisé que dans la semaine suivant sa réception par le client. Vous pouvez définir une date `coupon[redeem_by]` fixée un an après la date du jour, et paramétrer chaque `promotion_code[expires_at]` à une semaine après sa création. ### Limiter le nombre d’utilisations Vous pouvez limiter le nombre d’utilisations d’un bon de réduction à l’aide de l’attribut [max_redemptions](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-max_redemptions), qui fonctionne de la même manière que le paramètre de bon de réduction. Si le paramètre `max_redemptions` est déjà défini pour le bon de réduction sous-jacent, alors la valeur du paramètre `max_redemptions` du code promotionnel ne peut être supérieure à celle du bon de réduction. Par exemple, vous pouvez décider de proposer un bon de réduction utilisable par les 50 premiers clients lors de vos soldes d’hiver, mais ne permettre que 20 utilisations dans le cadre de votre opération promotionnelle d’été. Dans ce scénario, vous pouvez définir le paramétrage `coupon[max_redemptions]: 50` et `promotion_code[max_redemptions]: 20`. ### Promotions inactives Vous pouvez définir si un code promotionnel est utilisable en utilisant le paramètre [active](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-active). Toutefois, si le bon de réduction sous-jacent à un code promotionnel n’est plus valide, tous les codes promotionnels associés seront définitivement désactivés. De même, si un code promotionnel atteint son nombre de `max_redemptions` ou sa date `expires_at`, il devient définitivement inactif. Vous ne pouvez pas réactiver ces codes promotionnels. ### Supprimer des promotions Vous pouvez supprimer des promotions à partir du Dashboard ou de l’API. La suppression d’une promotion empêche son application future à d’autres transactions ou clients.