Vai al contenuto principale

Panoramica

Il checkout inline ti consente di creare esperienze di checkout completamente integrate che si fondono perfettamente con il tuo sito web o applicazione. A differenza del checkout overlay, che si apre come un modale sopra la tua pagina, il checkout inline incorpora il modulo di pagamento direttamente nel layout della tua pagina. Utilizzando il checkout inline, puoi:
  • Creare esperienze di checkout completamente integrate con la tua app o sito web
  • Consentire a Dodo Payments di catturare in modo sicuro le informazioni sui clienti e sui pagamenti in un frame di checkout ottimizzato
  • Visualizzare articoli, totali e altre informazioni da Dodo Payments sulla tua pagina
  • Utilizzare metodi e eventi SDK per costruire esperienze di checkout avanzate
Immagine di copertina del checkout inline

Come Funziona

Il checkout inline funziona incorporando un frame sicuro di Dodo Payments nel tuo sito web o app. Il frame di checkout gestisce la raccolta delle informazioni sui clienti e la cattura dei dettagli di pagamento. La tua pagina visualizza l’elenco degli articoli, i totali e le opzioni per modificare ciò che è presente nel checkout. L’SDK consente alla tua pagina e al frame di checkout di interagire tra loro. Dodo Payments crea automaticamente un abbonamento quando un checkout viene completato, pronto per essere attivato da te.
Il frame del checkout inline gestisce in modo sicuro tutte le informazioni di pagamento sensibili, garantendo la conformità PCI senza certificazioni aggiuntive da parte tua.

Cosa Rende un Buon Checkout Inline?

È importante che i clienti sappiano da chi stanno acquistando, cosa stanno acquistando e quanto stanno pagando. Per costruire un checkout inline che sia conforme e ottimizzato per la conversione, la tua implementazione deve includere:
Esempio di checkout inline con gli elementi richiesti etichettati
  1. Informazioni ricorrenti: Se ricorrente, con quale frequenza si ripete e il totale da pagare al rinnovo. Se è una prova, quanto dura la prova.
  2. Descrizioni degli articoli: Una descrizione di ciò che viene acquistato.
  3. Totali delle transazioni: Totali delle transazioni, inclusi subtotale, totale delle tasse e totale generale. Assicurati di includere anche la valuta.
  4. Footer di Dodo Payments: L’intero frame di checkout inline, incluso il footer del checkout che contiene informazioni su Dodo Payments, i nostri termini di vendita e la nostra politica sulla privacy.
  5. Politica di rimborso: Un link alla tua politica di rimborso, se differente dalla politica standard di rimborso di Dodo Payments.
Mostra sempre l’intero frame del checkout inline, compreso il footer. Rimuovere o nascondere le informazioni legali viola i requisiti di conformità.

Percorso del Cliente

Il flusso di checkout è determinato dalla configurazione della tua sessione di checkout. A seconda di come configuri la sessione di checkout, i clienti vivranno un checkout che può presentare tutte le informazioni su una singola pagina o attraverso più passaggi.
1

Customer opens checkout

Puoi aprire il checkout inline passando articoli o una transazione esistente. Usa l’SDK per mostrare e aggiornare le informazioni sulla pagina, e i metodi dell’SDK per aggiornare gli articoli in base all’interazione del cliente.Pagina iniziale del checkout con elenco articoli e modulo di pagamento
2

Customer enters their details

Il checkout inline chiede prima ai clienti di inserire il proprio indirizzo email, selezionare il proprio paese e (dove richiesto) inserire il proprio codice postale. Questo passaggio raccoglie tutte le informazioni necessarie per determinare le tasse e le opzioni di pagamento disponibili.Puoi precompilare i dettagli del cliente e presentare indirizzi salvati per semplificare l’esperienza.
3

Customer selects payment method

