# Migrationsleitfaden für die Preise von Checkout Erfahren Sie, wie Sie Ihre Integration aktualisieren, um Preise in Verbindung mit Stripe Checkout zu nutzen. Die [Prices API](https://docs.stripe.com/api/prices.md) enthält eine neue Funktion und erweiterte Flexibilität für die Abbuchungen bei Ihren Kundinnen/Kunden. Die neue Integration bietet: - Einheitlichere Modelle für Checkout-Artikel - statt Plänen, *SKUs* (SKUs (Stock Keeping Units) represent a specific Product variation, taking into account any combination of attributes and cost (for instance, size, color, currency, cost)) und Inline-Line-Artikeln, besteht nun jeder Artikel aus einem *price*. - Außerdem besteht die Möglichkeit, Produktbilder für wiederkehrende Artikel darzustellen. - Erstellung eines wiederverwendbaren Produkt- und Preiskatalogs statt eines einmaligen Line-Artikels. - Erstellen Sie Inline-Preise für *Abonnements* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis). - Wenden Sie dynamische Steuersätze auf [Abonnements](https://docs.stripe.com/billing/taxes/collect-taxes.md?tax-calculation=tax-rates#adding-tax-rates-to-checkout) und [Einmalzahlungen](https://docs.stripe.com/payments/checkout/taxes.md) an. Sie möchten nicht migrieren? Sie können Ihre aktuelle Integration weiterhin nutzen, neue Funktionen werden jedoch nicht unterstützt. Sie können alle neuen Pläne oder wiederkehrenden Preise verwenden, die Sie im Parameter `plan` Ihrer bestehenden API-Aufrufe erstellen. ## Produkt- und Preisübersicht *Preise* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) sind eine neue, grundlegende Größe in Stripe. Sie funktionieren mit Abonnements, *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) und Checkout. Jeder Preis ist mit einem einzelnen *Produkt* (Products represent what your business sells—whether that's a good or a service) verknüpft und jedes Produkt kann mehrere Preise haben. Verschiedene physische Waren oder Servicestufen sollten durch Produkte repräsentiert werden. Die Preisgebung für dieses Produkt sollte dann durch die Preise repräsentiert sein. Diese Preise definieren den Grundpreis, die Währung und—für wiederkehrende Produkte—den Abrechnungszyklus. So können Sie Preise ändern und hinzufügen, ohne immer die Details Ihrer angebotenen Produkte verändern zu müssen. So können Sie also beispielsweise ein einzelnes „Gold“-Produkt zum Preis von 10 US$ pro Monat, 100 US$ im Jahr, 9 EUR pro Monat und 90 EUR pro Jahr anbieten. Oder Sie bieten ein T-Shirt in blau für 20 US$ und 15 EUR an. ## Einmalzahlungen Für Integrationen für Einmalzahlungen gelten folgende Änderungen: - Statt Ad-hoc-Posten (d. h. Einstellung des Namens, Betrags und der Währung), müssen Sie für eine Checkout-Sitzung ein *Produkt* (Products represent what your business sells—whether that's a good or a service) erstellen und in der Regel auch einen *Preis* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions). - [Modus](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) ist jetzt ein Pflichtfeld. Der Code der Client-Seite bleibt derselbe. ### Zuweisungstabelle Statt jedes Feld eines `line_items` zu definieren, nutzt Checkout die zugrunde liegenden Produkt- und Preisobjekte, um Namen, Beschreibung, Betrag, Währung und Bilder zu ermitteln. Sie können [Produkte und Preise](https://docs.stripe.com/payments/accept-a-payment.md) mit der API oder mit dem Dashboard erstellen. | Ohne Preise | Mit Preisen | | ------------------------ | --------------------------------------------------------------------------------------------------------------------- | | `line_items.name` | `product.name` | | `line_items.description` | `product.description` | | `line_items.amount` | - `price.unit_amount` - `price_data.unit_amount` (wenn zum Zeitpunkt der Erstellung der Checkout Session definiert) | | `line_items.currency` | - `price.currency` - `price_data.currency` (wenn zum Zeitpunkt der Erstellung der Checkout Session definiert) | | `line_items.images` | `product.images` (zeigt das erste eingestellte Bild) | ### Serverseitiger Code für Inline-Items Bisher konnten Sie nur einmalige Posten inline erstellen. Mit Preisen können Sie weiterhin Ihre Posten inline konfigurieren, sie können aber darüber hinaus auch mit [price_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data) Ihre Preise dynamisch definieren, wenn Sie die Checkout-Sitzung erstellen. Wenn Sie die Checkout-Sitzung mit `price_data` erstellen, verweisen Sie auf eine bestehende Produkt-ID mit [price_data.product](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product) oder definieren Sie Ihre Produktdaten dynamisch mit [price_data.product_data](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items-price_data-product_data). Das folgende Beispiel zeigt den Workflow für die Erstellung eines einmaligen Postens. #### Curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "line_items[0][quantity]"=1 \-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][product_data][description]"="Comfortable cotton t-shirt" \ -d "line_items[0][price_data][product_data][images][]"="https://example.com/t-shirt.png" \ -d "line_items[0][price_data][currency]"=usd \ -d mode=payment \ -d success_url="https://example.com/success" \ ``` ### Serverseitiger Code für Einmal-Items Mit der neuen Integration können Sie im Vorfeld [einen Produkt- und Preiskatalog anlegen](https://docs.stripe.com/payments/accept-a-payment.md) und müssen nicht stattdessen jedes Mal, wenn Sie eine Checkout-Sitzung erstellen, einen Betrag, eine Währung und einen Namen festlegen. Sie können ein Produkt und einen Preis entweder mit der [Prices API](https://docs.stripe.com/api/prices.md) oder über das [Dashboard](https://dashboard.stripe.com/products) anlegen. Um eine Checkout-Sitzung zu erstellen, benötigen Sie die Preis-ID. Das folgende Beispiel zeigt, wie Sie ein Produkt und einen Preis über die API anlegen: #### Curl ```bash curl https://api.stripe.com/v1/products \ -u<>: \ -d name=T-shirt \ -d description="Comfortable cotton t-shirt" \ -d "images[]"="https://example.com/t-shirt.png" curl https://api.stripe.com/v1/prices \ -u<>: \ -d product="{{PRODUCT_ID}}" \ -d unit_amount=2000 \ -d currency=usd curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "line_items[0][quantity]"=1 \-d "line_items[0][price]"="{{PRICE_ID}}" \ -d mode=payment \ -d success_url="https://example.com/success" \ ``` ## Abonnements Für Integrationen für wiederkehrende Zahlungen gelten folgende Änderungen: - Alle Artikel werden an ein einziges [line_items](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items)-Feld übergeben, statt an `subscription_data.items`. - [mode](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) ist nun ein Pflichtfeld. Setzen Sie `mode=subscription`, wenn die Session nur wiederkehrende Artikel enthält. Der Code der Client-Seite bleibt derselbe. Bestehende Pläne können überall dort verwendet werden, wo Preise akzeptiert werden. ### Serverseitiger Code für Pläne Hier ein „Vorher-Nachher“-Beispiel zur Erstellung einer Checkout Session mit einer Testversion und mit einem bestehenden Plan, für die jeweils alternativ auch einfach ein Preis festgelegt werden kann. Der Plan wird dann an `line_items` übergeben, anstatt an `subscription_data.items`. #### Curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \ -d "line_items[0][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ### Serverseitiger Code für wiederkehrenden Preis mit Einrichtungsgebühr Wenn Sie wiederkehrende Pläne mit einer einmaligen Einrichtungsgebühr haben, erstellen Sie das Produkt und den Preis, der die Einmalgebühr darstellt, bevor Sie die Checkout-Sitzung anlegen. In der [Zuweisungstabelle](https://docs.stripe.com/payments/checkout/migrating-prices.md#mapping-table-server-one-time) finden Sie Informationen darüber, wie die alten `line_items`-Felder in der neuen Integration zugewiesen werden. Sie können Produkt und Preis entweder über die [Prices API](https://docs.stripe.com/api/prices.md) oder das [Stripe-Dashboard](https://dashboard.stripe.com/products) anlegen. Alternativ können Sie auch [einmalige Posten inline erstellen](https://docs.stripe.com/payments/checkout/migrating-prices.md#server-side-code-for-inline-items). Das folgende Beispiel nutzt eine bestehende Preis-ID: #### Curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \-d "line_items[0][price]"="{{PRICE_OR_PLAN_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "line_items[1][price]"="{{ONE_TIME_PRICE_ID}}" \ -d "line_items[1][quantity]"=1 \ -d mode=subscription \ -d success_url="https://example.com/success" \ ``` ## Änderungen am Antwort-Objekt Anstelle der Auflistung von Artikeln über `display_items` verwendet das Checkout-Session-Objekt `line_items`. Das Feld `line_items` wird standardmäßig nicht so angezeigt wie `display_items`, kann jedoch beim Erstellen einer Checkout-Sitzung über [expand](https://docs.stripe.com/api/expanding_objects.md) einbezogen werden: #### Curl ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d "payment_method_types[]"="card" \ -d "mode"="payment" \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d "success_url"="https://example.com/success" \ -d "expand[]"="line_items" ``` ## Webhook-Änderungen Da `line_items` einbindbar ist, listet der *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `checkout.session.completed` die Artikel nicht mehr standardmäßig auf. Das kleinere Antwortobjekt ermöglicht es Ihnen, Ihre Checkout-Webhooks schneller zu empfangen. Mit dem neuen `line_items`-Endpoint können Sie Ihre Artikel abrufen: #### Curl ```bash curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \ -u <>: ``` Weitere Details hierzu finden Sie unter [Bestellungen mit Checkout abwickeln](https://docs.stripe.com/checkout/fulfillment.md).