Passa al contenuto principale
In questa pagina

Il widget di pagamento visualizza i metodi di pagamento disponibili per un ordine esistente e li elabora tramite DEUNA. Supporta carte e metodi di pagamento alternativi configurati senza esporre credenziali sensibili al codice JavaScript del commerciante.

Prima di iniziare#

Completare Comenzar con el SDK Webcrea l'ordine sul tuo backend e restituisci solo il order_token al browser.

Widget di pagamento aperto#

JavaScript
await DeunaSDK.initPaymentWidget({
  orderToken,
  language: 'en',
  callbacks: {
    onSuccess: async () => {
      await DeunaSDK.close();
      await verifyOrderOnBackend();
    },
    onError: ({type, metadata}) => {
      showRecovery({type, code: metadata.code});
    },
    onClosed: (action, metadata) => {
      restorePaymentMethods(action, metadata);
    },
    onCardBinDetected: ({cardBin, cardBrand}) => {
      updateCardOffers(cardBin, cardBrand);
    },
    onInstallmentSelected: ({cardBin, installmentPlanOptionId}) => {
      rememberPlan(cardBin, installmentPlanOptionId);
    },
    onPaymentProcessing: () => disableDuplicateActions(),
    onEventDispatch: (event, payload) => trackSafeEvent(event, payload),
  },
});

Sequenza di integrazione#

01 · server
Crea l'ordine
Calcola i totali e ottieni il token d'ordine.
02 · browser
Widget di pagamento aperto
Passa il token e la configurazione del client supportata.
03 · SDK
Elabora il metodo selezionato
Gestisci la validazione, la sfida, il provider e il comportamento del ciclo di vita.
04 · server
Verifique y complete
Utilizza lo stato autoritativo dell'ordine.

Parametri#

ParametroObbligatorioOggetto
orderTokenSì.Token restituito quando il tuo backend ha creato l'ordine.
callbacksNo, consigliatoSuccesso, errore, chiusura, ridimensionamento, pagamento, BIN, rateizzazione e gestori di eventi.
languageNo.en, eso pt; altrimenti si applicano le impostazioni predefinite del commerciante.
userTokenNo.Contesto utente DEUNA autenticato per i metodi di pagamento salvati idonei.
paymentMethodsNo.Limita o apre direttamente i metodi configurati. Non codificare i processori utilizzati dal routing, a meno che non sia necessario.
mode + targetNo.Renderizzare all'interno di un elemento corrispondente invece del modal predefinito. Entrambi sono necessari per la modalità target.
hidePayButtonNo.Nasconde l'azione del widget quando la pagina è responsabile della presentazione.
styleFileNo.Identificatore del tema/stile gestito da DEUNA o risorsa di stile approvata.
widgetExperienceNo.Temi e override dell'esperienza utente supportati.
behaviorNo.Comportamenti di flusso supportati, come schede separate o reindirizzamenti del popup principale.
fraudCredentialsNo.Solo configurazioni approvate per la prevenzione delle frodi.
sessionId, idempotencyKeyNo.Controllo di correlazione e tentativi di duplicazione per i flussi supportati.
domainNo.Override dell'ambiente controllato; omettere nell'uso normale in produzione.

Modal o incorporato#

Il modal è predefinito. Per la modalità incorporata:

HTML
<div id="deuna-payment" aria-label="Dettagli di pagamento"></div>
JavaScript
await DeunaSDK.initPaymentWidget({
  orderToken,
  mode: 'target',
  target: '#deuna-payment',
  callbacks: {
    onResize: ({height}) => {
      document.querySelector('#deuna-payment').style.height = `${Math.ceil(height)}px`;
    },
    onSuccess: verifyOrderOnBackend,
    onError: showRecovery,
  },
});

Il selettore deve corrispondere a un elemento stabile. Non renderizzarlo all'interno di un elemento che è display: none in fase di inizializzazione o che causa overflow.

Filtrare i metodi di pagamento#

Ometti paymentMethods per consentire all'ordine e alla configurazione del commerciante di determinare l'idoneità. Fornire un metodo per aprire direttamente il suo modulo, o più metodi per limitare la scelta.

JavaScript
await DeunaSDK.initPaymentWidget({
  orderToken,
  paymentMethods: [
    {paymentMethod: 'credit_card'},
    {paymentMethod: 'wallet', processors: ['click_to_pay']},
  ],
  callbacks,
});

Il routing può scegliere tra i processori di carte configurati, quindi l'inserimento di una carta di credito di solito non richiede processors list.

Possedere il pulsante di invio#

JavaScript
await DeunaSDK.initPaymentWidget({
  orderToken,
  hidePayButton: true,
  callbacks,
});

payButton.addEventListener('click', async () => {
  if (!(await DeunaSDK.isValid())) return;

  payButton.disabled = true;
  const result = await DeunaSDK.submit();
  if (result.status === 'error') showRecovery(result);
  payButton.disabled = false;
});

L'istanza attiva espone anche getWidgetState(), getSelectedPaymentMethod(), refetchOrder(), setOrderData(...), setCustomStyles(...)e close(). Utilizzare solo i metodi pertinenti all'esperienza attiva e serializzare gli aggiornamenti in modo che un token di ordine precedente non possa sovrascrivere un nuovo checkout.

Gestione di carte e piani di pagamento#

Utilizzare il comportamento nidificato documentato per un flusso di due carte configurato:

JavaScript
behavior: {
  paymentMethods: {
    creditCard: {
      splitPayments: {maxCards: 2},
    },
  },
}

Vedi Suddivisione dei pagamenti con carta per la riconciliazione e i test. Utilizzare onInstallmentSelected per l'implementazione esatta installmentPlanOptionId; non inferirlo dal testo visualizzato.

Gestione degli errori e chiusura delle transazioni#

Diagramma di flusso
1Widget outcome2-- No3Verify order onbackend4-- No, closed orinterrupted5Map type andmetadata code torecovery6Retrieve orderbefore retry7Render verifiedstate
Revisione o in sospeso

Non visualizzare messaggi grezzi del fornitore. Mappare i tipi e i codici noti a istruzioni per i clienti localizzate, registrare diagnosi sicure e utilizzare un messaggio di riprova generico.