Dopo aver inserito i propri dettagli, ai clienti vengono presentati i metodi di pagamento disponibili e il modulo di pagamento. Le opzioni possono includere carta di credito o debito, PayPal, Apple Pay, Google Pay e altri metodi di pagamento locali in base alla loro posizione.Visualizza i metodi di pagamento salvati se disponibili per accelerare il checkout.Metodi di pagamento disponibili e modulo dettagli carta
4

Checkout completed

Dodo Payments instrada ogni pagamento al miglior acquirente per quella vendita per ottenere la migliore possibilità di successo. I clienti entrano in un flusso di successo che puoi costruire.Schermata di successo con segno di conferma
5

Dodo Payments creates subscription

Dodo Payments crea automaticamente un abbonamento per il cliente, pronto per essere attivato da te. Il metodo di pagamento utilizzato dal cliente viene mantenuto in archivio per i rinnovi o le modifiche all’abbonamento.Abbonamento creato con notifica webhook

Inizio Veloce

Inizia con il Checkout Inline di Dodo Payments in poche righe di codice:
import { DodoPayments } from "dodopayments-checkout";

// Initialize the SDK for inline mode
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    console.log("Checkout event:", event);
  },
});

// Open checkout in a specific container
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout" // ID of the container element
});
Assicurati di avere un elemento contenitore con il corrispondente id sulla tua pagina: <div id="dodo-inline-checkout"></div>.

Guida all’Integrazione Passo-Passo

1

Install the SDK

Installa l’SDK di Dodo Payments Checkout:
npm install dodopayments-checkout
2

Initialize the SDK for Inline Display

Inizializza l’SDK e specifica displayType: 'inline'. Dovresti anche ascoltare l’evento checkout.breakdown per aggiornare la tua UI con i calcoli in tempo reale di tasse e totali.
import { DodoPayments } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    if (event.event_type === "checkout.breakdown") {
      const breakdown = event.data?.message;
      // Update your UI with breakdown.subTotal, breakdown.tax, breakdown.total, etc.
    }
  },
});
3

Create a Container Element

Aggiungi un elemento al tuo HTML dove il frame del checkout sarà iniettato:
<div id="dodo-inline-checkout"></div>
4

Open the Checkout

Richiama DodoPayments.Checkout.open() con checkoutUrl e elementId del tuo contenitore:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
5

Test Your Integration

  1. Avvia il tuo server di sviluppo:
npm run dev
  1. Testa il flusso di checkout:
    • Inserisci i tuoi dettagli email e indirizzo nel frame inline.
    • Verifica che il tuo riepilogo ordine personalizzato si aggiorni in tempo reale.
    • Testa il flusso di pagamento utilizzando credenziali di test.
    • Conferma che i reindirizzamenti funzionino correttamente.
Dovresti vedere eventi checkout.breakdown registrati nella console del browser se hai aggiunto un console log nel callback onEvent.
6

Go Live

Quando sei pronto per la produzione:
  1. Cambia la modalità in 'live':
DodoPayments.Initialize({
  mode: "live",
  displayType: "inline",
  onEvent: (event) => {
    // Handle events
  }
});
  1. Aggiorna i tuoi URL di checkout per utilizzare sessioni di checkout live dal tuo backend.
  2. Testa il flusso completo in produzione.

Esempio Completo in React

Questo esempio dimostra come implementare un riepilogo ordini personalizzato accanto al checkout inline, mantenendoli sincronizzati tramite l’evento checkout.breakdown.
"use client";

import { useEffect, useState } from 'react';
import { DodoPayments, CheckoutBreakdownData } from 'dodopayments-checkout';

