# Personalizza il comportamento del reindirizzamento Mostra una pagina di conferma con le informazioni relative all'ordine del cliente. # Hosted page > This is a Hosted page 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. Se la tua piattaforma Connect utilizza [account configurati dal cliente](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), utilizza la nostra [guida](https://docs.stripe.com/connect/use-accounts-as-customers.md) per sostituire i riferimenti `Customer` ed eventi nel tuo codice con la documentazione di riferimento dell’API Accounts v2 equivalente. If you have a Checkout integration that uses a hosted page, Stripe redirects your customer to a success page that you create and host on your site. You can use the details from a [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md) to display an order confirmation page for your customer (for example, their name or payment amount) after the payment. ## Reindirizza i clienti a una pagina di conferma Per utilizzare i dettagli di una sessione di Checkout: 1. Modifica il parametro [success_url](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-success_url) per specificare l’ID della sessione di Checkout lato client. 1. Cerca la sessione di Checkout utilizzando l’ID indicato nella pagina di conferma. 1. Utilizza la sessione di Checkout per personalizzare quanto visualizzato nella pagina di conferma. > #### I webhook sono necessari per l'evasione (degli ordini) > > Non puoi fare affidamento sull’attivazione dell’evasione dell’ordine solo dalla pagina di destinazione del completamento della transazione, perché non è garantito che i tuoi clienti visitino quella pagina. Ad esempio, qualcuno potrebbe effettuare il pagamento con successo e poi perdere la connessione a Internet prima che la tua pagina di destinazione venga caricata. > > [Configura un gestore di eventi webhook](https://docs.stripe.com/checkout/fulfillment.md?payment-ui=stripe-hosted#create-payment-event-handler) in modo che Stripe possa inviare gli eventi di pagamento direttamente al tuo server, bypassando completamente il client. I webhook rappresentano il metodo più affidabile per confermare quando ricevi un pagamento. Se la consegna dell’evento webhook non va a buon fine, Stripe [riprova più volte](https://docs.stripe.com/webhooks.md#automatic-retries). ## Modifica l’URL della pagina di conferma (Server-side) Aggiungi la variabile del modello `{CHECKOUT_SESSION_ID}` a `success_url` quando crei la sessione di Checkout. Tieni presente che si tratta di una stringa letterale e deve essere aggiunta esattamente come la vedi qui. Non sostituirla con un ID della sessione di Checkout: ciò avviene automaticamente dopo che il cliente ha effettuato il pagamento ed è stato reindirizzato alla pagina di conferma. #### Ruby ```ruby session = Stripe::Checkout::Session.create(success_url: "http://yoursite.com/order/success?session_id={CHECKOUT_SESSION_ID}", # other options..., ) ``` ## Crea la pagina di conferma (Server-side) Cerca la sessione di Checkout utilizzando l’ID e crea una pagina di conferma per visualizzare le informazioni relative all’ordine. Questo esempio stampa il nome del cliente: #### 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 ``` ## Testa l’integrazione Per confermare che il reindirizzamento funziona come previsto: 1. Fai clic sul pulsante di pagamento 1. Inserisci il nome del cliente e altri dettagli di pagamento. 1. Fai clic su **Paga**. Se funziona, verrai reindirizzato alla pagina di conferma con il tuo messaggio personalizzato. Ad esempio, se hai utilizzato il messaggio negli esempi di codice, la pagina di conferma mostra questo messaggio: **Grazie per il tuo ordine, Greta Viti!** # Embedded page > This is a Embedded page 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. Se la tua piattaforma Connect utilizza [account configurati dal cliente](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer), utilizza la nostra [guida](https://docs.stripe.com/connect/use-accounts-as-customers.md) per sostituire i riferimenti `Customer` ed eventi nel tuo codice con la documentazione di riferimento dell’API Accounts v2 equivalente. Se hai un’integrazione di Checkout che utilizza un modulo incorporato, puoi personalizzare come e se Stripe reindirizza i tuoi clienti dopo che hanno completato il pagamento. Puoi fare in modo che Stripe reindirizzi sempre i clienti, reindirizzi solo per alcuni metodi di pagamento o disabiliti completamente i reindirizzamenti. Per impostare i reindirizzamenti, specifica la pagina di ritorno nel [parametro](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) `return_url`. In alternativa: - [Puoi reindirizzare i clienti solo se il metodo di pagamento lo richiede](https://docs.stripe.com/payments/checkout/custom-success-page.md#redirect-if-required), ad esempio una pagina di autorizzazione bancaria per un metodo basato sull’addebito. - Non puoi utilizzare una pagina di ritorno e [disabilitare i metodi di pagamento basati sul reindirizzamento](https://docs.stripe.com/payments/checkout/custom-success-page.md#disable-redirects). > #### I webhook sono necessari per l'evasione (degli ordini) > > Non puoi fare affidamento sull’attivazione dell’evasione dell’ordine solo dalla pagina di destinazione del completamento della transazione, perché non è garantito che i tuoi clienti visitino quella pagina. Ad esempio, qualcuno potrebbe effettuare il pagamento con successo e poi perdere la connessione a Internet prima che la tua pagina di destinazione venga caricata. > > [Configura un gestore di eventi webhook](https://docs.stripe.com/checkout/fulfillment.md?payment-ui=embedded-form#create-payment-event-handler) in modo che Stripe possa inviare gli eventi di pagamento direttamente al tuo server, bypassando completamente il client. I webhook rappresentano il metodo più affidabile per confermare quando ricevi un pagamento. Se la consegna dell’evento webhook non va a buon fine, Stripe [riprova più volte](https://docs.stripe.com/webhooks.md#automatic-retries). ## Reindirizzare i clienti a una pagina di ritorno Quando crei la [sessione di checkout](https://docs.stripe.com/api/checkout/sessions.md), specifica l’URL della pagina di ritorno nel [parametro](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-return_url) `return_url`. Includi la variabile del modello `{CHECKOUT_SESSION_ID}` nell’URL. Quando Checkout reindirizza un cliente, sostituisce la variabile con l’ID effettivo della sessione di Checkout. Durante il rendering della pagina di ritorno, recupera lo stato della sessione di pagamento utilizzando l’ID della sessione di pagamento nell’URL. ```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 }); }); ``` Gestisci il risultato in base allo stato della sessione come segue: - `complete`: il pagamento è andato a buon fine. Utilizza le informazioni della sessione di Checkout per visualizzare una pagina di conferma. - `open`: il pagamento non è riuscito o è stato annullato. Rimonta Checkout in modo che il cliente possa riprovare. ```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 } ``` ## Metodi di pagamento con reindirizzamento Durante il pagamento, alcuni metodi di pagamento reindirizzano il cliente a una pagina intermedia, ad esempio una pagina di autorizzazione della banca. Una volta completata la pagina, Stripe li reindirizza alla pagina di ritorno. ### Reindirizzare solo per i metodi di pagamento con reindirizzamento Se vuoi impedire il reindirizzamento dei clienti dopo i pagamenti che non richiedono un reindirizzamento, imposta [redirect_on_completion](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-redirect_on_completion) su `if_required`. In questo modo vengono reindirizzati solo i clienti che utilizzano metodi di pagamento basati sul reindirizzamento. Per i pagamenti con carta, Checkout visualizza uno stato di operazione riuscita predefinito anziché il reindirizzamento. Per utilizzare il tuo stato di operazione riuscita, specifica un callback [onComplete](https://docs.stripe.com/js/embedded_checkout/init#embedded_checkout_init-options-onComplete) che distrugge l’istanza di Checkout e visualizza il tuo stato di operazione riuscita personalizzato. `onComplete` viene chiamato quando la sessione di Checkout viene completata correttamente o quando viene inviato l’evento webhook [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed). #### 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.initEmbeddedCheckout({ 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 ? ( ) : ( ) } ``` ### Disabilitare i metodi di pagamento con reindirizzamento Se non vuoi creare una pagina di ritorno, crea la tua sessione di checkout con [redirect_on_completion](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-redirect_on_completion) impostato su `never`. I metodi di pagamento con reindirizzamento vengono disabilitati nel seguente modo: - Se utilizzi [metodi di pagamento dinamici](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), puoi comunque gestire i metodi di pagamento dalla Dashboard, ma i metodi di pagamento che richiedono reindirizzamenti non sono idonei. - Se specifichi manualmente i metodi di pagamento con [payment_method_types](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-payment_method_types), non puoi includere alcun metodo di pagamento con reindirizzamento. L’impostazione `redirect_on_completion: never` rimuove il requisito `return_url`. Per queste sessioni, Checkout visualizza uno stato di operazione riuscita predefinito anziché il reindirizzamento. Puoi utilizzare il tuo stato di operazione riuscita specificando un callback [onComplete](https://docs.stripe.com/js/embedded_checkout/init#embedded_checkout_init-options-onComplete) che distrugge l’istanza di Checkout e visualizza il tuo stato di operazione riuscita personalizzato. `onComplete` viene chiamato quando la sessione di Checkout viene completata correttamente o quando viene inviato l’evento webhook [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed). #### 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.initEmbeddedCheckout({ 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 ? ( ) : ( ) } ```