# Warenkörbe nach Abbrüchen wiederherstellen Erfahren Sie, wie Sie abgebrochene Checkout-Seiten wiederherstellen und den Umsatz steigern. # Gehostete Seite > This is a Gehostete Seite for when payment-ui is stripe-hosted. View the full page at https://docs.stripe.com/payments/checkout/abandoned-carts?payment-ui=stripe-hosted. Im E-Commerce bezeichnet [Kaufabbruch](https://docs.stripe.com/payments/checkout/compliant-promotional-emails.md) den Vorgang, bei dem Kundinnen und Kunden den Bestellvorgang abbrechen, bevor sie ihren Kauf abschließen. Um Kundinnen und Kunden wieder in den Bezahlvorgang aufzunehmen, erstellen Sie einen Wiederherstellungsablauf, bei dem Sie Kundinnen und Kunden per E-Mail auffordern, ihre Einkäufe abzuschließen. E-Mails infolge von Kaufabbrüchen fallen in die weiter gefasste Kategorie der *Werbe-E-Mails*. Hierzu zählen E-Mails, mit denen Sie Kundinnen und Kunden über neue Produkte sowie über Gutscheine und Rabatte informieren. Kundinnen und Kunden müssen dem Erhalt von Werbe-E-Mails zustimmen, bevor Sie sie kontaktieren können. Checkout hilft Ihnen bei Folgendem: 1. Holen Sie die Zustimmung von Kund/innen ein, damit Sie Ihnen Werbe-E-Mails schicken können. 1. Lassen Sie sich benachrichtigen, wenn Kund/innen den Checkout-Vorgang abbrechen, damit Sie ihnen E-Mails nach Kaufabbrüchen senden können. ## Zustimmung zum Erhalt von Werbung einholen Konfigurieren Sie Checkout so, dass [die Zustimmung zum Erhalt von Werbeinhalten eingeholt wird](https://docs.stripe.com/payments/checkout/promotional-emails-consent.md). Wenn Sie die E-Mail-Adresse des/der Kund/in erfassen und vor der Weiterleitung an Checkout die Zustimmung zu Werbeinhalten einholen, können Sie die Verwendung von `consent_collection[promotions]` überspringen. > #### Use the Accounts v2 API to represent customers > > If your integration uses [customer-configured Accounts](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), replace `Customer` and event references in the code examples with the equivalent Accounts v2 API references. For more information, see [Represent customers with Account objects](https://docs.stripe.com/connect/use-accounts-as-customers.md). ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "customer={{CUSTOMER_ID}}" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" \ -d "consent_collection[promotions]=auto" ``` ## Wiederherstellung konfigurieren Eine Checkout-Sitzung wird abgebrochen, wenn ihr Zeitstempel [expires_at](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-expires_at) erreicht ist, und der Kunde/die Kundin den Bezahlvorgang nicht abgeschlossen hat. Wenn dies der Fall ist, ist kein Zugriff auf die Sitzung mehr möglich, und Stripe löst den *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `checkout.session.expired` aus, den Sie überwachen können. Sie können dann versuchen, die Kundinnen/Kunden zu einer neuen Checkout-Sitzung zu bringen, damit sie ihren Einkauf abschließen. Um diese Funktion zu verwenden, aktivieren Sie `after_expiration.recovery`, wenn Sie die Sitzung erstellen. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" \ -d "customer={{CUSTOMER_ID}}" \ -d "consent_collection[promotions]=auto" \ -d "after_expiration[recovery][enabled]=true" \ -d "after_expiration[recovery][allow_promotion_codes]=true" ``` ## Benachrichtigung über Kaufabbrüche erhalten Überwachen Sie den Webhook `checkout.session.expired`, um darüber benachrichtigt zu werden, wenn Kundinnen/Kunden den Checkout-Vorgang abbrechen und Sitzungen ablaufen. Wenn die Sitzung mit aktivierter Wiederherstellung abläuft, enthält die Webhook-Nutzlast das Objekt [after_expiration](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-after_expiration-recovery), das eine URL mit der Bezeichnung `after_expiration.recovery.url` enthält, die Sie in E-Mails nach Kaufabbrüchen einbetten können. Wenn Kundinnen/Kunden diese URL öffnen, **erstellen sie eine neue Checkout-Sitzung, die eine Kopie der ursprünglichen abgelaufenen Sitzung ist**. Der Kunde/die Kundin verwendet diese kopierte Sitzung, um den Kauf abzuschließen. > Aus Sicherheitsgründen kann eine Wiederherstellungs-URL für eine Sitzung 30 Tage lang verwendet werden. Dies wird durch den Zeitstempel `after_expiration.recovery.expires_at` angegeben. ```json { "id": "evt_123456789", "object": "event", "type": "checkout.session.expired", // ...other webhook attributes "data": { "object": { "id": "cs_12356789", "object": "checkout.session", // ...other Checkout Session attributes"consent_collection": { "promotions": "auto", }, "consent": { "promotions": "opt_in" }, "after_expiration": { "recovery": { "enabled": true, "url": "https://buy.stripe.com/r/live_asAb1724", "allow_promotion_code": true, "expires_at": 1622908282, } } } } } ``` ## Wiederherstellungs-E-Mails senden Um Wiederherstellungs-E-Mails zu senden, erstellen Sie einen Webhook-Handler für abgelaufene Sitzungen und senden Sie eine E-Mail mit integrierter Wiederherstellungs-URL für die Sitzung. Es kann vorkommen, dass Kundinnen/Kunden mehrere Checkout-Sitzungen abbrechen, von denen jede ein eigenes Ereignis des Typs `checkout.session.expired` auslöst. Zeichnen Sie also unbedingt auf, wann Sie Wiederherstellungs-E-Mails an Kundinnen/Kunden senden und vermeiden Sie Spamming. #### Node.js ```javascript // Find your endpoint's secret in your Dashboard's webhook settings const endpointSecret = 'whsec_...'; // Using Express const app = require('express')(); // Use body-parser to retrieve the raw body as a buffer const bodyParser = require('body-parser');const sendRecoveryEmail = (email, recoveryUrl) => { // TODO: fill me in console.log("Sending recovery email", email, recoveryUrl); } app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => { const payload = request.body; const sig = request.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(payload, sig, endpointSecret); } catch (err) { return response.status(400).send(`Webhook Error: ${err.message}`); }// Handle the checkout.session.expired event if (event.type === 'checkout.session.expired') { const session = event.data.object; // When a Checkout Session expires, the customer's email isn't returned in // the webhook payload unless they give consent for promotional content const email = session.customer_details?.email const recoveryUrl = session.after_expiration?.recovery?.url // Do nothing if the Checkout Session has no email or recovery URL if (!email || !recoveryUrl) { return response.status(200).end(); } // Check if the customer has consented to promotional emails and // avoid spamming people who abandon Checkout multiple times if ( session.consent?.promotions === 'opt_in' && !hasSentRecoveryEmailToCustomer(email) ) { sendRecoveryEmail(email, recoveryUrl) } } response.status(200).end(); }); ``` ## Optional: Sitzungsablauf anpassen Standardmäßig laufen Checkout-Sitzungen 24 Stunden nach ihrer Erstellung ab. Sie können die Ablaufzeit jedoch verkürzen, indem Sie `expires_at` einstellen, um früher über den Abbruch informiert zu werden. Der zulässige Mindestwert `expires_at` beträgt 30 Minuten ab dem Zeitpunkt der Erstellung der Sitzung. #### cURL ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d customer='{{CUSTOMER_ID}}' \ -d "line_items[0][price]"='{{PRICE_ID}}' \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d success_url="https://example.com/success" \-d expires_at="{{NOW_PLUS_TWO_HOURS}}" ``` ## Optional: Konversion nachverfolgen Wenn der Kunde/die Kundin die Wiederherstellungs-URL für eine abgelaufene Checkout-Sitzung öffnet, wird eine neue Checkout-Sitzung erstellt, die eine Kopie der abgebrochenen Sitzung ist. Um zu überprüfen, ob eine Wiederherstellungs-E-Mail eine erfolgreiche Konversion verursacht hat, überprüfen Sie das Attribut [recovered_from](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-recovered_from) im Webhook `checkout.session.completed` für die neue Checkout-Sitzung. Dieses Attribut verweist auf die ursprüngliche Sitzung, die abgelaufen ist. #### Node.js ```javascript // Find your endpoint's secret in your Dashboard's webhook settings const endpointSecret = 'whsec_...'; // Using Express const app = require('express')(); // Use body-parser to retrieve the raw body as a buffer const bodyParser = require('body-parser');const logRecoveredCart = (sessionId, recoveredFromSessionId) => { // TODO: fill me in console.log("Recording recovered session", sessionId, recoveredFromSessionId); } app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => { const payload = request.body; const sig = request.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(payload, sig, endpointSecret); } catch (err) { return response.status(400).send(`Webhook Error: ${err.message}`); }// Handle the checkout.session.completed event if (event.type === 'checkout.session.completed') { const session = event.data.object; const recoveryFromSessionId = session.recovered_from if (recoveryFromSessionId) { // Log relationship between successfully completed session and abandoned session logRecoveredCart(session.id, recoveryFromSessionId) } // Handle order fulfillment } response.status(200).end(); }); ``` ## Optional: Promo-Codes in Wiederherstellungs-E-Mails anbieten Das Anbieten von [Rabatten](https://docs.stripe.com/payments/checkout/discounts.md) für Kundinnen/Kunden, die ihren Einkauf abbrechen, kann einen Anreiz darstellen, den Einkauf abzuschließen. Sie können konfigurieren, ob die über die Wiederherstellungs-URL erstellte Checkout-Sitzung eine Option für Promo-Codes enthält, indem Sie `after_expiration.recovery.allow_promotion_code` festlegen. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" \ -d "customer={{CUSTOMER_ID}}" \ -d "consent_collection[promotions]=auto" \ -d "after_expiration[recovery][enabled]=true" \ -d "after_expiration[recovery][allow_promotion_codes]=true" ``` # Eingebettete Seite > This is a Eingebettete Seite for when payment-ui is embedded-form. View the full page at https://docs.stripe.com/payments/checkout/abandoned-carts?payment-ui=embedded-form. Im E-Commerce bezeichnet [Kaufabbruch](https://docs.stripe.com/payments/checkout/compliant-promotional-emails.md) den Vorgang, bei dem Kundinnen und Kunden den Bestellvorgang abbrechen, bevor sie ihren Kauf abschließen. Um Kundinnen und Kunden wieder in den Bezahlvorgang aufzunehmen, erstellen Sie einen Wiederherstellungsablauf, bei dem Sie Kundinnen und Kunden per E-Mail auffordern, ihre Einkäufe abzuschließen. E-Mails infolge von Kaufabbrüchen fallen in die weiter gefasste Kategorie der *Werbe-E-Mails*. Hierzu zählen E-Mails, mit denen Sie Kundinnen und Kunden über neue Produkte sowie über Gutscheine und Rabatte informieren. Kundinnen und Kunden müssen dem Erhalt von Werbe-E-Mails zustimmen, bevor Sie sie kontaktieren können. Checkout hilft Ihnen bei Folgendem: 1. Holen Sie die Zustimmung von Kund/innen ein, damit Sie Ihnen Werbe-E-Mails schicken können. 1. Lassen Sie sich benachrichtigen, wenn Kund/innen den Checkout-Vorgang abbrechen, damit Sie ihnen E-Mails nach Kaufabbrüchen senden können. ## Zustimmung zum Erhalt von Werbung einholen Konfigurieren Sie Checkout so, dass [die Zustimmung zu Werbeinhalten eingeholt wird](https://docs.stripe.com/payments/checkout/promotional-emails-consent.md). Wenn Sie die E-Mail-Adresse des/der Kund/in erfassen und die Zustimmung zu Werbeinhalten einholen, bevor das eingebettete Formular angezeigt wird, können Sie die Verwendung von `consent_collection[promotions]` überspringen. > #### Use the Accounts v2 API to represent customers > > If your integration uses [customer-configured Accounts](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), replace `Customer` and event references in the code examples with the equivalent Accounts v2 API references. For more information, see [Represent customers with Account objects](https://docs.stripe.com/connect/use-accounts-as-customers.md). ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "customer={{CUSTOMER_ID}}" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/return" \ -d "consent_collection[promotions]=auto" ``` ## Wiederherstellung konfigurieren Eine Checkout-Sitzung wird abgebrochen, wenn ihr Zeitstempel [expires_at](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-expires_at) erreicht ist, und der/ Käufer/in den Bezahlvorgang nicht abgeschlossen hat. Wenn dies der Fall ist, ist kein Zugriff auf die Sitzung mehr möglich, und Stripe löst den *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) `checkout.session.expired` aus, den Sie überwachen können. Sie können dann versuchen, die Kundinnen/Kunden zu einer neuen Checkout-Sitzung zu bringen, damit sie ihren Einkauf abschließen. Um diese Funktion zu verwenden, aktivieren Sie `after_expiration.recovery`, wenn Sie die Sitzung erstellen. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}" \ -d "customer={{CUSTOMER_ID}}" \ -d "consent_collection[promotions]=auto" \ -d "after_expiration[recovery][enabled]=true" \ -d "after_expiration[recovery][allow_promotion_codes]=true" ``` ## Benachrichtigung über Kaufabbrüche erhalten Überwachen Sie den Webhook `checkout.session.expired`, um darüber benachrichtigt zu werden, wenn Kundinnen/Kunden den Checkout-Vorgang abbrechen und Sitzungen ablaufen. Wenn die Sitzung mit aktivierter Wiederherstellung abläuft, enthält die Webhook-Nutzlast das Objekt [after_expiration](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-after_expiration-recovery), das eine URL mit der Bezeichnung `after_expiration.recovery.url` enthält, die Sie in E-Mails nach Kaufabbrüchen einbetten können. Wenn Kundinnen/Kunden diese URL öffnen, **erstellen sie eine neue Checkout-Sitzung, die eine Kopie der ursprünglichen abgelaufenen Sitzung ist**. Der Kunde/die Kundin verwendet diese kopierte Sitzung, um den Kauf abzuschließen. > Aus Sicherheitsgründen kann eine Wiederherstellungs-URL für eine Sitzung 30 Tage lang verwendet werden. Dies wird durch den Zeitstempel `after_expiration.recovery.expires_at` angegeben. ```json { "id": "evt_123456789", "object": "event", "type": "checkout.session.expired", // ...other webhook attributes "data": { "object": { "id": "cs_12356789", "object": "checkout.session", // ...other Checkout Session attributes"consent_collection": { "promotions": "auto", }, "consent": { "promotions": "opt_in" }, "after_expiration": { "recovery": { "enabled": true, "url": "https://buy.stripe.com/r/live_asAb1724", "allow_promotion_code": true, "expires_at": 1622908282, } } } } } ``` ## Wiederherstellungs-E-Mails senden Um Wiederherstellungs-E-Mails zu senden, erstellen Sie einen Webhook-Handler für abgelaufene Sitzungen und senden Sie eine E-Mail mit integrierter Wiederherstellungs-URL für die Sitzung. Es kann vorkommen, dass Kundinnen/Kunden mehrere Checkout-Sitzungen abbrechen, von denen jede ein eigenes Ereignis des Typs `checkout.session.expired` auslöst. Zeichnen Sie also unbedingt auf, wann Sie Wiederherstellungs-E-Mails an Kundinnen/Kunden senden und vermeiden Sie Spamming. #### Node.js ```javascript // Find your endpoint's secret in your Dashboard's webhook settings const endpointSecret = 'whsec_...'; // Using Express const app = require('express')(); // Use body-parser to retrieve the raw body as a buffer const bodyParser = require('body-parser');const sendRecoveryEmail = (email, recoveryUrl) => { // TODO: fill me in console.log("Sending recovery email", email, recoveryUrl); } app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => { const payload = request.body; const sig = request.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(payload, sig, endpointSecret); } catch (err) { return response.status(400).send(`Webhook Error: ${err.message}`); }// Handle the checkout.session.expired event if (event.type === 'checkout.session.expired') { const session = event.data.object; // When a Checkout Session expires, the customer's email isn't returned in // the webhook payload unless they give consent for promotional content const email = session.customer_details?.email const recoveryUrl = session.after_expiration?.recovery?.url // Do nothing if the Checkout Session has no email or recovery URL if (!email || !recoveryUrl) { return response.status(200).end(); } // Check if the customer has consented to promotional emails and // avoid spamming people who abandon Checkout multiple times if ( session.consent?.promotions === 'opt_in' && !hasSentRecoveryEmailToCustomer(email) ) { sendRecoveryEmail(email, recoveryUrl) } } response.status(200).end(); }); ``` ## Optional: Sitzungsablauf anpassen Standardmäßig laufen Checkout-Sitzungen 24 Stunden nach ihrer Erstellung ab. Sie können die Ablaufzeit jedoch verkürzen, indem Sie `expires_at` einstellen, um früher über den Abbruch informiert zu werden. Der zulässige Mindestwert `expires_at` beträgt 30 Minuten ab dem Zeitpunkt der Erstellung der Sitzung. #### cURL ```bash curl https://api.stripe.com/v1/checkout/sessions \ -u <>: \ -d customer='{{CUSTOMER_ID}}' \ -d "line_items[0][price]"='{{PRICE_ID}}' \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=embedded_page \ -d return_url="https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}" \-d expires_at="{{NOW_PLUS_TWO_HOURS}}" ``` ## Optional: Konversion nachverfolgen Wenn der Kunde/die Kundin die Wiederherstellungs-URL für eine abgelaufene Checkout-Sitzung öffnet, wird eine neue Checkout-Sitzung erstellt, die eine Kopie der abgebrochenen Sitzung ist. Um zu überprüfen, ob eine Wiederherstellungs-E-Mail eine erfolgreiche Konversion verursacht hat, überprüfen Sie das Attribut [recovered_from](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-recovered_from) im Webhook `checkout.session.completed` für die neue Checkout-Sitzung. Dieses Attribut verweist auf die ursprüngliche Sitzung, die abgelaufen ist. #### Node.js ```javascript // Find your endpoint's secret in your Dashboard's webhook settings const endpointSecret = 'whsec_...'; // Using Express const app = require('express')(); // Use body-parser to retrieve the raw body as a buffer const bodyParser = require('body-parser');const logRecoveredCart = (sessionId, recoveredFromSessionId) => { // TODO: fill me in console.log("Recording recovered session", sessionId, recoveredFromSessionId); } app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => { const payload = request.body; const sig = request.headers['stripe-signature']; let event; try { event = stripe.webhooks.constructEvent(payload, sig, endpointSecret); } catch (err) { return response.status(400).send(`Webhook Error: ${err.message}`); }// Handle the checkout.session.completed event if (event.type === 'checkout.session.completed') { const session = event.data.object; const recoveryFromSessionId = session.recovered_from if (recoveryFromSessionId) { // Log relationship between successfully completed session and abandoned session logRecoveredCart(session.id, recoveryFromSessionId) } // Handle order fulfillment } response.status(200).end(); }); ``` ## Optional: Promo-Codes in Wiederherstellungs-E-Mails anbieten Das Anbieten von [Rabatten](https://docs.stripe.com/payments/checkout/discounts.md) für Kundinnen/Kunden, die ihren Einkauf abbrechen, kann einen Anreiz darstellen, den Einkauf abzuschließen. Sie können konfigurieren, ob die über die Wiederherstellungs-URL erstellte Checkout-Sitzung eine Option für Promo-Codes enthält, indem Sie `after_expiration.recovery.allow_promotion_code` festlegen. ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d ui_mode=embedded_page \ --data-urlencode "return_url=https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}" \ -d "customer={{CUSTOMER_ID}}" \ -d "consent_collection[promotions]=auto" \ -d "after_expiration[recovery][enabled]=true" \ -d "after_expiration[recovery][allow_promotion_codes]=true" ```