export default function CheckoutPage() {
  const [breakdown, setBreakdown] = useState<Partial<CheckoutBreakdownData>>({});

  useEffect(() => {
    // 1. Initialize the SDK
    DodoPayments.Initialize({
      mode: 'test',
      displayType: 'inline',
      onEvent: (event) => {
        // 2. Listen for the 'checkout.breakdown' event
        if (event.event_type === "checkout.breakdown") {
          const message = event.data?.message as CheckoutBreakdownData;
          if (message) setBreakdown(message);
        }
      }
    });

    // 3. Open the checkout in the specified container
    DodoPayments.Checkout.open({
      checkoutUrl: 'https://test.dodopayments.com/session/cks_123',
      elementId: 'dodo-inline-checkout'
    });

    return () => DodoPayments.Checkout.close();
  }, []);

  const format = (amt: number | null | undefined, curr: string | null | undefined) => 
    amt != null && curr ? `${curr} ${(amt/100).toFixed(2)}` : '0.00';

  const currency = breakdown.currency ?? breakdown.finalTotalCurrency ?? '';

  return (
    <div className="flex flex-col md:flex-row min-h-screen">
      {/* Left Side - Checkout Form */}
      <div className="w-full md:w-1/2 flex items-center">
        <div id="dodo-inline-checkout" className='w-full' />
      </div>

      {/* Right Side - Custom Order Summary */}
      <div className="w-full md:w-1/2 p-8 bg-gray-50">
        <h2 className="text-2xl font-bold mb-4">Order Summary</h2>
        <div className="space-y-2">
          {breakdown.subTotal && (
            <div className="flex justify-between">
              <span>Subtotal</span>
              <span>{format(breakdown.subTotal, currency)}</span>
            </div>
          )}
          {breakdown.discount && (
            <div className="flex justify-between">
              <span>Discount</span>
              <span>{format(breakdown.discount, currency)}</span>
            </div>
          )}
          {breakdown.tax != null && (
            <div className="flex justify-between">
              <span>Tax</span>
              <span>{format(breakdown.tax, currency)}</span>
            </div>
          )}
          <hr />
          {(breakdown.finalTotal ?? breakdown.total) && (
            <div className="flex justify-between font-bold text-xl">
              <span>Total</span>
              <span>{format(breakdown.finalTotal ?? breakdown.total, breakdown.finalTotalCurrency ?? currency)}</span>
            </div>
          )}
        </div>
      </div>
    </div>
  );
}

Riferimento API

Configurazione

Opzioni di Inizializzazione

interface InitializeOptions {
  mode: "test" | "live";
  displayType: "inline"; // Required for inline checkout
  onEvent: (event: CheckoutEvent) => void;
}
OpzioneTipoObbligatorioDescrizione
mode"test" | "live"Modalità dell’ambiente.
displayType"inline" | "overlay"Deve essere impostato su "inline" per incorporare il checkout.
onEventfunctionFunzione di callback per gestire gli eventi di checkout.

Opzioni di Checkout

export type FontSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
export type FontWeight = "normal" | "medium" | "bold" | "extraBold";

interface CheckoutOptions {
  checkoutUrl: string;
  elementId: string; // Required for inline checkout
  options?: {
    showTimer?: boolean;
    showSecurityBadge?: boolean;
    manualRedirect?: boolean;
    payButtonText?: string;
    fontSize?: FontSize;
    fontWeight?: FontWeight;
  };
}
OptionTypeRequiredDescription
checkoutUrlstringYesCheckout session URL.
elementIdstringYesThe id of the DOM element where the checkout should be rendered.
options.showTimerbooleanNoShow or hide the checkout timer. Defaults to true. When disabled, you will receive the checkout.link_expired event when the session expires.
options.showSecurityBadgebooleanNoShow or hide the security badge. Defaults to true.
options.manualRedirectbooleanNoWhen enabled, the checkout will not automatically redirect after completion. Instead, you will receive checkout.status and checkout.redirect_requested events to handle the redirect yourself.
options.payButtonTextstringNoCustom text to display on the pay button.
options.fontSizeFontSizeNoGlobal font size for the checkout.
options.fontWeightFontWeightNoGlobal font weight for the checkout.

Metodi

Apri Checkout

