# Rabatte hinzufügen Erfahren Sie, wie Sie Rabatte mit Gutscheinen und Promo-Codes in Ihrer benutzerdefinierten Integration anwenden. Sie können Rabatte mit der Checkout Sessions API nutzen, um den Kundinnen und Kunden in Rechnung gestellten Betrag bei Einmalzahlungen zu verringern. Mit Gutscheinen und Promo-Codes können Sie: - Einen Rabatt auf die gesamte Zwischensumme eines Einkaufs anwenden - Einen Rabatt auf bestimmte Produkte anwenden - Den in Rechnung gestellten Gesamtbetrag um einen Prozentsatz oder eine Pauschale verringern - Promo-Codes für Ihre Kund/innen in Kombination mit Gutscheinen erstellen, die Sie direkt an Ihre Kund/innen geben können > #### Payment Intents API > > Wenn Sie die Payment Intents API verwenden, können Sie Rabatte anwenden, indem Sie den ermäßigten Betrag auf Server-Seite berechnen und den PaymentIntent mit dem angepassten Betrag erstellen oder aktualisieren. ## Gutschein erstellen Gutscheine geben einen Rabatt mit einem festen Wert an. Sie können kundenorientierte Promo-Codes erstellen, die einem einzigen zugrundeliegenden Gutschein zugeordnet sind. Dies bedeutet, dass die Codes `FALLPROMO` und `SPRINGPROMO` beide auf einen 25 %-Rabattgutschein verweisen können. Sie können Gutscheine im [Dashboard](https://dashboard.stripe.com/coupons) oder mit der [API](https://docs.stripe.com/api.md#coupons) erstellen: ```curl curl https://api.stripe.com/v1/coupons \ -u "<>:" \ -d percent_off=20 \ -d duration=once ``` ## Einen Gutschein verwenden Um eine Sitzung mit einem angewendeten Rabatt zu erstellen, übergeben Sie die [Gutschein-ID](https://docs.stripe.com/api/coupons/object.md#coupon_object-id) im Parameter `coupon` des [Rabatte](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts)-Arrays. Checkout-Sitzungen unterstützen maximal einen Gutschein oder Aktionscode. ```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" ``` ## Gutschein konfigurieren Für Gutscheine stehen die folgenden Parameter zur Verfügung, die Sie verwenden können: - `currency` - `percent_off` oder `amount_off` - `max_redemptions` - `redeem_by`: das späteste Datum, an dem Kund/innen den Gutschein anwenden können - `applies_to`: begrenzt die Produkte, für die der Gutschein gilt ### Einlösung beschränken Die Werte `max_redemptions` und `redeem_by` gelten anwendungsübergreifend für den Gutschein. Sie können beispielsweise einen Gutschein auf eine maximal 50-fache Einlösung begrenzen oder die Gültigkeit des Gutscheins auf ein bestimmtes Datum setzen. ### Berechtigte Produkte einschränken Sie können die Produkte eingrenzen, für die Rabatte mit Gutschein möglich sind, indem Sie die Produkt-IDs in den `applies_to`-Hash im `Coupon`-Objekt eintragen. Alle Promo-Codes, die diesem Gutschein zugewiesen sind, gelten nur für die Liste der berechtigten Produkte. ### Gutschein löschen Sie können Gutscheine im Dashboard oder über die API löschen. Wenn Sie einen Gutschein löschen, kann er nicht für zukünftige Transaktionen oder Kund/innen genutzt werden. ## Promo-Code erstellen Promo-Codes sind kundenseitige Codes, die zusätzlich zu Gutscheinen erstellt werden. Sie können auch zusätzliche Einschränkungen angeben, die steuern, wann ein Kunde/eine Kundin die Aktion anwenden kann. Sie können diese Codes an Ihre Kundinnen/Kunden weitergeben, die sie während des Bezahlvorgangs eingeben können, um einen Rabatt zu erhalten. Um einen [Promo-Code](https://docs.stripe.com/api/promotion_codes.md) einzurichten, legen Sie einen bestehenden `Gutschein` sowie etwaige Beschränkungen (z. B. Beschränkung auf einen bestimmten [Kunden/Kundin](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer) oder [Kunden/Kundin_](https://docs.stripe.com/api/promotion_codes/object.md#promotion_code_object-customer_account)) fest. Wenn Sie Ihrem Kunden/Ihrer Kundin einen bestimmten Code übermitteln möchten (z. B. `FALL25OFF`), richten Sie dazu den `Code` ein. Wenn Sie das Feld leer lassen, erstellen wir einen zufälligen `Code` für Sie. Bei dem `code` muss die Groß-/Kleinschreibung beachtet werden. Er ist unter allen aktiven Aktionscodes einzigartig. Zum Beispiel: - Sie können mehrere kundenbeschränkte Promo-Codes mit demselben `code` erstellen, aber Sie können diesen `code` nicht für einen von beliebigen Kundinnen/Kunden einlösbaren Promo-Code wiederverwenden. - Wurde bereits ein Promo-Code ohne Kundenbeschränkung erstellt, kann mit demselben `code` also kein weiterer Promo-Code erstellt werden. - Sie können einen Promo-Code mit `code: NEWUSER` erstellen, ihn deaktivieren, indem Sie `active: false` übergeben und dann einen neuen Promo-Code mit `code: NEWUSER` erstellen. Sie können Promo-Codes im [Dashboard](https://dashboard.stripe.com/coupons/create) oder mit der [API](https://docs.stripe.com/api.md#promotion_codes) erstellen: ```curl curl https://api.stripe.com/v1/promotion_codes \ -u "<>:" \ -d coupon={{COUPON_ID}} \ -d code=VIPCODE ``` ## Promo-Code verwenden Aktivieren Sie auf Ihrem Server von Kund/innen einlösbare Promo-Codes mit dem Parameter [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) in einer Checkout-Sitzung. ```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" ``` Verwenden Sie auf Ihrem Client [applyPromotionCode](https://docs.stripe.com/js/custom_checkout/apply_promotion_code), um einen von Ihren Kund/innen eingegebenen Promo-Code anzuwenden. Verwenden Sie [removePromotionCode](https://docs.stripe.com/js/custom_checkout/remove_promotion_code), um alle zuvor angewendeten Promo-Codes zu entfernen. #### 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; ``` ## Promo-Code konfigurieren Sie können für jeden Promo-Code berechtigte Kundinnen/Kunden, Einlösungen und andere Begrenzungen anpassen. ### Begrenzungen je Kund/in Um ein Werbeangebot auf eine bestimmte Kundin/einen bestimmten Kunden zu begrenzen, geben Sie beim Erstellen des Promo-Codes eine/n [Kunden/Kundin](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer) oder ein [customer_account](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-customer_account) an. Wird keine Kundin/kein Kunde definiert, kann der Code von allen Kundinnen und Kunden eingelöst werden. ### Durch erstmalige Bestellung einschränken Sie können den Promo-Code auch auf Erstkundinnen und -kunden beschränken, indem Sie [restrictions.first_time_transaction](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-first_time_transaction) anwenden. Wenn der/die `customer` oder das `customer_account` nicht definiert ist oder ein/e definierte/r `customer` oder `customer_account` keine früheren Zahlungen oder nicht stornierte *Rechnungen* (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) hat, wird dies als erstmalige Transaktion betrachtet. > Sitzungen, bei denen keine Kunden/kein Kunde erstellt wird, erstellen stattdessen eine [Gastkundin/einen Gastkunden](https://docs.stripe.com/payments/checkout/guest-customers.md) im Dashboard. Promo-Codes, die auf Erstkundinnen/Erstkunden beschränkt sind, werden für diese Sitzungen weiterhin akzeptiert. ### Mindestbetrag festlegen Bei Promo-Codes können Sie einen Mindestbetrag der Transaktion für einen berechtigten Rabatt festlegen, indem Sie [minimum_amount](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount) und [minimum_amount_currency](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-restrictions-minimum_amount_currency) konfigurieren. Da die Erfüllung der Code-Bedingungen beim Einlösen überprüft wird, gilt der Mindestbetrag der Transaktion bei Abonnements nur für die erste Zahlung. ### Ablaufdatum Sie können mit [expires_at](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-expires_at) ein Ablaufdatum für den Promo-Code festlegen. Wenn für den zugrunde liegenden Gutschein bereits `redeem_by` festgelegt wurde, kann das Ablaufdatum des Promo-Codes nicht später sein als das Ablaufdatum des Gutscheins. Wenn `promotion_code[expires_at]` nicht angegeben ist, wird `expires_at` automatisch mit dem `redeem_by` des Gutscheins ausgefüllt. Beispiel: Ein Gutschein soll ein Jahr lang angeboten werden, jedoch nur eine Woche ab dem Empfang einlösbar sein. Sie können `coupon[redeem_by]` ein Jahr in die Zukunft verlegen und `promotion_code[expires_at]` auf eine Woche nach seiner Erstellung. ### Einlösungen begrenzen Sie können die Anzahl der möglichen Einlösungen mithilfe von [max_redemptions](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-max_redemptions) begrenzen. Das funktioniert ähnlich wie der coupon-Parameter. Wenn für den zugrunde liegenden Gutschein bereits `max_redemptions` festgelegt wurde, können die `max_redemptions` für den Promo-Code nicht größer sein als die des Gutscheins. Sie möchten beispielsweise, dass ein Saisonangebot-Gutschein von den ersten 50 Kundinnen/Kunden eingelöst werden kann. Für die Winteraktion können aber nur 20 dieser Einlösungen genutzt werden. In diesem Szenario können Sie `coupon[max_redemptions]: 50` und `promotion_code[max_redemptions]: 20` festlegen. ### Inaktive Promotions Mit dem Parameter [active](https://docs.stripe.com/api/promotion_codes/create.md#create_promotion_code-active) können Sie festlegen, ob ein Promo-Code aktuell einlösbar sein soll. Wenn allerdings der zugrunde liegende Gutschein für einen Promo-Code ungültig wird, werden auch alle verknüpften Promo-Codes dauerhaft inaktiv. Ein Promo-Code wird auch dauerhaft inaktiv, wenn er seine `max_redemptions` oder `expires_at` erreicht. Sie können diese Promo-Codes nicht reaktivieren. ### Sonderangebote löschen Sie können Sonderangebote im Dashboard oder in der API löschen. Wenn Sie ein Sonderangebot löschen, kann es nicht für zukünftige Transaktionen oder Kundinnen/Kunden genutzt werden.