# Eine Zahlung mehrmals erfassen Erfassen Sie einen PaymentIntent mehrmals bis zum autorisierten Betrag. # Von Stripe gehostete Seite > This is a Von Stripe gehostete Seite for when platform is web and ui is stripe-hosted. View the full page at https://docs.stripe.com/payments/multicapture?platform=web&ui=stripe-hosted. Mit Multicapture können Sie eine [PaymentIntent](https://docs.stripe.com/api/payment_intents/capture.md), die während des Bestätigungsschritts einer [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) erstellt wurde, mehrmals für eine einzelne Transaktion erfassen, bis zum vollständigen [Betrag des PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount). Sie können ihn verwenden, wenn Sie Bestellungen mit mehreren Lieferungen haben und Gelder erfassen möchten, während Sie Teile der Bestellung abwickeln. > #### IC+-Funktion > > Multicapture ist Teil der Funktionalität, von dem unsere Nutzer/innen beim Preismodell *IC+* profitieren. Wenn Sie einen gemischten Stripe-Preis anbieten und auf diese Funktion zugreifen möchten, kontaktieren Sie unseren [Stripe-Support](https://support.stripe.com). ## Verfügbarkeit Beachten Sie bei der Verwendung von Multicapture folgende Einschränkungen: - Es werden nur Online-Kartenzahlungen unterstützt - Verfügbar mit Amex, Visa, Discover, Mastercard, Cartes Bancaires, Diners Club, China UnionPay (CUP) und Japan Credit Bureau (JCB). - Geldbewegungen für [separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md), die [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction) verwenden, werden nicht unterstützt - Mit Stripe können Sie bis zu 50 Erfassungen für einen einzelnen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) durchführen - [Modus](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) ist auf `payment` und [capture_method](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-capture_method) in der [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/.md) ist auf `manual` gesetzt. > #### CUP- und JCB-Unterstützung > > CUP-Mehrfacherfassung ist nur in den USA verfügbar. JCB-Mehrfacherfassung ist nur in den USA, in Kanada, Australien und Neuseeland verfügbar. ## Best Practices Wenn Sie getrennte Sendungen für eine Bestellung versenden, benachrichtigen Sie Ihre Endkundinnen und -kunden proaktiv über die Details jeder Lieferung. Auf diese Weise werden Anfragen und Rückbuchungen von Kundinnen/Kunden vermieden, da sie verwirrt sind, weil sie mehrere Transaktionen auf ihren Kontoauszügen sehen. Verwenden Sie die folgenden Best Practices bei der Benachrichtigung von Kundinnen und Kunden: - Informieren Sie sie zum Zeitpunkt des Bezahlvorgangs vor dem Kauf über das geschätzte Lieferdatum und den Transaktionsbetrag für jede Lieferung. - Benachrichtigen Sie sie bei jeder Lieferung, zusammen mit dem Transaktionsbetrag. - Geben Sie Ihre vollständigen Rückerstattungs- und Stornorichtlinien an. Sie können das Feld [custom_text](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-custom_text) verwenden, wenn Sie eine neue [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) erstellen, um zusätzlichen Text auf der Bezahlseite anzuzeigen, um die Compliance-Anforderungen zu erfüllen. > #### Compliance > > Sie sind bei Verwendung von Mehrfacherfassung für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich. Informieren Sie sich über die Regeln der Kartennetze, mit denen Sie diese Funktion nutzen möchten, um sicherzustellen, dass Ihre Verkäufe allen geltenden Regeln entsprechen, die je nach Netzwerk unterschiedlich sind. Beispielsweise beschränken die meisten Kartennetzwerke die Nutzung von Mehrfacherfassung auf Transaktionen ohne Karte für den Verkauf von Waren, die separat versendet werden. Bestimmte Kartennetzwerke erlauben die Mehrfacherfassung für Unternehmen, basierend auf ihrer Branche (zum Beispiel Reisen), während andere die Mehrfacherfassung nicht für Ratenzahlungs- oder Einzahlungs-Workflows zulassen. > > Die auf dieser Seite bereitgestellten Informationen im Zusammenhang mit der Einhaltung dieser Anforderungen dienen Ihrer allgemeinen Orientierung und stellen keine rechtliche, steuerliche, buchhalterische oder sonstige fachliche Beratung dar. Wenden Sie sich an eine Fachperson, wenn Sie sich bezüglich Ihrer Verpflichtungen unsicher sind. ## Checkout-Sitzung erstellen Fügen Sie Ihrer Website eine Schaltfläche zum Bezahlen hinzu, über die ein serverseitiger Endpoint aufgerufen wird, um eine [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions/create.md) zu erstellen. ```html Buy cool new product
r ``` Eine Checkout-Sitzung ist eine programmgesteuerte Darstellung dessen, was Ihren Kundinnen und Kunden bei der Weiterleitung zum Zahlungsformular angezeigt wird. Sie können es mit Optionen wie den folgenden konfigurieren: - [Posten](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items) für die Zahlungsabwicklung - Zu verwendende Währungen Sie müssen `success_url` mit dem URL-Wert einer Seite auf Ihrer Website ausfüllen, zu der Checkout Ihre Kundinnen und Kunden nach Abschluss der Zahlung zurückleitet. > Checkout-Sitzungen laufen standardmäßig 24 Stunden nach Erstellung ab. Leiten Sie Ihre Kundinnen und Kunden nach dem Erstellen einer Checkout-Sitzung zu der in der Antwort zurückgegebenen [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) weiter. Legen Sie abschließend [request_multicapture](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_multicapture) als `if_available` fest, um die Funktion zur Mehrfacherfassung zu aktivieren. #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. require 'json' require 'sinatra' require 'stripe' # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt' }, unit_amount: 2000 }, quantity: 1 }],payment_intent_data: { capture_method: 'manual' }, payment_method_options: { card: { request_multicapture: 'if_available' } }, mode: 'payment', # These placeholder URLs will be replaced in a following step. success_url: 'https://example.com/success' }) redirect session.url, 303 end ``` ### Zahlungsmethoden Standardmäßig aktiviert Stripe Karten und andere gängige Zahlungsmethoden. Sie können einzelne Zahlungsmethoden im [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods) aktivieren oder deaktivieren. In Checkout wertet Stripe die Währung und etwaige Einschränkungen aus und zeigt den Kundinnen/Kunden dann dynamisch die unterstützten Zahlungsmethoden an. Um zu sehen, wie Ihre Zahlungsmethoden Kundinnen und Kunden angezeigt werden, geben Sie eine Transaktions-ID ein oder legen Sie einen Bestellbetrag und eine Währung im Dashboard fest. Sie können Apple Pay und Google Pay in Ihren [Einstellungen für Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) aktivieren. Standardmäßig ist Apple Pay aktiviert und Google Pay deaktiviert. In einigen Fällen filtert Stripe die Optionen jedoch heraus, auch wenn sie aktiviert sind. Wir filtern Google Pay, wenn Sie [automatische Steuern aktivieren](https://docs.stripe.com/tax/checkout.md), ohne eine Versandadresse zu erfassen. Die von Stripe gehosteten Checkout-Seiten benötigen keine Integrationsänderungen, um Apple Pay oder Google Pay zu aktivieren. Stripe verarbeitet diese Zahlungen genauso wie andere Kartenzahlungen. ## PaymentIntent erfassen Bei einem PaymentIntent im Status [requires_capture](https://docs.stripe.com/payments/paymentintents/lifecycle.md), in dem die Mehrfacherfassung `available` ist, wird Stripe durch Angabe des optionalen Parameters `final_capture` auf `false` angewiesen, die verbleibenden, nicht erfassten Gelder freizugeben, wenn die Erfassungs-API aufgerufen wird. Wenn Sie beispielsweise einen Payment Intent in Höhe von 10 USD bestätigen, bleiben bei der Erfassung von 7 USD mit `final_capture=false` die verbleibenden 3 USD autorisiert. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=700 \ -d final_capture=false \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 300, // 1000 - 700 = 300 "amount_received": 700, // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 700, "amount_refunded": 0, ... } ... } ``` ## Endgültige Erfassung Der PaymentIntent verbleibt im Status `requires_capture`, bis Sie eine der folgenden Maßnahmen ergreifen: - Setzen Sie `final_capture` auf `true` - Erfassung ohne den Parameter `final_capture` (da `final_capture` standardmäßig auf `true` eingestellt ist) - Das Autorisierungsfenster läuft ab. An dieser Stelle gibt Stripe alle verbleibenden Gelder frei, und der PaymentIntent wechselt in den Status `succeeded`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=200 \ -d final_capture=true \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 0, // not 100 due to final_capture=true "amount_received": 900, // 700 + 200 = 900 // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 900, "amount_refunded": 0, ... } ... } ``` Nicht erfasste PaymentIntents gehen in den Status `canceled` über, während teilweise erfasste PaymentIntents in den Status `succeeded` wechseln. ## Optional: Nicht erfasste Gelder freigeben Wenn Sie nicht erfasste Gelder für eine teilweise erfasste Zahlung freigeben möchten, setzen Sie den Betrag auf 0 und `final_capture` auf `true`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=0 \ -d final_capture=true ``` Dadurch wird der PaymentIntent in den Status `succeeded` versetzt, und alle nicht erfassten Gelder werden an den/die Karteninhaber/in zurückgegeben. ## Ihre Integration testen Verwenden Sie eine Stripe-Testkarte mit einer beliebigen CVC/Prüfzimmer und Postleitzahl und einem beliebigen zukünftigen Ablaufdatum, um Multicapture-Zahlungen zu testen. | Die Nummer | Zahlungsmethode | Beschreibung | | ---------------- | ---------------------------------------------- | ----------------------------------------------------------------------------- | | 4242424242424242 | `pm_card_visa` | Visa-Testkarte, die Mehrfacherfassung unterstützt. | | 4000002500001001 | `pm_card_visa_cartesBancaires` | Cartes Bancaires- oder Visa-Testkarte, die die Mehrfacherfassung unterstützt. | | 4000008400000076 | `pm_card_credit_disableEnterpriseCardFeatures` | Visa-Testkarte ohne Unterstützung der Mehrfacherfassung. | ## Rückerstattungen Bei einem PaymentIntent mit dem Status `requires_capture` können Sie beliebig oft [Rückerstattungen](https://docs.stripe.com/api/refunds.md) bis zum gesamten erfassten Betrag abzüglich des gesamten rückerstatteten Betrags durchfühen. Dies ist der [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) – [amount_refunded](https://docs.stripe.com/api/charges/object.md#charge_object-amount_refunded). Das Feld [charge.refunded](https://docs.stripe.com/api/charges/object.md#charge_object-refunded) wechselt erst auf `true`, wenn die endgültige Erfassung durchgeführt wurde und die gesamte [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) rückerstattet wird. Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) mit [refund_application_fee=true](https://docs.stripe.com/api/refunds/create.md#create_refund-refund_application_fee) oder [reverse_transfer=true](https://docs.stripe.com/api/refunds/create.md#create_refund-reverse_transfer). Stattdessen können Sie Teilgebührenrückerstattungen durchführen, indem Sie manuell Teilgebührenerstattungen und Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. Nach Verwendung der Endpoints für die Rückerstattung der Plattformgebühr oder das Übertragungsstorno unterstützt Stripe keine weiteren Rückerstattungen mit `refund_application_fee=true` or `reverse_transfer=true`. ## Connect Multicapture unterstützt alle Use cases von Connect mit Ausnahme von [Separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md) mit dem Parameter [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction). Die Parameter [application_fee_amount](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-application_fee_amount) und [transfer_data[amount]](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-transfer_data-amount) haben einige zusätzliche Validierungen. Beachten Sie die folgenden Validierungen bei der Implementierung von Multicapture mit Connect: - Die Festlegung von `application_fee_amount` oder `transfer_data[amount]` bei der ersten Erfassung macht sie für alle nachfolgenden Erfassungen erforderlich. Jede Übergabe von `application_fee_amount` und `transfer_data[amount]` zum Zeitpunkt der Erfassung setzt die bei der Erstellung, Bestätigung und Aktualisierungen des PaymentIntent übergebenen Werte außer Kraft. - Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) für Multicapture-Zahlungen mit refund_application_fee=true oder reverse_transfer=true. Sie können Teilgebührenrückerstattungen oder Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. ## Webhooks ### Aktualisierte Webhooks belasten Wir senden jedes Mal, wenn Sie eine Zahlung erfassen, einen [charge.updated](https://docs.stripe.com/api/events/types.md#event_types-charge.updated)-Webhook. Beispiel: Bei der ersten Erfassung einer Multicapture-Zahlung vom Typ Destination Charge mit einem `application_fee_amount` aktualisieren wir diese Felder von leeren auf nicht leere Werte. ```json // charge.updated { "data": { "id": "ch_xxx", "object": "charge", "amount": 1000,"balance_transaction": "txn_xxx", // applicable to all charges "transfer": "tr_xxx", // applicable to destination charges only "application_fee": "fee_xxx", // applicable to Connect only ... }, "previous_attributes": {"balance_transaction": null, // applicable to all charges "transfer": null, // applicable to destination charges only "application_fee": null, // applicable to Connect only } } ``` ### payment_intent.amount_capturable_updated Wir übermitteln [payment_intent.amount_capturable_updated](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.amount_capturable_updated) bei jeder Erfassung, unabhängig von den Werten `amount_to_capture` und `final_capture`. Wenn wir beispielsweise 1 USD von einem PaymentIntent mit einem Betrag von 10 USD erfassen, wird das Feld amount_capturable des PaymentIntent auf 9 USD aktualisiert. ```json // payment_intent.amount_capturable_updated { "data": { "id": "pi_xxx", "object": "payment_intent", "amount": 1000,"amount_capturable": 900 // 1000 - 100 = 900 ... }, "previous_attributes": {"amount_capturable": 1000 } } ``` ### Zahlungserfassungsereignisse Wir senden ein [charge.captured](https://docs.stripe.com/api/events/types.md#event_types-charge.captured)-Ereignis für die endgültige Erfassung oder am Ende des Autorisierungsfensters, um die Autorisierung des nicht erfassten Betrags rückgängig zu machen. Das Feld [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) für eine Zahlung wird erst nach einer endgültigen Erfassung oder einem Autorisierungsstorno `true`. Wenn wir beispielsweise eine Erfassung mit `amount=0` und `final_capture=true` durchführen, ändert sich das Attribut [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) der Zahlung von false in true. ```json // charge.captured { "data": { "id": "ch_xxx", "object": "charge","captured": true ... }, "previous_attributes": {"captured": false } } ``` ### Rückerstattungs-Webhooks Multicapture-Webhooks für die Rückerstattung unterscheiden sich nicht von Webhooks ohne Multicapture. Bei jeder Teilrückerstattung senden wir ein [refund.created](https://docs.stripe.com/api/events/types.md#event_types-refund.created)-Ereignis. Bei verbundenen Konten senden wir auch [application_fee.refunded](https://docs.stripe.com/api/events/types.md#event_types-application_fee.refunded)-Ereignisse, wenn wir Plattformgebühren erstatten, und [transfer.reversed](https://docs.stripe.com/api/events/types.md#event_types-transfer.reversed)-Ereignisse, wenn wir Transfers zurückbuchen. # Eingebettetes Formular > This is a Eingebettetes Formular for when platform is web and ui is embedded-form. View the full page at https://docs.stripe.com/payments/multicapture?platform=web&ui=embedded-form. Mit Multicapture können Sie eine [PaymentIntent](https://docs.stripe.com/api/payment_intents/capture.md), die während des Bestätigungsschritts einer [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) erstellt wurde, mehrmals für eine einzelne Transaktion erfassen, bis zum vollständigen [Betrag des PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount). Sie können ihn verwenden, wenn Sie Bestellungen mit mehreren Lieferungen haben und Gelder erfassen möchten, während Sie Teile der Bestellung abwickeln. > #### IC+-Funktion > > Multicapture ist Teil der Funktionalität, von dem unsere Nutzer/innen beim Preismodell *IC+* profitieren. Wenn Sie einen gemischten Stripe-Preis anbieten und auf diese Funktion zugreifen möchten, kontaktieren Sie unseren [Stripe-Support](https://support.stripe.com). ## Verfügbarkeit Beachten Sie bei der Verwendung von Multicapture folgende Einschränkungen: - Es werden nur Online-Kartenzahlungen unterstützt - Verfügbar mit Amex, Visa, Discover, Mastercard, Cartes Bancaires, Diners Club, China UnionPay (CUP) und Japan Credit Bureau (JCB). - Geldbewegungen für [separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md), die [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction) verwenden, werden nicht unterstützt - Mit Stripe können Sie bis zu 50 Erfassungen für einen einzelnen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) durchführen - [Modus](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-mode) ist auf `payment` und [capture_method](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-capture_method) in der [CheckoutSession](https://docs.stripe.com/api/checkout/sessions/.md) ist auf `manual` gesetzt. > #### CUP- und JCB-Unterstützung > > CUP-Mehrfacherfassung ist nur in den USA verfügbar. JCB-Mehrfacherfassung ist nur in den USA, in Kanada, Australien und Neuseeland verfügbar. ## Best Practices Wenn Sie getrennte Sendungen für eine Bestellung versenden, benachrichtigen Sie Ihre Endkundinnen und -kunden proaktiv über die Details jeder Lieferung. Auf diese Weise werden Anfragen und Rückbuchungen von Kundinnen/Kunden vermieden, da sie verwirrt sind, weil sie mehrere Transaktionen auf ihren Kontoauszügen sehen. Verwenden Sie die folgenden Best Practices bei der Benachrichtigung von Kundinnen und Kunden: - Informieren Sie sie zum Zeitpunkt des Bezahlvorgangs vor dem Kauf über das geschätzte Lieferdatum und den Transaktionsbetrag für jede Lieferung. - Benachrichtigen Sie sie bei jeder Lieferung, zusammen mit dem Transaktionsbetrag. - Geben Sie Ihre vollständigen Rückerstattungs- und Stornorichtlinien an. Sie können das Feld [custom_text](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-custom_text) verwenden, wenn Sie eine neue [CheckoutSession](https://docs.stripe.com/api/checkout_sessions.md) erstellen, um zusätzlichen Text auf der Bezahlseite anzuzeigen, um die Compliance-Anforderungen zu erfüllen. > #### Compliance > > Sie sind bei Verwendung von Mehrfacherfassung für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich. Informieren Sie sich über die Regeln der Kartennetze, mit denen Sie diese Funktion nutzen möchten, um sicherzustellen, dass Ihre Verkäufe allen geltenden Regeln entsprechen, die je nach Netzwerk unterschiedlich sind. Beispielsweise beschränken die meisten Kartennetzwerke die Nutzung von Mehrfacherfassung auf Transaktionen ohne Karte für den Verkauf von Waren, die separat versendet werden. Bestimmte Kartennetzwerke erlauben die Mehrfacherfassung für Unternehmen, basierend auf ihrer Branche (zum Beispiel Reisen), während andere die Mehrfacherfassung nicht für Ratenzahlungs- oder Einzahlungs-Workflows zulassen. > > Die auf dieser Seite bereitgestellten Informationen im Zusammenhang mit der Einhaltung dieser Anforderungen dienen Ihrer allgemeinen Orientierung und stellen keine rechtliche, steuerliche, buchhalterische oder sonstige fachliche Beratung dar. Wenden Sie sich an eine Fachperson, wenn Sie sich bezüglich Ihrer Verpflichtungen unsicher sind. ## Checkout-Sitzung erstellen Erstellen Sie auf Ihrem Server eine *Checkout-Session* (A Checkout Session represents your customer's session as they pay for one-time purchases or subscriptions through Checkout. After a successful payment, the Checkout Session contains a reference to the Customer, and either the successful PaymentIntent or an active Subscription) und legen Sie den [Nutzeroberflächen_Modus](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-ui_mode) auf `embedded_page` fest. Sie können die [Checkout-Session](https://docs.stripe.com/api/checkout/sessions/create.md) so konfigurieren, dass [Posten](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-line_items) und Optionen wie die [Währung](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-currency) enthalten sind. Um Kundinnen/Kunden zu einer nutzerdefinierten Seite zurückzuleiten, die Sie auf Ihrer Website hosten, geben Sie die URL dieser Seite im Parameter [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) an. Fügen Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` in die URL ein, um den Status der Sitzung auf der Rückgabeseite abzurufen. Checkout ersetzt die Variable vor der Weiterleitung automatisch durch die Checkout-Sitzungs-ID. Erfahren Sie mehr über die [Konfiguration der Rückgabeseite](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=embedded-form#return-page) und andere Optionen zum [Anpassen des Weiterleitungsverhaltens](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form). Nachdem Sie die Checkout-Sitzung erstellt haben, verwenden Sie das `client_secret`, das in der Antwort auf [Checkout verbinden](https://docs.stripe.com/payments/multicapture.md#mount-checkout) zurückgegeben wurde. Um die Funktion zur Mehrfacherfassung zu aktivieren, setzen Sie [request_multicapture](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_multicapture) auf `if_available`. #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. require 'json' require 'sinatra' require 'stripe' # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' post '/create-checkout-session' do session = Stripe::Checkout::Session.create({ line_items: [{ price_data: { currency: 'usd', product_data: { name: 'T-shirt', }, unit_amount: 2000, }, quantity: 1, }], mode: 'payment', ui_mode: 'embedded_page',payment_method_options: { card: { request_multicapture: 'if_available', }, }, return_url: 'https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}' }) {clientSecret: session.client_secret}.to_json end ``` ### Zahlungsmethoden Standardmäßig aktiviert Stripe Karten und andere gängige Zahlungsmethoden. Sie können einzelne Zahlungsmethoden im [Stripe Dashboard](https://dashboard.stripe.com/settings/payment_methods) aktivieren oder deaktivieren. In Checkout wertet Stripe die Währung und etwaige Einschränkungen aus und zeigt den Kundinnen/Kunden dann dynamisch die unterstützten Zahlungsmethoden an. Um zu sehen, wie Ihre Zahlungsmethoden Kundinnen und Kunden angezeigt werden, geben Sie eine Transaktions-ID ein oder legen Sie einen Bestellbetrag und eine Währung im Dashboard fest. Sie können Apple Pay und Google Pay in Ihren [Einstellungen für Zahlungsmethoden](https://dashboard.stripe.com/settings/payment_methods) aktivieren. Standardmäßig ist Apple Pay aktiviert und Google Pay deaktiviert. In einigen Fällen filtert Stripe die Optionen jedoch heraus, auch wenn sie aktiviert sind. Wir filtern Google Pay, wenn Sie [automatische Steuern aktivieren](https://docs.stripe.com/tax/checkout.md), ohne eine Versandadresse zu erfassen. Die von Stripe gehosteten Checkout-Seiten benötigen keine Integrationsänderungen, um Apple Pay oder Google Pay zu aktivieren. Stripe verarbeitet diese Zahlungen genauso wie andere Kartenzahlungen. ## Checkout verbinden #### HTML + JS Checkout ist als Teil von [Stripe.js](https://docs.stripe.com/js.md) verfügbar. Nehmen Sie das Stripe.js-Skript in Ihre Seite auf, indem Sie es zum Header Ihrer HTML-Datei hinzufügen. Als Nächstes erstellen Sie einen leeren DOM-Knoten (Container), der zum Verbinden verwendet wird. ```html
``` Initialisieren Sie Stripe.js mit Ihrem veröffentlichbaren API-Schlüssel. Erstellen Sie eine asynchrone `fetchClientSecret`-Funktion, die eine Anfrage an Ihren Server stellt, um eine Checkout-Sitzung zu erstellen und das Client-Geheimnis abzurufen. Übergeben Sie diese Funktion an `options`, wenn Sie die Checkout-Instanz erstellen: ```javascript // Initialize Stripe.js const stripe = Stripe('<>'); initialize(); // Fetch Checkout Session and retrieve the client secret async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Initialize Checkout const checkout = await stripe.createEmbeddedCheckoutPage({ fetchClientSecret, }); // Mount Checkout checkout.mount('#checkout'); } ``` #### React Installieren Sie [react-stripe-js](https://docs.stripe.com/sdks/stripejs-react.md) und den Stripe.js-Loader von npm: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` Um die eingebettete Checkout-Komponente zu verwenden, erstellen Sie einen `EmbeddedCheckoutProvider`. Rufen Sie `loadStripe` mit Ihrem veröffentlichbaren API-Schlüssel auf und übergeben Sie das zurückgegebene `Promise` an den Anbieter. Erstellen Sie eine asynchrone `fetchClientSecret`-Funktion, die eine Anfrage an Ihren Server stellt, um eine Checkout-Sitzung zu erstellen und das Client-Geheimnis abzurufen. Übergeben Sie diese Funktion an die vom Anbieter akzeptierte Eigenschaft `options`. ```jsx import * as React from 'react'; import {loadStripe} from '@stripe/stripe-js'; import { EmbeddedCheckoutProvider, EmbeddedCheckout } from '@stripe/react-stripe-js'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('pk_test_123'); const App = () => { const fetchClientSecret = React.useCallback(() => { // Create a Checkout Session return fetch("/create-checkout-session", { method: "POST", }) .then((res) => res.json()) .then((data) => data.clientSecret); }, []); const options = {fetchClientSecret}; return (
) } ``` Checkout wird in einem iFrame gerendert, der Zahlungsdaten sicher über eine HTTPS-Verbindung an Stripe sendet. > Vermeiden Sie es, Checkout in einem anderen iFrame zu platzieren, da bei einigen Zahlungsmethoden die Weiterleitung an eine andere Seite zur Zahlungsbestätigung erforderlich ist. ### Erscheinungsbild anpassen Passen Sie Checkout an das Design Ihrer Website an, indem Sie Hintergrundfarbe, Schaltflächenfarbe, Rahmenradius und Schriftarten in den [Branding-Einstellungen](https://dashboard.stripe.com/settings/branding) Ihres Kontos festlegen. Checkout wird standardmäßig ohne externes Padding oder Ränder gerendert. Um Ihren gewünschten Rand hinzuzufügen (z. B. 16px auf allen Seiten), empfehlen wir, ein Container-Element zu verwenden. ## Eine Rückgabeseite anzeigen Nachdem Ihre Kundinnen/Kunden einen Zahlungsversuch unternommen haben, leitet Stripe sie zu einer Rückgabeseite weiter, die Sie auf Ihrer Website hosten. Beim Erstellen der Checkout-Sitzung haben Sie die URL der Rückgabeseite im Parameter [return_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) angegeben. Erfahren Sie mehr über andere Optionen zum [Anpassen des Weiterleitungsverhaltens](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form). Rufen Sie beim Rendern Ihrer Rückgabeseite den Status der Checkout-Sitzung mithilfe der Checkout-Sitzungs-ID in der URL ab. Verarbeiten Sie das Ergebnis entsprechend dem Sitzungsstatus wie folgt: - `complete`: Die Zahlung war erfolgreich. Verwenden Sie die Informationen aus der Checkout-Sitzung, um eine Bestätigungsseite zu rendern. - `open`: Die Zahlung ist fehlgeschlagen oder wurde storniert. Stellen Sie erneut eine Verbindung zu Checkout her, damit Ihre Kundinnen/Kunden es erneut versuchen können. #### Ruby ```ruby get '/session-status' do session = Stripe::Checkout::Session.retrieve(params[:session_id]) {status: session.status, customer_email: session.customer_details.email}.to_json end ``` ```javascript const session = await fetch(`/session_status?session_id=${session_id}`) if (session.status == 'open') { // Remount embedded Checkout } else if (session.status == 'complete') { // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page } ``` #### Auf Weiterleitung basierende Zahlungsmethoden Während der Zahlung leiten einige Zahlungsmethoden die Kundin/den Kunden auf eine Zwischenseite weiter, zum Beispiel eine Bankautorisierungsseite. Wenn sie diese Seite ausgefüllt haben, leitet Stripe sie zu Ihrer Rückgabeseite weiter. Erfahren Sie mehr über [auf Weiterleitung basierende Zahlungsmethoden und das Weiterleitungsverhalten](https://docs.stripe.com/payments/checkout/custom-success-page.md?payment-ui=embedded-form#redirect-based-payment-methods). ## PaymentIntent erfassen Bei einem PaymentIntent im Status [requires_capture](https://docs.stripe.com/payments/paymentintents/lifecycle.md), in dem die Mehrfacherfassung `available` ist, wird Stripe durch Angabe des optionalen Parameters `final_capture` auf `false` angewiesen, die verbleibenden, nicht erfassten Gelder freizugeben, wenn die Erfassungs-API aufgerufen wird. Wenn Sie beispielsweise einen Payment Intent in Höhe von 10 USD bestätigen, bleiben bei der Erfassung von 7 USD mit `final_capture=false` die verbleibenden 3 USD autorisiert. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=700 \ -d final_capture=false \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 300, // 1000 - 700 = 300 "amount_received": 700, // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 700, "amount_refunded": 0, ... } ... } ``` ## Endgültige Erfassung Der PaymentIntent verbleibt im Status `requires_capture`, bis Sie eine der folgenden Maßnahmen ergreifen: - Setzen Sie `final_capture` auf `true` - Erfassung ohne den Parameter `final_capture` (da `final_capture` standardmäßig auf `true` eingestellt ist) - Das Autorisierungsfenster läuft ab. An dieser Stelle gibt Stripe alle verbleibenden Gelder frei, und der PaymentIntent wechselt in den Status `succeeded`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=200 \ -d final_capture=true \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 0, // not 100 due to final_capture=true "amount_received": 900, // 700 + 200 = 900 // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 900, "amount_refunded": 0, ... } ... } ``` Nicht erfasste PaymentIntents gehen in den Status `canceled` über, während teilweise erfasste PaymentIntents in den Status `succeeded` wechseln. ## Optional: Nicht erfasste Gelder freigeben Wenn Sie nicht erfasste Gelder für eine teilweise erfasste Zahlung freigeben möchten, setzen Sie den Betrag auf 0 und `final_capture` auf `true`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=0 \ -d final_capture=true ``` Dadurch wird der PaymentIntent in den Status `succeeded` versetzt, und alle nicht erfassten Gelder werden an den/die Karteninhaber/in zurückgegeben. ## Ihre Integration testen Verwenden Sie eine Stripe-Testkarte mit einer beliebigen CVC/Prüfzimmer und Postleitzahl und einem beliebigen zukünftigen Ablaufdatum, um Multicapture-Zahlungen zu testen. | Die Nummer | Zahlungsmethode | Beschreibung | | ---------------- | ---------------------------------------------- | ----------------------------------------------------------------------------- | | 4242424242424242 | `pm_card_visa` | Visa-Testkarte, die Mehrfacherfassung unterstützt. | | 4000002500001001 | `pm_card_visa_cartesBancaires` | Cartes Bancaires- oder Visa-Testkarte, die die Mehrfacherfassung unterstützt. | | 4000008400000076 | `pm_card_credit_disableEnterpriseCardFeatures` | Visa-Testkarte ohne Unterstützung der Mehrfacherfassung. | ## Rückerstattungen Bei einem PaymentIntent mit dem Status `requires_capture` können Sie beliebig oft [Rückerstattungen](https://docs.stripe.com/api/refunds.md) bis zum gesamten erfassten Betrag abzüglich des gesamten rückerstatteten Betrags durchfühen. Dies ist der [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) – [amount_refunded](https://docs.stripe.com/api/charges/object.md#charge_object-amount_refunded). Das Feld [charge.refunded](https://docs.stripe.com/api/charges/object.md#charge_object-refunded) wechselt erst auf `true`, wenn die endgültige Erfassung durchgeführt wurde und die gesamte [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) rückerstattet wird. Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) mit [refund_application_fee=true](https://docs.stripe.com/api/refunds/create.md#create_refund-refund_application_fee) oder [reverse_transfer=true](https://docs.stripe.com/api/refunds/create.md#create_refund-reverse_transfer). Stattdessen können Sie Teilgebührenrückerstattungen durchführen, indem Sie manuell Teilgebührenerstattungen und Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. Nach Verwendung der Endpoints für die Rückerstattung der Plattformgebühr oder das Übertragungsstorno unterstützt Stripe keine weiteren Rückerstattungen mit `refund_application_fee=true` or `reverse_transfer=true`. ## Connect Multicapture unterstützt alle Use cases von Connect mit Ausnahme von [Separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md) mit dem Parameter [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction). Die Parameter [application_fee_amount](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-application_fee_amount) und [transfer_data[amount]](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-transfer_data-amount) haben einige zusätzliche Validierungen. Beachten Sie die folgenden Validierungen bei der Implementierung von Multicapture mit Connect: - Die Festlegung von `application_fee_amount` oder `transfer_data[amount]` bei der ersten Erfassung macht sie für alle nachfolgenden Erfassungen erforderlich. Jede Übergabe von `application_fee_amount` und `transfer_data[amount]` zum Zeitpunkt der Erfassung setzt die bei der Erstellung, Bestätigung und Aktualisierungen des PaymentIntent übergebenen Werte außer Kraft. - Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) für Multicapture-Zahlungen mit refund_application_fee=true oder reverse_transfer=true. Sie können Teilgebührenrückerstattungen oder Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. ## Webhooks ### Aktualisierte Webhooks belasten Wir senden jedes Mal, wenn Sie eine Zahlung erfassen, einen [charge.updated](https://docs.stripe.com/api/events/types.md#event_types-charge.updated)-Webhook. Beispiel: Bei der ersten Erfassung einer Multicapture-Zahlung vom Typ Destination Charge mit einem `application_fee_amount` aktualisieren wir diese Felder von leeren auf nicht leere Werte. ```json // charge.updated { "data": { "id": "ch_xxx", "object": "charge", "amount": 1000,"balance_transaction": "txn_xxx", // applicable to all charges "transfer": "tr_xxx", // applicable to destination charges only "application_fee": "fee_xxx", // applicable to Connect only ... }, "previous_attributes": {"balance_transaction": null, // applicable to all charges "transfer": null, // applicable to destination charges only "application_fee": null, // applicable to Connect only } } ``` ### payment_intent.amount_capturable_updated Wir übermitteln [payment_intent.amount_capturable_updated](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.amount_capturable_updated) bei jeder Erfassung, unabhängig von den Werten `amount_to_capture` und `final_capture`. Wenn wir beispielsweise 1 USD von einem PaymentIntent mit einem Betrag von 10 USD erfassen, wird das Feld amount_capturable des PaymentIntent auf 9 USD aktualisiert. ```json // payment_intent.amount_capturable_updated { "data": { "id": "pi_xxx", "object": "payment_intent", "amount": 1000,"amount_capturable": 900 // 1000 - 100 = 900 ... }, "previous_attributes": {"amount_capturable": 1000 } } ``` ### Zahlungserfassungsereignisse Wir senden ein [charge.captured](https://docs.stripe.com/api/events/types.md#event_types-charge.captured)-Ereignis für die endgültige Erfassung oder am Ende des Autorisierungsfensters, um die Autorisierung des nicht erfassten Betrags rückgängig zu machen. Das Feld [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) für eine Zahlung wird erst nach einer endgültigen Erfassung oder einem Autorisierungsstorno `true`. Wenn wir beispielsweise eine Erfassung mit `amount=0` und `final_capture=true` durchführen, ändert sich das Attribut [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) der Zahlung von false in true. ```json // charge.captured { "data": { "id": "ch_xxx", "object": "charge","captured": true ... }, "previous_attributes": {"captured": false } } ``` ### Rückerstattungs-Webhooks Multicapture-Webhooks für die Rückerstattung unterscheiden sich nicht von Webhooks ohne Multicapture. Bei jeder Teilrückerstattung senden wir ein [refund.created](https://docs.stripe.com/api/events/types.md#event_types-refund.created)-Ereignis. Bei verbundenen Konten senden wir auch [application_fee.refunded](https://docs.stripe.com/api/events/types.md#event_types-application_fee.refunded)-Ereignisse, wenn wir Plattformgebühren erstatten, und [transfer.reversed](https://docs.stripe.com/api/events/types.md#event_types-transfer.reversed)-Ereignisse, wenn wir Transfers zurückbuchen. # Erweiterte Integration > This is a Erweiterte Integration for when platform is web and ui is elements. View the full page at https://docs.stripe.com/payments/multicapture?platform=web&ui=elements. Mit Multicapture können Sie [einen PaymentIntent](https://docs.stripe.com/api/payment_intents/capture.md) mehrmals für eine einzelne Autorisierung erfassen, bis zum vollständigen [Betrag des PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-amount). Sie können ihn verwenden, wenn Sie Bestellungen mit mehreren Lieferungen haben und Gelder erfassen möchten, während Sie Teile der Bestellung abwickeln. > #### IC+-Funktion > > Multicapture ist Teil der Funktionalität, von dem unsere Nutzer/innen beim Preismodell *IC+* profitieren. Wenn Sie einen gemischten Stripe-Preis anbieten und auf diese Funktion zugreifen möchten, kontaktieren Sie unseren [Stripe-Support](https://support.stripe.com). ## Verfügbarkeit Beachten Sie bei der Verwendung von Multicapture folgende Einschränkungen: - Es werden nur Online-Kartenzahlungen unterstützt - Verfügbar mit Amex, Visa, Discover, Mastercard, Cartes Bancaires, Diners Club, China UnionPay (CUP) und Japan Credit Bureau (JCB). - Geldbewegungen für [separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md), die [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction) verwenden, werden nicht unterstützt - Mit Stripe können Sie bis zu 50 Erfassungen für einen einzelnen [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) durchführen > #### CUP- und JCB-Unterstützung > > CUP-Mehrfacherfassung ist nur in den USA verfügbar. JCB-Mehrfacherfassung ist nur in den USA, in Kanada, Australien und Neuseeland verfügbar. ## Best Practices Wenn Sie getrennte Sendungen für eine Bestellung versenden, benachrichtigen Sie Ihre Endkundinnen und -kunden proaktiv über die Details jeder Lieferung. Auf diese Weise werden Anfragen und Rückbuchungen von Kundinnen/Kunden vermieden, da sie verwirrt sind, weil sie mehrere Transaktionen auf ihren Kontoauszügen sehen. Verwenden Sie die folgenden Best Practices bei der Benachrichtigung von Kundinnen und Kunden: - Informieren Sie sie zum Zeitpunkt des Bezahlvorgangs vor dem Kauf über das geschätzte Lieferdatum und den Transaktionsbetrag für jede Lieferung. - Benachrichtigen Sie sie bei jeder Lieferung, zusammen mit dem Transaktionsbetrag. - Geben Sie Ihre vollständigen Rückerstattungs- und Stornorichtlinien an. > #### Compliance > > Sie sind bei Verwendung von Mehrfacherfassung für die Einhaltung aller geltenden Gesetze, Vorschriften und Netzwerkregeln verantwortlich. Informieren Sie sich über die Regeln der Kartennetze, mit denen Sie diese Funktion nutzen möchten, um sicherzustellen, dass Ihre Verkäufe allen geltenden Regeln entsprechen, die je nach Netzwerk unterschiedlich sind. Beispielsweise beschränken die meisten Kartennetzwerke die Nutzung von Mehrfacherfassung auf Transaktionen ohne Karte für den Verkauf von Waren, die separat versendet werden. Bestimmte Kartennetzwerke erlauben die Mehrfacherfassung für Unternehmen, basierend auf ihrer Branche (zum Beispiel Reisen), während andere die Mehrfacherfassung nicht für Ratenzahlungs- oder Einzahlungs-Workflows zulassen. > > Die auf dieser Seite bereitgestellten Informationen im Zusammenhang mit der Einhaltung dieser Anforderungen dienen Ihrer allgemeinen Orientierung und stellen keine rechtliche, steuerliche, buchhalterische oder sonstige fachliche Beratung dar. Wenden Sie sich an eine Fachperson, wenn Sie sich bezüglich Ihrer Verpflichtungen unsicher sind. ## Einen nicht erfassten PaymentIntent erstellen und bestätigen Um anzugeben, dass Autorisierung und Erfassung getrennt werden sollen, geben Sie beim Erstellen des PaymentIntent die [capture_method](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-capture_method) als `manual` an. Weitere Informationen zur separaten Autorisierung und Erfassung finden Sie unter [Eine Zahlungsmethode zurückstellen](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md). Verwenden Sie den Parameter `if_available` oder `never`, um Multicapture für diese Zahlung anzufordern. - `if_available`: Der erstellte PaymentIntent lässt mehrere Erfassungen zu, wenn die Zahlungsmethode dies unterstützt. - `never`: Der erstellte PaymentIntent lässt keine mehrfachen Erfassung zu ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_types[]=card" \ -d payment_method=pm_card_visa \ -d confirm=true \ -d capture_method=manual \ -d "expand[]=latest_charge" \ -d "payment_method_options[card][request_multicapture]=if_available" ``` In der Antwort enthält das Feld `payment_method_details.card.multicapture.status` für [latest_charge](https://docs.stripe.com/api/charges/object.md) je nach Zahlungsmethode des Kunden/der Kundin `available` oder `unavailable`. ```json // PaymentIntent Response { "id": "pi_xxx", "object": "payment_intent","amount": 1000, "amount_capturable": 1000, "amount_received": 0, ... // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 0, "amount_refunded": 0, "payment_method_details": { "card": { "multicapture": {"status": "available" // or "unavailable" } } } ... } ... } ``` ## PaymentIntent erfassen Bei einem PaymentIntent im Status [requires_capture](https://docs.stripe.com/payments/paymentintents/lifecycle.md), in dem die Mehrfacherfassung `available` ist, wird Stripe durch Angabe des optionalen Parameters `final_capture` auf `false` angewiesen, die verbleibenden, nicht erfassten Gelder freizugeben, wenn die Erfassungs-API aufgerufen wird. Wenn Sie beispielsweise einen Payment Intent in Höhe von 10 USD bestätigen, bleiben bei der Erfassung von 7 USD mit `final_capture=false` die verbleibenden 3 USD autorisiert. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=700 \ -d final_capture=false \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 300, // 1000 - 700 = 300 "amount_received": 700, // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 700, "amount_refunded": 0, ... } ... } ``` ## Endgültige Erfassung Der PaymentIntent verbleibt im Status `requires_capture`, bis Sie eine der folgenden Maßnahmen ergreifen: - Setzen Sie `final_capture` auf `true` - Erfassung ohne den Parameter `final_capture` (da `final_capture` standardmäßig auf `true` eingestellt ist) - Das Autorisierungsfenster läuft ab. An dieser Stelle gibt Stripe alle verbleibenden Gelder frei, und der PaymentIntent wechselt in den Status `succeeded`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=200 \ -d final_capture=true \ -d "expand[]=latest_charge" ``` In der PI-Erfassungsantwort werden die Felder [amount_capturable](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_capturable) und [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) entsprechend aktualisiert. ```json // PaymentIntent Response { "id": "pi_ANipwO3zNfjeWODtRPIg", "object": "payment_intent","amount": 1000, "amount_capturable": 0, // not 100 due to final_capture=true "amount_received": 900, // 700 + 200 = 900 // if latest_charge is expanded "latest_charge": { "id": "ch_xxx", "object": "charge","amount": 1000, "amount_captured": 900, "amount_refunded": 0, ... } ... } ``` Nicht erfasste PaymentIntents gehen in den Status `canceled` über, während teilweise erfasste PaymentIntents in den Status `succeeded` wechseln. ## Optional: Nicht erfasste Gelder freigeben Wenn Sie nicht erfasste Gelder für eine teilweise erfasste Zahlung freigeben möchten, setzen Sie den Betrag auf 0 und `final_capture` auf `true`. ```curl curl https://api.stripe.com/v1/payment_intents/pi_xxx/capture \ -u "<>:" \ -d amount_to_capture=0 \ -d final_capture=true ``` Dadurch wird der PaymentIntent in den Status `succeeded` versetzt, und alle nicht erfassten Gelder werden an den/die Karteninhaber/in zurückgegeben. ## Ihre Integration testen Verwenden Sie eine Stripe-Testkarte mit einer beliebigen CVC/Prüfzimmer und Postleitzahl und einem beliebigen zukünftigen Ablaufdatum, um Multicapture-Zahlungen zu testen. | Die Nummer | Zahlungsmethode | Beschreibung | | ---------------- | ---------------------------------------------- | ----------------------------------------------------------------------------- | | 4242424242424242 | `pm_card_visa` | Visa-Testkarte, die Mehrfacherfassung unterstützt. | | 4000002500001001 | `pm_card_visa_cartesBancaires` | Cartes Bancaires- oder Visa-Testkarte, die die Mehrfacherfassung unterstützt. | | 4000008400000076 | `pm_card_credit_disableEnterpriseCardFeatures` | Visa-Testkarte ohne Unterstützung der Mehrfacherfassung. | ## Rückerstattungen Bei einem PaymentIntent mit dem Status `requires_capture` können Sie beliebig oft [Rückerstattungen](https://docs.stripe.com/api/refunds.md) bis zum gesamten erfassten Betrag abzüglich des gesamten rückerstatteten Betrags durchfühen. Dies ist der [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) – [amount_refunded](https://docs.stripe.com/api/charges/object.md#charge_object-amount_refunded). Das Feld [charge.refunded](https://docs.stripe.com/api/charges/object.md#charge_object-refunded) wechselt erst auf `true`, wenn die endgültige Erfassung durchgeführt wurde und die gesamte [amount_received](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-amount_received) rückerstattet wird. Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) mit [refund_application_fee=true](https://docs.stripe.com/api/refunds/create.md#create_refund-refund_application_fee) oder [reverse_transfer=true](https://docs.stripe.com/api/refunds/create.md#create_refund-reverse_transfer). Stattdessen können Sie Teilgebührenrückerstattungen durchführen, indem Sie manuell Teilgebührenerstattungen und Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. Nach Verwendung der Endpoints für die Rückerstattung der Plattformgebühr oder das Übertragungsstorno unterstützt Stripe keine weiteren Rückerstattungen mit `refund_application_fee=true` or `reverse_transfer=true`. ## Connect Multicapture unterstützt alle Use cases von Connect mit Ausnahme von [Separate Zahlungen und Überweisungen](https://docs.stripe.com/connect/separate-charges-and-transfers.md) mit dem Parameter [source_transaction](https://docs.stripe.com/api/transfers/create.md#create_transfer-source_transaction). Die Parameter [application_fee_amount](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-application_fee_amount) und [transfer_data[amount]](https://docs.stripe.com/api/payment_intents/capture.md#capture_payment_intent-transfer_data-amount) haben einige zusätzliche Validierungen. Beachten Sie die folgenden Validierungen bei der Implementierung von Multicapture mit Connect: - Die Festlegung von `application_fee_amount` oder `transfer_data[amount]` bei der ersten Erfassung macht sie für alle nachfolgenden Erfassungen erforderlich. Jede Übergabe von `application_fee_amount` und `transfer_data[amount]` zum Zeitpunkt der Erfassung setzt die bei der Erstellung, Bestätigung und Aktualisierungen des PaymentIntent übergebenen Werte außer Kraft. - Stripe unterstützt keine *Teilrückerstattungen* (A partial refund is any refund in which less than the remaining refundable amount is refunded in a single request. The remaining refundable amount is the payment_intent.amount_received - charge.amount_refunded) für Multicapture-Zahlungen mit refund_application_fee=true oder reverse_transfer=true. Sie können Teilgebührenrückerstattungen oder Transferrückbuchungen mit den Endpoints [Rückerstattung von Plattformgebühren](https://docs.stripe.com/api/fee_refunds.md) und [Rückbuchung des Transfers](https://docs.stripe.com/api/transfer_reversals.md) durchführen. ## Webhooks ### Aktualisierte Webhooks belasten Wir senden jedes Mal, wenn Sie eine Zahlung erfassen, einen [charge.updated](https://docs.stripe.com/api/events/types.md#event_types-charge.updated)-Webhook. Beispiel: Bei der ersten Erfassung einer Multicapture-Zahlung vom Typ Destination Charge mit einem `application_fee_amount` aktualisieren wir diese Felder von leeren auf nicht leere Werte. ```json // charge.updated { "data": { "id": "ch_xxx", "object": "charge", "amount": 1000,"balance_transaction": "txn_xxx", // applicable to all charges "transfer": "tr_xxx", // applicable to destination charges only "application_fee": "fee_xxx", // applicable to Connect only ... }, "previous_attributes": {"balance_transaction": null, // applicable to all charges "transfer": null, // applicable to destination charges only "application_fee": null, // applicable to Connect only } } ``` ### payment_intent.amount_capturable_updated Wir übermitteln [payment_intent.amount_capturable_updated](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.amount_capturable_updated) bei jeder Erfassung, unabhängig von den Werten `amount_to_capture` und `final_capture`. Wenn wir beispielsweise 1 USD von einem PaymentIntent mit einem Betrag von 10 USD erfassen, wird das Feld amount_capturable des PaymentIntent auf 9 USD aktualisiert. ```json // payment_intent.amount_capturable_updated { "data": { "id": "pi_xxx", "object": "payment_intent", "amount": 1000,"amount_capturable": 900 // 1000 - 100 = 900 ... }, "previous_attributes": {"amount_capturable": 1000 } } ``` ### Zahlungserfassungsereignisse Wir senden ein [charge.captured](https://docs.stripe.com/api/events/types.md#event_types-charge.captured)-Ereignis für die endgültige Erfassung oder am Ende des Autorisierungsfensters, um die Autorisierung des nicht erfassten Betrags rückgängig zu machen. Das Feld [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) für eine Zahlung wird erst nach einer endgültigen Erfassung oder einem Autorisierungsstorno `true`. Wenn wir beispielsweise eine Erfassung mit `amount=0` und `final_capture=true` durchführen, ändert sich das Attribut [captured](https://docs.stripe.com/api/charges/object.md#charge_object-captured) der Zahlung von false in true. ```json // charge.captured { "data": { "id": "ch_xxx", "object": "charge","captured": true ... }, "previous_attributes": {"captured": false } } ``` ### Rückerstattungs-Webhooks Multicapture-Webhooks für die Rückerstattung unterscheiden sich nicht von Webhooks ohne Multicapture. Bei jeder Teilrückerstattung senden wir ein [refund.created](https://docs.stripe.com/api/events/types.md#event_types-refund.created)-Ereignis. Bei verbundenen Konten senden wir auch [application_fee.refunded](https://docs.stripe.com/api/events/types.md#event_types-application_fee.refunded)-Ereignisse, wenn wir Plattformgebühren erstatten, und [transfer.reversed](https://docs.stripe.com/api/events/types.md#event_types-transfer.reversed)-Ereignisse, wenn wir Transfers zurückbuchen.