Apre il frame di checkout nel contenitore specificato.
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
Puoi anche passare opzioni aggiuntive per personalizzare il comportamento del checkout:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout",
  options: {
    showTimer: false,
    showSecurityBadge: false,
    manualRedirect: true,
    payButtonText: "Pay Now",
  },
});
Quando usi manualRedirect, gestisci il completamento del checkout nel tuo callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    if (event.event_type === "checkout.status") {
      const status = event.data?.message?.status;
      // Handle status: "succeeded", "failed", or "processing"
    }
    if (event.event_type === "checkout.redirect_requested") {
      const redirectUrl = event.data?.message?.redirect_to;
      // Redirect the customer manually
      window.location.href = redirectUrl;
    }
    if (event.event_type === "checkout.link_expired") {
      // Handle expired checkout session
    }
  },
});

Chiudi Checkout

Rimuove programmaticamente il frame di checkout e pulisce i listener degli eventi.
DodoPayments.Checkout.close();

Controlla Stato

Restituisce se il frame di checkout è attualmente iniettato.
const isOpen = DodoPayments.Checkout.isOpen();
// Returns: boolean

Eventi

L’SDK fornisce eventi in tempo reale tramite il callback onEvent. Per il checkout inline, checkout.breakdown è particolarmente utile per sincronizzare la tua UI.
Tipo di eventoDescrizione
checkout.openedIl frame del checkout è stato caricato.
checkout.form_readyIl modulo di checkout è pronto per ricevere input dell’utente. Utile per nascondere gli stati di caricamento e mostrare l’interfaccia del checkout.
checkout.breakdownGenerato quando prezzi, tasse o sconti vengono aggiornati.
checkout.customer_details_submittedI dati del cliente sono stati inviati.
checkout.pay_button_clickedGenerato quando il cliente clicca il pulsante di pagamento. Utile per analisi e tracciamento dei funnel di conversione.
checkout.redirectIl checkout effettuerà un redirect (ad esempio verso una pagina bancaria).
checkout.errorSi è verificato un errore durante il checkout.
checkout.link_expiredGenerato quando la sessione di checkout scade. Ricevuto solo quando showTimer è impostato su false.
checkout.statusGenerato quando manualRedirect è abilitato. Contiene lo stato del checkout (succeeded, failed o processing).
checkout.redirect_requestedGenerato quando manualRedirect è abilitato. Contiene l’URL verso cui reindirizzare il cliente.

Dati di Breakdown del Checkout

L’evento checkout.breakdown fornisce i seguenti dati:
interface CheckoutBreakdownData {
  subTotal?: number;          // Amount in cents
  discount?: number;         // Amount in cents
  tax?: number;              // Amount in cents
  total?: number;            // Amount in cents
  currency?: string;         // e.g., "USD"
  finalTotal?: number;       // Final amount including adjustments
  finalTotalCurrency?: string; // Currency for the final total
}

Dati dell’Evento di Stato del Checkout

Quando manualRedirect è abilitato, ricevi l’evento checkout.status con i seguenti dati:
interface CheckoutStatusEventData {
  message: {
    status?: "succeeded" | "failed" | "processing";
  };
}

Dati dell’Evento di Reindirizzamento del Checkout Richiesto

Quando manualRedirect è abilitato, ricevi l’evento checkout.redirect_requested con i seguenti dati:
interface CheckoutRedirectRequestedEventData {
  message: {
    redirect_to?: string;
  };
}

Comprendere l’Evento di Breakdown

L’evento checkout.breakdown è il metodo principale per mantenere sincronizzata l’interfaccia della tua applicazione con lo stato del checkout Dodo Payments. Quando si attiva:
  • All’inizializzazione: Immediatamente dopo che il frame di checkout è stato caricato e pronto.
  • Al cambio di indirizzo: Ogni volta che il cliente seleziona un paese o inserisce un codice postale che comporta un ricalcolo delle tasse.
