# Versandkosten berechnen Erstellen Sie unterschiedliche Versandraten für Ihre Kundinnen und Kunden. # Checkout Sessions API > This is a Checkout Sessions API for when payment-ui is embedded-components. View the full page at https://docs.stripe.com/payments/advanced/charge-shipping?payment-ui=embedded-components. Mit Versandkosten können Sie verschiedene Versandoptionen wie Standard, Express und Über-Nacht-Versand mit genaueren Schätzungen für die Lieferzeiten anzeigen. Berechnen Sie Ihren Kund/innen die Kosten für den Versand mit verschiedenen Stripe-Produkten. Bevor Sie Versandkosten erstellen, informieren Sie sich darüber, wie Sie [Rechnungs- und Lieferadressen erfassen](https://docs.stripe.com/payments/collect-addresses.md). > Versandkosten unterstützen nur feste Betragswerte für die gesamte Bestellung. Sie können die Versandkosten nicht basierend auf der Anzahl der Posten in der Bestellung anpassen. ## Versandrate erstellen [Serverseitig] Versandkosten unterstützen nur feste Beträge für die gesamte Bestellung. Sie können die Versandkosten nicht basierend auf der Anzahl der Artikel in der Bestellung anpassen. #### Dashboard So fügen Sie eine [Versandrate](https://dashboard.stripe.com/test/shipping-rates) über das Dashboard hinzu: 1. Klicken Sie auf **Versandrate erstellen**. 1. Geben Sie einen Betrag, eine Beschreibung und eine optionale geschätzte Lieferung ein. 1. Klicken Sie auf **Speichern** und kopieren Sie die Versandraten-ID (`shr_123456`). ![](https://b.stripecdn.com/docs-statics-srv/assets/create-shipping-rate-dashboard.ddd79821d5edee523d7da9d22682be59.png) Einzelheiten zu Ihren Versandkosten eingeben ### Versandrate aktualisieren Sie können einen Betrag einer Währungen, der bereits für einen Versandtarif festgelegt wurde, nicht aktualisieren. Nachdem Sie eine Währung und einen Betrag für einen Versandtarif festgelegt haben, kann der Tarif nur zum Hinzufügen neuer Währungen aktualisiert werden. Um einen Versandtarif im Dashboard zu aktualisieren, müssen Sie den Versandtarif archivieren und dann einen neuen erstellen. ### Versandkosten archivieren So archivieren Sie Versandkosten: 1. Wählen Sie auf der Registerkarte [Versandkosten](https://dashboard.stripe.com/test/shipping-rates) die entsprechenden Versandkosten aus. 1. Klicken Sie auf das Überlaufmenü ⋯ und wählen Sie **Archivieren** aus. Um die Archivierung der Versandkosten aufzuheben, klicken Sie auf das Überlaufmenü ⋯ und wählen Sie **Archivierung der Versandrate aufheben** aus. #### API > #### Sie interessieren sich für dynamische Aktualisierungen der Versandraten? > > Mit Checkout können Sie die Versandraten basierend auf der Kundenadresse oder dem Bestellwert dynamisch aktualisieren. Informationen zu dieser Vorschaufunktion finden Sie unter [Versandoptionen dynamisch anpassen](https://docs.stripe.com/payments/checkout/custom-shipping-options.md). [Versandtarif erstellen](https://docs.stripe.com/api/shipping_rates.md): Dafür sind mindestens die Parameter `type` und `display_name` erforderlich. Im folgenden Codebeispiel werden diese beiden Parameter zusammen mit `fixed_amount` und `delivery_estimate` verwendet, um eine Versandrate zu erstellen: ```curl curl https://api.stripe.com/v1/shipping_rates \ -u "<>:" \ -d "display_name=Ground shipping" \ -d type=fixed_amount \ -d "fixed_amount[amount]=500" \ -d "fixed_amount[currency]=usd" \ -d "delivery_estimate[minimum][unit]=business_day" \ -d "delivery_estimate[minimum][value]=5" \ -d "delivery_estimate[maximum][unit]=business_day" \ -d "delivery_estimate[maximum][value]=7" ``` ### Versandrate aktualisieren Um [eine Versandrate zu aktualisieren](https://docs.stripe.com/api/shipping_rates/update.md), rufen Sie `Stripe::ShippingRate.update` auf und aktualisieren Sie die Parameter nach Bedarf. ## Checkout-Sitzung erstellen [Serverseitig] Um eine Checkout-Sitzung zu erstellen, die Ihre Versandkosten einbezieht, übergeben Sie die generierte Versandkosten-ID an den Parameter [shipping_options](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-shipping_options). Wenn Sie die Versandkosten gleichzeitig mit einer Checkout-Sitzung erstellen möchten, verwenden Sie den Parameter `shipping_rate_data` mit `shipping_options`. Nur Checkout-Sitzungen im [Zahlungsmodus](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) unterstützen Versandoptionen. Im folgenden Codebeispiel werden der Checkout-Sitzung zwei Versandoptionen hinzugefügt: - Kostenloser Versand mit einer geschätzten Lieferzeit von 5–7 Werktagen. - Luftfracht über Nacht, Kosten von 15,00 USD mit geschätzter Lieferzeit von genau 1 Werktag. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d billing_address_collection=required \ -d "shipping_address_collection[allowed_countries][0]=US" \ -d "shipping_address_collection[allowed_countries][1]=CA" \ -d "shipping_options[0][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][amount]=0" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[0][shipping_rate_data][display_name]=Free shipping" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][value]=5" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][value]=7" \ -d "shipping_options[1][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[1][shipping_rate_data][fixed_amount][amount]=1500" \ -d "shipping_options[1][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[1][shipping_rate_data][display_name]=Next day air" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][minimum][value]=1" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[1][shipping_rate_data][delivery_estimate][maximum][value]=1" \ -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][quantity]=1" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/return" ``` ## Gewählte Versandoption des/der Kund/in erfassen [Clientseitig] #### HTML + JS Verwenden Sie auf dem Client das [shippingOptions](https://docs.stripe.com/js/custom_checkout/session_object#custom_checkout_session_object-shippingOptions)-Objekt, um die verfügbaren Versandoptionen zu rendern, etwa in einer Optionsfeldliste. Wenn Ihr/e Kund/in eine Versandoption auswählt, rufen Sie [updateShippingOption](https://docs.stripe.com/js/custom_checkout/update_shipping_option) mit der ID der Versandoption auf. ```html
``` ```javascript actions.getSession().shippingOptions.forEach((option) => { const form = document.createElement('form'); shippingOptions.forEach(option => { const label = document.createElement('label'); const radio = document.createElement('input'); radio.type = 'radio'; radio.id = option.id; radio.name = 'shippingOption'; radio.value = option.id; radio.addEventListener('click', () => {actions.updateShippingOption(option.id) }) const labelText = document.createTextNode(option.displayName); label.appendChild(radio); label.appendChild(labelText); form.appendChild(label); }); document.getElementById('shipping-options').appendChild(form); }); const shippingAddressElement = checkout.createShippingAddressElement(); shippingAddressElement.mount('#shipping-address'); ``` #### React Verwenden Sie auf dem Client das [shippingOptions](https://docs.stripe.com/js/custom_checkout/session_object#custom_checkout_session_object-shippingOptions)-Objekt, um die verfügbaren Versandoptionen zu rendern, etwa in einer Optionsfeldliste. Wenn Ihr/e Kund/in eine Versandoption auswählt, rufen Sie [updateShippingOption](https://docs.stripe.com/js/custom_checkout/update_shipping_option) mit der ID der Versandoption auf. ```jsx import React from 'react'; import {useCheckoutElements} from '@stripe/react-stripe-js/checkout' const ShippingOptions = () => { const checkoutState = useCheckoutElements(); if (checkoutState.type === 'loading') { return (
Loading...
); } else if (checkoutState.type === 'error') { return (
Error: {checkoutState.error.message}
); } const {shipping, shippingOptions, updateShippingOption} = checkoutState.checkout; const handleChange = (shippingOptionId) => () => { updateShippingOption(shippingOptionId); }; return (
{shippingOptions.map((option) => { return ( ); })}
) }; ``` ## Optional: Abgeschlossene Transaktionen verarbeiten Nach erfolgreicher Zahlung können Sie den Versandbetrag im Attribut [amount_total](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-amount_total) der [shipping_cost](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-shipping_cost) abrufen. Sie können die ausgewählte Versandrate auch mithilfe des Attributs `shipping_rate` attribute in `shipping_cost` abrufen. Um auf die Eigenschaft `shipping_cost` zuzugreifen, müssen Sie einen [Ereignis-Handler erstellen](https://docs.stripe.com/checkout/fulfillment.md#create-payment-event-handler), um abgeschlossene Checkout-Sitzungen zu verarbeiten. Sie können einen Handler testen, indem Sie die [Stripe CLI installieren](https://docs.stripe.com/stripe-cli.md) und `stripe listen --forward-to localhost:4242/webhook` verwenden, um [Ereignisse an Ihren lokalen Server weiterzuleiten](https://docs.stripe.com/webhooks.md#test-webhook). Im folgenden Codebeispiel ermöglicht der Handler den Nutzerinnen und Nutzern den Zugriff auf die `shipping_property`: #### Ruby ```ruby # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. client = Stripe::StripeClient.new("<>") 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'] fulfill_order(checkout_session) end status 200 end def fulfill_order(checkout_session)selected_shipping_rate = client.v1.shipping_rates.retrieve(checkout_session.shipping_cost.shipping_rate) shipping_total = checkout_session.shipping_cost.amount_total # TODO: Remove error and implement... raise NotImplementedError.new(<<~MSG) Given the Checkout Session "#{checkout_session.id}" load your internal order from the database then implement your own fulfillment logic. MSG end ``` ## Optional: Geschätzte Lieferzeit festlegen Sie können Versandkosten mit einer Reihe von Kombinationen für geschätzte Lieferzeiten einrichten. Die folgende Tabelle enthält einige Beispiele für Lieferzeitenschätzungen in einfachem Englisch sowie die entsprechenden Werte für `delivery_estimate.minimum` und `delivery_estimate.maximum`: | Geschätzte Lieferzeit | Minimum | Maximum | | ---------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | 1 Tag | ```es6 { unit: 'day', value: 1, } ``` | ```es6 { unit: 'day', value: 1, } ``` | | 1 Werktag | ```es6 { unit: 'business_day', value: 1, } ``` | ```es6 { unit: 'business_day', value: 1, } ``` | | Mindestens 2 Werktage | ```es6 { unit: 'business_day', value: 2, } ``` | ```es6 null ``` | | 3 bis 7 Tage | ```es6 { unit: 'day', value: 3, } ``` | ```es6 { unit: 'day', value: 7, } ``` | | 4 bis 8 Stunden | ```es6 { unit: 'hour', value: 4, } ``` | ```es6 { unit: 'hour', value: 8, } ``` | | 4 Stunden bis 2 Werktage | ```es6 { unit: 'hour', value: 4, } ``` | ```es6 { unit: 'business_day', value: 2, } ``` | ## Optional: Versandsteuern einziehen Mit [Stripe Tax](https://docs.stripe.com/tax/checkout.md) können Sie automatisch den Steuersatz für Versandgebühren berechnen, indem Sie für Ihre Versandgebühr einen `tax_code` und ein `tax_behavior` festlegen. Stripe Tax ermittelt automatisch, ob der Versand zu versteuern ist ([die Steuerpflicht variiert zwischen Land und Bundesstaaten](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md#shipping-tax-code)) und berechnet ggf. den korrekten Steuersatz. Wenn Sie mit `shipping_rate_data` oder über [Eine Versandgebühr erstellen](https://docs.stripe.com/api/shipping_rates/create.md) eine Versandgebühr festlegen, können Sie die Parameter `tax_behavior` und `tax_code` dieser Gebühr hinzufügen. Wir empfehlen, den `tax_code` auf `Shipping` (`txcd_92010001`) zu setzen, um sicherzustellen, dass immer der korrekte Steuersatz berechnet wird. Sie können den `tax_code` der Versandgebühr auch auf `Nontaxable` (`txcd_00000000`) setzen, wenn Sie keine Steuer berechnen wollen. In diesem Beispiel legen wir das `tax_behavior` auf `exclusive` fest, was in den USA üblich ist. Erfahren Sie mehr über das [Steuerverhalten](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md#tax-behavior). ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d billing_address_collection=required \ -d "shipping_address_collection[allowed_countries][0]=US" \ -d "shipping_address_collection[allowed_countries][1]=CA" \ -d "shipping_options[0][shipping_rate_data][type]=fixed_amount" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][amount]=0" \ -d "shipping_options[0][shipping_rate_data][fixed_amount][currency]=usd" \ -d "shipping_options[0][shipping_rate_data][display_name]=Free shipping" \ -d "shipping_options[0][shipping_rate_data][tax_behavior]=exclusive" \ -d "shipping_options[0][shipping_rate_data][tax_code]=txcd_92010001" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][minimum][value]=5" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][unit]=business_day" \ -d "shipping_options[0][shipping_rate_data][delivery_estimate][maximum][value]=7" \ -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][quantity]=1" \ -d "automatic_tax[enabled]=true" \ -d mode=payment \ -d ui_mode=elements \ --data-urlencode "return_url=https://example.com/return" ``` # Payment Intents API > This is a Payment Intents API for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/advanced/charge-shipping?payment-ui=elements. Mit Versandraten können Sie verschiedene Versandoptionen wie Standard, Express und Über Nacht mit genaueren Schätzungen für die Lieferung anzeigen. Berechnen Sie Ihren Kundinnen und Kunden die Kosten für den Versand mit verschiedenen Stripe-Produkten, wobei für einige davon Code erforderlich ist. Bevor Sie eine Versandrate erstellen, informieren Sie sich darüber, wie Sie [Rechnungs- und Lieferadressen erfassen](https://docs.stripe.com/payments/advanced/collect-addresses.md). > #### Drittanbieter-Plugins > > Wenn Sie eine Drittanbieteranwendung mit Stripe verwenden (zum Beispiel [Thrivecart](https://support.thrivecart.com/help/setting-your-physical-fulfilment-shipping-options/) oder [Shopify](https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping/setting-up-shipping-rates)) und die Versandrate anpassen möchten, lesen Sie die Dokumentation zu dieser Dienstleistung. Die Payment Intents API unterstützt standardmäßig keine Berechnung oder Definition von Versandkosten. Wenn Sie diese Funktionalität benötigen, empfiehlt Stripe, sie selbst zu erstellen oder [Checkout](https://docs.stripe.com/payments/checkout.md) zu verwenden. Wenn Sie diese Funktionalität selbst erstellen möchten, können Sie die Versandkosten als Teil des Produktpreises oder des Gesamtbetrags einbeziehen. Dies bedeutet, dass die Versandkosten bei der Berechnung des Gesamtpreises der Artikel im Warenkorb oder in der Bestellung berücksichtigt werden. Auf diese Weise zahlt der Kunde/die Kundin einen einzigen Betrag, der sowohl den Produktpreis als auch die Versandkosten beinhaltet. Im Folgenden finden Sie einen Überblick über die einzelnen Schritte: 1. **Ihre Versandkosten bestimmen**: Legen Sie die Versandkosten fest. Berücksichtigen Sie das Ziel, das Gewicht, die Entfernung und andere für Ihr Unternehmen relevante Kriterien. 1. **Gesamtbetrag berechnen**: Addieren Sie die Versandkosten zum Produktpreis, um den Gesamtbetrag zu berechnen. 1. **Stripe Elements integrieren**: Verwenden Sie Stripe Elements, um ein Bezahlformular zu erstellen, in dem Sie die Angaben der Kundinnen und Kunden zur Zahlung erfassen. 1. **Gesamtbetrag anzeigen**: Zeigen Sie dem Kunden/der Kundin den Gesamtbetrag, der den Produktpreis und die Versandkosten enthält, auf der Checkout-Seite an. 1. **Zahlung verarbeiten**: Wenn der Kunde/die Kundin die Angaben zur Zahlung übermittelt, wickeln Sie die Zahlungsverarbeitung in Ihrem serverseitigen Code ab.