# Weiterleitungsverhalten anpassen Zeigen Sie eine Bestätigungsseite mit der Bestellübersicht für den Kunden/die Kundin an. # 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/custom-success-page?payment-ui=stripe-hosted. Wenn Ihre Connect-Plattform verwendet [kundenkonfigurierte Konten](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), benutze unser [Anleitung](https://docs.stripe.com/connect/use-accounts-as-customers.md) Ersetzen `Customer` und Ereignisreferenzen in Ihrem Code mit den entsprechenden Accounts v2 API-Referenzen. Wenn Sie eine Checkout-Integration haben, die eine gehostete Seite verwendet, leitet Stripe Ihre Kundinnen und Kunden an eine Bestätigungsseite weiter, die Sie erstellen und auf Ihrer Website hosten. Sie können die Details aus einer [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) nutzen, um Ihren Kundinnen und Kunden nach der Zahlung eine Bestellbestätigungseite anzuzeigen (mit z. B. deren Namen oder dem Zahlbetrag). ## Kundinnen/Kunden an eine Erfolgsseite weiterleiten So verwenden Sie die Details aus einer Checkout-Sitzung: 1. Ändern Sie die [success_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-success_url), um die Checkout-Sitzungs-ID an den Client zu übergeben. 1. Die Checkout Session finden Sie anhand der ID auf Ihrer Bestätigungsseite. 1. Nutzen Sie die Checkout Session, um Ihre Bestätigungsseite individuell anzupassen. > #### Webhooks sind für die Ausführung erforderlich > > Sie können sich nicht darauf verlassen, dass die Ausführung nur von der Startseite Ihres Bezahlvorgangs aus ausgelöst wird, da Ihre Kundinnen und Kunden diese Seite nicht garantiert besuchen. Zum Beispiel kann jemand erfolgreich bezahlen und seine/ihre Internetverbindung wird unterbrochen, bevor Ihre Startseite geladen wird. > > [Richten Sie einen Webhook-Ereignis-Handler](https://docs.stripe.com/checkout/fulfillment.md?payment-ui=stripe-hosted#create-payment-event-handler) ein, damit Stripe Zahlungsereignisse direkt an Ihren Server senden kann und den Client vollständig umgeht. Webhooks sind der zuverlässigste Weg, um zu bestätigen, wann Sie bezahlt werden. Wenn die Zustellung von Webhook-Ereignissen fehlschlägt, versucht Stripe [es mehrmals](https://docs.stripe.com/webhooks.md#automatic-retries). ## Ändern Sie die Erfolgs-URL (Server-side) Fügen Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` zur `success_url` hinzu, wenn Sie die Checkout-Sitzung anlegen. Bitte beachten Sie, dass es sich hierbei um eine Zeichenfolge handelt, die genau so hinzugefügt werden muss, wie sie hier erscheint. Ersetzen Sie sie nicht durch eine Chekout-Sitzungs-ID. Das geschieht automatisch, nachdem der Kunde oder die Kunde bezahlt hat und zur Bestätigungsseite weitergeleitet wurde. #### Ruby ```ruby session = Stripe::Checkout::Session.create(success_url: "http://yoursite.com/order/success?session_id={CHECKOUT_SESSION_ID}", # other options..., ) ``` ## Erfolgsseite (Server-side) erstellen Schlagen Sie die Checkout Session anhand der ID nach und erstellen Sie eine Bestätigungsseite, um die Bestelldaten anzuzeigen. Dieses Beispiel druckt den Namen des/der Kund/in: #### Ruby ```ruby # This example sets up an endpoint using the Sinatra framework. # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key = '<>' require 'sinatra' get '/order/success' dosession = Stripe::Checkout::Session.retrieve(params[:session_id]) customer = Stripe::Customer.retrieve(session.customer) "

Thanks for your order, #{customer.name}!