Dettagli dei Campi:
CampoDescrizione
subTotalLa somma di tutti gli articoli nella sessione prima che vengano applicati sconti o tasse.
discountIl valore totale di tutti gli sconti applicati.
taxL’importo delle tasse calcolate. In modalità inline, questo valore si aggiorna dinamicamente mentre l’utente interagisce con i campi dell’indirizzo.
totalIl risultato matematico di subTotal - discount + tax nella valuta base della sessione.
currencyIl codice valuta ISO (ad esempio "USD") per i valori standard di subtotale, sconto e tasse.
finalTotalL’importo effettivamente addebitato al cliente. Può includere rettifiche di cambio valuta o commissioni dei metodi di pagamento locali che non fanno parte della suddivisione base dei prezzi.
finalTotalCurrencyLa valuta in cui il cliente sta realmente pagando. Può differire da currency se è attiva la parità del potere d’acquisto o la conversione in valuta locale.
Consigli chiave per l’integrazione:
  1. Formattazione della valuta: i prezzi vengono sempre restituiti come interi nell’unità monetaria più piccola (ad esempio centesimi per USD, yen per JPY). Per visualizzarli, dividili per 100 (o la potenza di 10 appropriata) oppure usa una libreria di formattazione come Intl.NumberFormat.
  2. Gestione degli stati iniziali: quando il checkout viene caricato per la prima volta, tax e discount possono essere 0 o null finché l’utente non fornisce le informazioni di fatturazione o non applica un codice. La tua UI dovrebbe gestire questi stati in modo elegante (ad esempio mostrandone un trattino o nascondendo la riga).
  3. “Totale finale” vs “Totale”: mentre total ti fornisce il calcolo standard del prezzo, finalTotal è la fonte di verità per la transazione. Se finalTotal è presente, riflette esattamente ciò che verrà addebitato sulla carta del cliente, incluse eventuali rettifiche dinamiche.
  4. Feedback in tempo reale: usa il campo tax per mostrare agli utenti che le tasse vengono calcolate in tempo reale. Ciò conferisce una sensazione “live” alla tua pagina di checkout e riduce l’attrito durante la compilazione dell’indirizzo.

Opzioni di Implementazione

Installazione tramite Package Manager

Installa tramite npm, yarn o pnpm come mostrato nella Guida all’Integrazione Passo-Passo.

Implementazione CDN

Per un’integrazione rapida senza un passaggio di build, puoi utilizzare il nostro CDN:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dodo Payments Inline Checkout</title>
    
    <!-- Load DodoPayments -->
    <script src="https://cdn.jsdelivr.net/npm/dodopayments-checkout@latest/dist/index.js"></script>
    <script>
        // Initialize the SDK
        DodoPaymentsCheckout.DodoPayments.Initialize({
            mode: "test",
            displayType: "inline",
            onEvent: (event) => {
                console.log('Checkout event:', event);
            }
        });
    </script>
</head>
<body>
    <div id="dodo-inline-checkout"></div>

    <script>
        // Open the checkout
        DodoPaymentsCheckout.DodoPayments.Checkout.open({
            checkoutUrl: "https://test.dodopayments.com/session/cks_123",
            elementId: "dodo-inline-checkout"
        });
    </script>
</body>
</html>

Aggiorna metodo di pagamento

L’inline checkout supporta l’aggiornamento del metodo di pagamento per le sottoscrizioni. Quando un cliente deve aggiornare il metodo di pagamento — sia per una sottoscrizione attiva sia per riattivare una sottoscrizione in sospeso — puoi rendere disponibile il flusso di aggiornamento direttamente nella struttura della tua pagina.

Come funziona

  1. Chiama l’Update Payment Method API per ottenere un payment_link:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});
  1. Passa il payment_link restituito come checkoutUrl per aprire l’inline checkout:
