Passa al contenuto principale
In questa pagina

El SDK Web de DEUNA es un script de navegador que renderizza le esperienze di pagamento in un elemento modal o in un elemento target responsive. Il tuo backend crea gli ordini e protegge le credenziali private; il browser riceve una chiave API pubblica e un token di ordine a breve durata.

Architettura di integrazione#

Diagramma di sequenza
1Browser2Merchant backend3DEUNA API4DEUNA Web SDKStart checkoutCreate order with privateAPI keyorder_tokenPublic key context + ordertokeninitialize + initPaymentWidgetCallbacks and lifecycle eventsRetrieve final order state
Commerciante o clienteDEUNA
01 · backend
Crea l'ordine
Mantieni le chiavi API, i totali e le regole aziendali sul server.
02 · browser
Inicializza una sola volta
Carica lo script CDN e imposta l'ambiente esplicito.
03 · customer
Apri un'esperienza
Widget di pagamento, Elementi, Voucher o Azione Successiva.
04 · backend
Verifica lo stato finale
Riconcilia prima della spedizione.

1. Carica una versione fissa#

HTML
<script
  crossorigin
  src="https://cdn.deuna.io/web-sdk/v1.7/index.js">
</script>

Lo script espone window.DeunaSDK. Fissa la versione in produzione e testa gli aggiornamenti nel sandbox per prima. Non riscrivere silenziosamente l'URL CDN in tempo reale da input non attendibili.

Per un'applicazione a pagina singola, carica lo script a livello di documento una sola volta. Se lo carichi dinamicamente, risolvi una promessa condivisa per evitare che percorsi concorrenti aggiungano tag duplicati.

JavaScript
function loadDeunaSdk() {
  if (window.DeunaSDK) return Promise.resolve(window.DeunaSDK);
  if (window.__deunaSdkPromise) return window.__deunaSdkPromise;

  window.__deunaSdkPromise = new Promise((resolve, reject) => {
    const script = document.createElement('script');
    script.src = 'https://cdn.deuna.io/web-sdk/v1.7/index.js';
    script.crossOrigin = 'anonymous';
    script.onload = () => resolve(window.DeunaSDK);
    script.onerror = () => reject(new Error('DEUNA Web SDK failed to load'));
    document.head.append(script);
  });

  return window.__deunaSdkPromise;
}

2. Inizializza l'ambiente#

JavaScript
await DeunaSDK.initialize({
  publicApiKey: 'YOUR_PUBLIC_API_KEY',
  env: 'sandbox',
});

Uso sandbox per i test di integrazione e production per il traffico live. Il valore predefinito è lo SDK, ma impostare env esplicitamente previene l'uso di token e credenziali accidentali tra ambienti.

3. Scegli la strategia di caricamento#

StrategiaUsa quandoCompromesso
Pre-carica un widgetLa pagina di checkout può essere inizializzata prima del clic finale.Avvio rapido; consuma risorse di rete e del browser prima.
Inizializza, poi apri su richiestaL'esperienza viene utilizzata raramente o la pagina deve ridurre al minimo il lavoro iniziale.Ciclo di vita più semplice; il cliente vede lo stato di caricamento del widget.
Pre-carica il Widget di PagamentoJavaScript
await DeunaSDK.initialize({
  publicApiKey: 'YOUR_PUBLIC_API_KEY',
  env: 'sandbox',
  preloadWidgets: [
    {
      widget: 'payment',
      params: {
        language: 'en',
        callbacks,
      },
    },
  ],
});

// Once your backend returns the token, reveal the prepared widget.
await DeunaSDK.initPaymentWidget({orderToken});

Pre-carica solo l'esperienza che il cliente è probabile che apra. La soluzione corrente supporta payment, elements, vouchere nextAction inserimenti di pre-caricamento.

4. Apri un'esperienza#

Politica di sicurezza del contenuto (CSP)#

Inizia dalla tua politica esistente e consente solo le origini DEUNA utilizzate dall'ambiente e dalle funzionalità selezionate. Lo SDK di produzione carica da https://cdn.deuna.io; i frame del widget utilizzano gli host Checkout o Elements di produzione, mentre le connessioni API e di archiviazione utilizzano gli endpoint di produzione DEUNA. Il sandbox utilizza i corrispondenti *.sandbox.deuna.io hosts.

Baseline orientato alla produzione; integra con la tua politica esistenteHTTP
Content-Security-Policy:
  script-src 'self' https://cdn.deuna.io;
  frame-src https://checkout-ux.deuna.com https://elements.deuna.com https://cdn.getduna.com;
  connect-src 'self' https://api.deuna.io https://apigw.getduna.com https://elements.deuna.com;

Portafogli, provider di frodi, APM, font, immagini e file di stile personalizzati possono richiedere origini specifiche del provider. Aggiungi solo le origini utilizzate dalla tua integrazione configurata; verifica la console del browser nel sandbox e mantieni la politica sotto controllo. Non aggiungere wildcard ampi per sopprimere le violazioni.

Host responsive e accessibilità#

La modalità "Modal" utilizza la viewport per schermi fino a 600 px di larghezza. Per la modalità "Embedded", fornire un host fluido e aggiornare la sua altezza da onResize.

CSS
#deuna-payment {
  width: 100%;
  min-width: 0;
  min-height: 32rem;
}

@media (max-width: 600px) {
  #deuna-payment { min-height: 100dvh; }
}

Mantenere l'ingrandimento attivo, non bloccare il focus al di fuori del widget, ripristinare il focus dopo la chiusura, e testare la navigazione tramite tastiera e l'ingrandimento del testo al 200%.

Checklist per l'accettazione del sandbox#

  • Lo script viene caricato una sola volta e un errore produce un'interfaccia utente ripristinabile.
  • Le chiavi e i token d'ordine del sandbox non raggiungono la produzione, o viceversa.
  • Le modalità "Modal" e "Target" funzionano a 320 px di larghezza e con la sola tastiera.
  • Vengono gestiti il successo, il rifiuto, la chiusura, il timeout, il refresh e l'interruzione della rete.
  • Popup o redirect di 3DS e APM non vengono bloccati da CSP o dal sandboxing iframe.
  • I log escludono token, dettagli del cliente e dati di pagamento.
  • Il tuo backend, e non la callback, decide se l'elaborazione è consentita.

Prossimo passo#