" end ``` ## Integration testen So bestätigen Sie, dass Ihre Weiterleitung wie erwartet funktioniert: 1. Klicken Sie auf die Bezahlschaltfläche. 1. Geben Sie den Namen der Kundin/des Kunden und andere Zahlungsdetails ein. 1. Klicken Sie auf **Bezahlen**. Wenn es funktioniert, werden Sie zur Bestätigungsseite mit Ihrer benutzerdefinierten Nachricht weitergeleitet. Wenn Sie beispielsweise die Nachricht in den Codebeispielen verwendet haben, wird auf der Bestätigungsseite folgende Nachricht angezeigt: **Danke für Ihre Bestellung, Petra Musterfrau!** # 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/custom-success-page?payment-ui=embedded-form. Wenn Ihre Connect-Plattform verwendet [kundenkonfigurierte Konten](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), benutze unser [Anleitung](https://docs.stripe.com/connect/use-accounts-as-customers.md) Ersetzen `Customer` und Ereignisreferenzen in Ihrem Code mit den entsprechenden Accounts v2 API-Referenzen. Wenn Sie eine Checkout-Integration haben, die ein integriertes Formular verwendet, können Sie anpassen, wie und ob Stripe Ihre Kundinnen/Kunden nach Abschluss der Zahlung weiterleitet. Sie können Stripe anweisen, Kundinnen/Kunden immer oder nur für einige Zahlungsmethoden weiterzuleiten oder Weiterleitungen vollständig zu deaktivieren. Um Weiterleitungen einzurichten, geben Sie die Rückgabeseite im [Parameter](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) `return_url` an. Alternativ können Sie: - [Kundinnen/Kunden nur weiterleiten, wenn die Zahlungsmethode dies erfordert](https://docs.stripe.com/payments/checkout/custom-success-page.md#redirect-if-required) (zum Beispiel eine Bankautorisierungsseite für eine Lastschriftmethode). - Keine Rückgabeseite verwenden und [auf Weiterleitung basierte Zahlungsmethoden deaktivieren](https://docs.stripe.com/payments/checkout/custom-success-page.md#disable-redirects). > #### Webhooks sind für die Ausführung erforderlich > > Sie können sich nicht darauf verlassen, dass die Ausführung nur von der Startseite Ihres Bezahlvorgangs aus ausgelöst wird, da Ihre Kundinnen und Kunden diese Seite nicht garantiert besuchen. Zum Beispiel kann jemand erfolgreich bezahlen und seine/ihre Internetverbindung wird unterbrochen, bevor Ihre Startseite geladen wird. > > [Richten Sie einen Webhook-Ereignis-Handler](https://docs.stripe.com/checkout/fulfillment.md?payment-ui=embedded-form#create-payment-event-handler) ein, damit Stripe Zahlungsereignisse direkt an Ihren Server senden kann und den Client vollständig umgeht. Webhooks sind der zuverlässigste Weg, um zu bestätigen, wann Sie bezahlt werden. Wenn die Zustellung von Webhook-Ereignissen fehlschlägt, versucht Stripe [es mehrmals](https://docs.stripe.com/webhooks.md#automatic-retries). ## Kundinnen/Kunden an eine Rückgabeseite weiterleiten Wenn Sie die [Checkout-Sitzung](https://docs.stripe.com/api/checkout/sessions.md) erstellen, geben Sie die URL der Rückgabeseite im [Parameter](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) `return_url` an. Fügen Sie die Vorlagenvariable `{CHECKOUT_SESSION_ID}` in die URL ein. Wenn Checkout einen Kunden/eine Kundin weiterleitet, wird die Variable durch die tatsächliche Checkout-Sitzungs-ID ersetzt. Rufen Sie beim Rendern Ihrer Rückgabeseite den Status der Checkout-Sitzung mit der Checkout-Sitzungs-ID in der URL ab. ```javascript app.get('/session_status', async (req, res) => { const session = await stripe.checkout.sessions.retrieve(req.query.session_id); const customer = await stripe.customers.retrieve(session.customer); res.send({ status: session.status, payment_status: session.payment_status, customer_email: customer.email }); }); ``` 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 nochmals versuchen können. ```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. ### Weiterleitung nur für auf Weiterleitung basierende Zahlungsmethoden durchführen Wenn Sie Kundinnen/Kunden nach Zahlungen, für die keine Weiterleitung erforderlich ist, nicht weiterleiten möchten, legen Sie [redirect_on_completion](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-redirect_on_completion) auf `if_required` fest. Dadurch werden nur Kundinnen/Kunden weitergeleitet, die mit auf Weiterleitung basierenden Zahlungsmethoden bezahlen. Bei Kartenzahlungen zeigt Checkout einen Standard-Erfolgszustand an, anstatt eine Weiterleitung durchzuführen. Um Ihren eigenen Erfolgszustand zu verwenden, übergeben Sie einen [onComplete](https://docs.stripe.com/js/embedded_checkout/create#embedded_checkout_create-options-onComplete)-Rückruf, der die Checkout-Instanz auflöst und Ihren benutzerdefinierten Erfolgszustand anzeigt. `onComplete` wird aufgerufen, wenn die Checkout-Sitzung erfolgreich abgeschlossen wurde oder wenn das Webhook-Ereignis [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) gesendet wurde. #### HTML + JS ```javascript const stripe = Stripe('<>'); initialize(); async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Example `onComplete` callback const handleComplete = async function() { // Destroy Checkout instance checkout.destroy() // Retrieve details from server (which loads Checkout Session) const details = await retrievePurchaseDetails(); // Show custom purchase summary showPurchaseSummary(details); } const checkout = await stripe.createEmbeddedCheckoutPage({ fetchClientSecret, onComplete: handleComplete }); checkout.mount('#checkout'); } ``` #### React ```jsx const stripePromise = loadStripe('pk_test_123'); const App = ({fetchClientSecret}) => { const options = {fetchClientSecret}; const [isComplete, setIsComplete] = useState(false); const handleComplete = () => setIsComplete(true); return isComplete ? ( ) : ( ) } ``` ### Auf Weiterleitung basierende Zahlungsmethoden deaktivieren Wenn Sie keine Rückgabeseite erstellen möchten, erstellen Sie Ihre Checkout-Sitzung und legen dabei [redirect_on_completion](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-redirect_on_completion) auf `never` fest. Dadurch werden auf Weiterleitung basierende Zahlungsmethoden deaktiviert: - Wenn Sie [dynamische Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) verwenden, können Sie Zahlungsmethoden weiterhin über das Dashboard verwalten. Die Zahlungsmethoden, für die Weiterleitungen erforderlich sind, können jedoch nicht ausgewählt werden. - Wenn Sie Zahlungsmethoden manuell mit [payment_method_types](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_types) festlegen, können Sie keine auf Weiterleitung basierenden Zahlungsmethoden angeben. Die Einstellung `„redirect_on_completion: never` hebt die Anforderung für `return_url` nicht auf. Bei diesen Sitzungen rendert Checkout einen Standard-Erfolgszustand, anstatt eine Weiterleitung durchzuführen. Sie können Ihren eigenen Erfolgszustand verwenden, indem Sie einen [onComplete](https://docs.stripe.com/js/embedded_checkout/create#embedded_checkout_create-options-onComplete)-Rückruf übergeben, der die Checkout-Instanz löscht und Ihren benutzerdefinierten Erfolgszustand rendert. `onComplete` wird aufgerufen, wenn die Checkout-Sitzung erfolgreich abgeschlossen wurde oder wenn das Webhook-Ereignis [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) gesendet wurde. #### HTML + JS ```javascript const stripe = Stripe('<>'); initialize(); async function initialize() { const fetchClientSecret = async () => { const response = await fetch("/create-checkout-session", { method: "POST", }); const { clientSecret } = await response.json(); return clientSecret; }; // Example `onComplete` callback const handleComplete = async function() { // Destroy Checkout instance checkout.destroy() // Retrieve details from server (which loads Checkout Session) const details = await retrievePurchaseDetails(); // Show custom purchase summary showPurchaseSummary(details); } const checkout = await stripe.createEmbeddedCheckoutPage({ fetchClientSecret, onComplete: handleComplete }); checkout.mount('#checkout'); } ``` #### React ```jsx const stripePromise = loadStripe('pk_test_123'); const App = ({fetchClientSecret}) => { const options = {fetchClientSecret}; const [isComplete, setIsComplete] = useState(false); const handleComplete = () => setIsComplete(true); return isComplete ? ( ) : ( ) } ```