DodoPayments.Checkout.open({
  checkoutUrl: response.payment_link,
  elementId: "dodo-inline-checkout"
});
Il frame inline visualizza solo il modulo per la raccolta del metodo di pagamento. I clienti possono inserire nuovi dati della carta o selezionare un metodo salvato senza lasciare la tua pagina.

Per le sottoscrizioni in sospeso

Quando aggiorni il metodo di pagamento per una sottoscrizione in stato on_hold, Dodo Payments crea automaticamente un addebito per eventuali importi residui. Monitora i webhook payment.succeeded e subscription.active per confermare la riattivazione.
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

if (response.payment_id) {
  // Charge created for remaining dues
  // Open inline checkout for payment collection
  DodoPayments.Checkout.open({
    checkoutUrl: response.payment_link,
    elementId: "dodo-inline-checkout"
  });
}
Puoi anche usare un metodo di pagamento salvato esistente invece di raccogliere nuovi dati passando type: 'existing' con un payment_method_id all’Update Payment Method API.

Gestione degli errori

L’SDK fornisce informazioni dettagliate sugli errori tramite il sistema di eventi. Implementa sempre una gestione adeguata degli errori nel tuo callback onEvent:
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event: CheckoutEvent) => {
    if (event.event_type === "checkout.error") {
      console.error("Checkout error:", event.data?.message);
      // Handle error appropriately
    }
  }
});
Gestisci sempre l’evento checkout.error per offrire una buona esperienza utente quando si verificano problemi.

Best Practice

  1. Design responsivo: Assicurati che l’elemento contenitore abbia larghezza e altezza sufficienti. L’iframe si espanderà tipicamente per riempire il contenitore.
  2. Sincronizzazione: Usa l’evento checkout.breakdown per mantenere il tuo riepilogo dell’ordine o le tabelle dei prezzi personalizzati sincronizzati con ciò che l’utente vede nel frame del checkout.
  3. Stati scheletro: Mostra un indicatore di caricamento nel contenitore finché non viene attivato l’evento checkout.opened.
  4. Pulizia: Chiama DodoPayments.Checkout.close() quando il tuo componente viene smontato per rimuovere l’iframe e i listener degli eventi.
Per implementazioni in modalità scura, si consiglia di usare #0d0d0d come colore di sfondo per un’integrazione visiva ottimale con il frame dell’inline checkout.

Validazione dello stato di pagamento

Non fare affidamento esclusivamente sugli eventi dell’inline checkout per determinare il successo o il fallimento del pagamento. Implementa sempre la validazione lato server tramite webhook e/o polling.

Perché la validazione lato server è essenziale

Sebbene eventi dell’inline checkout come checkout.status forniscano feedback in tempo reale, non dovrebbero essere la tua unica fonte di verità per lo stato di pagamento. Problemi di rete, crash del browser o utenti che chiudono la pagina possono far perdere eventi. Per garantire una validazione affidabile del pagamento:
  1. Il tuo server dovrebbe ascoltare gli eventi webhook - Dodo Payments invia webhook per i cambiamenti di stato dei pagamenti
  2. Implementa un meccanismo di polling - Il tuo frontend dovrebbe interrogare il server per aggiornamenti di stato
  3. Combina entrambi gli approcci - Usa i webhook come fonte principale e il polling come fallback

Architettura consigliata

Passaggi di implementazione

1. Ascolta gli eventi del checkout - Quando l’utente clicca su paga, inizia a prepararti per verificare lo stato:
onEvent: (event) => {
  if (event.event_type === 'checkout.status') {
    // Start polling your server for confirmed status
    startPolling();
  }
}
2. Interroga il tuo server - Crea un endpoint che controlli il tuo database per lo stato del pagamento (aggiornato dai webhook):
// Poll every 2 seconds until status is confirmed
const interval = setInterval(async () => {
  const { status } = await fetch(`/api/payments/${paymentId}/status`).then(r => r.json());
  if (status === 'succeeded' || status === 'failed') {
    clearInterval(interval);
    handlePaymentResult(status);
  }
}, 2000);
3. Gestisci i webhook lato server - Aggiorna il tuo database quando Dodo invia i webhook payment.succeeded o payment.failed. Consulta la nostra documentazione sui webhook per i dettagli.

Gestione dei redirect (3DS, Google Pay, UPI)

Quando si usa manualRedirect: true, alcuni metodi di pagamento richiedono di reindirizzare l’utente fuori dalla tua pagina per l’autenticazione:
  • 3D Secure (3DS) - Autenticazione della carta
  • Google Pay - Autenticazione del portafoglio in alcuni flussi
  • UPI - Metodi di pagamento indiani con redirect
Quando è richiesto un redirect, riceverai l’evento checkout.redirect_requested. Reindirizza l’utente all’URL fornito:
if (event.event_type === 'checkout.redirect_requested') {
  const redirectUrl = event.data?.message?.redirect_to;
  // Save payment ID before redirect, then redirect
  sessionStorage.setItem('pendingPaymentId', paymentId);
  window.location.href = redirectUrl;
}
Dopo il completamento dell’autenticazione (successo o fallimento), l’utente torna alla tua pagina. Non presumere il successo solo perché l’utente è tornato. Invece:
  1. Verifica se l’utente sta tornando da un redirect (ad es. tramite sessionStorage)
  2. Inizia a interrogare il tuo server per lo stato di pagamento confermato
  3. Mostra uno stato “Verifica pagamento…” durante il polling
  4. Visualizza l’interfaccia di successo/fallimento in base allo stato confermato dal server
Verifica sempre lo stato del pagamento lato server dopo i redirect. Il ritorno dell’utente alla tua pagina indica solo che l’autenticazione è terminata—non indica se il pagamento è andato a buon fine o meno.

Risoluzione dei problemi

  • Verifica che elementId corrisponda a id di un div che esiste effettivamente nel DOM.
  • Assicurati che displayType: 'inline' sia stato passato a Initialize.
  • Controlla che checkoutUrl sia valido.
  • Assicurati di ascoltare l’evento checkout.breakdown.
  • Le tasse vengono calcolate solo dopo che l’utente inserisce un paese e un codice postale validi nel frame del checkout.

Abilitare i portafogli digitali

Per informazioni dettagliate su come configurare Apple Pay, Google Pay e altri portafogli digitali, consulta la pagina Portafogli digitali.

Configurazione rapida per Apple Pay

1

Download domain association file

2

Request activation

Invia un’e-mail a support@dodopayments.com con l’URL del tuo dominio di produzione e richiedi l’attivazione di Apple Pay.
3

Test after confirmation

Una volta confermato, verifica che Apple Pay compaia nel checkout e testa il flusso completo.
Apple Pay richiede la verifica del dominio prima di essere disponibile in produzione. Contatta il supporto prima di andare in produzione se prevedi di offrire Apple Pay.

Compatibilità dei browser

L’SDK Dodo Payments Checkout supporta i seguenti browser:
  • Chrome (ultima versione)
  • Firefox (ultima versione)
  • Safari (ultima versione)
  • Edge (ultima versione)
  • IE11+

Inline vs Overlay Checkout

Scegli il tipo di checkout giusto per il tuo caso d’uso:
FeatureInline CheckoutOverlay Checkout
Integration depthFully embedded in pageModal on top of page
Layout controlFull controlLimited
BrandingSeamlessSeparate from page
Implementation effortHigherLower
Best forCustom checkout pages, high-conversion flowsQuick integration, existing pages
Usa l’inline checkout quando desideri il massimo controllo sull’esperienza di pagamento e un branding perfettamente integrato. Usa l’overlay checkout per un’integrazione più rapida con modifiche minime alle pagine esistenti.

Risorse correlate

Per ulteriore assistenza, visita la nostra community Discord o contatta il nostro team di supporto per sviluppatori.