Saltar al contenido principal
En esta página

El Widget de Pago muestra los métodos de pago disponibles para un pedido existente y procesa el método seleccionado a través de DEUNA. Soporta tarjetas y métodos alternativos de pago configurados sin exponer credenciales sensibles al código JavaScript del comerciante.

Antes de comenzar#

Complete Comience con el SDK Web, cree el pedido en su backend y devuelva únicamente su order_token al navegador.

Abrir widget de pago#

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),
  },
});

Secuencia de integración#

01 · server
Crear el pedido
Calcule los totales y obtenga el token del pedido.
02 · browser
Abrir widget de pago
Pase el token y la configuración del cliente.
03 · SDK
Procese el método seleccionado
Maneje la validación, el desafío, el proveedor y el comportamiento de ciclo de vida.
04 · server
Verifique y complete
Utilice el estado del pedido autorizado.

Parámetros#

ParámetroRequeridoPropósito
orderTokenSíToken devuelto cuando su backend creó el pedido.
callbacksNo, recomendadoÉxito, error, cerrar, redimensionar, pago, BIN, cuotas, y manejadores de eventos.
languageNoen, eso pt; de lo contrario, aplican los valores predeterminados del comerciante.
userTokenNoContexto de usuario DEUNA autenticado para métodos de pago guardados elegibles.
paymentMethodsNoRestringe o abre directamente los métodos configurados. No codifique procesadores utilizados por la enrutamiento a menos que sea necesario.
mode + targetNoRenderice dentro de un elemento compatible en lugar del modal predeterminado. Ambos son necesarios para el modo de destino.
hidePayButtonNoOculte la acción del widget cuando su página es la responsable del envío.
styleFileNoIdentificador de tema/estilo gestionado por DEUNA o recurso de estilo aprobado.
widgetExperienceNoTemas y controles de experiencia de usuario compatibles.
behaviorNoComportamientos de flujo compatibles, como tarjetas divididas o redirecciones de popup.
fraudCredentialsNoSolo configuraciones de proveedores de fraude aprobadas.
sessionId, idempotencyKeyNoControl de correlación y de intentos duplicados para los flujos compatibles.
domainNoOverride del entorno controlado; omitir en el uso normal de producción.

Modal o incrustado#

El modal es el predeterminado. Para el modo incrustado:

HTML
<div id="deuna-payment" aria-label="Detalles de pago"></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,
  },
});

El selector debe coincidir con un elemento estable. No lo renderice dentro de un elemento que sea display: none durante la inicialización o que cause desbordamiento.

Filtre los métodos de pago#

Omite paymentMethods para que el estado del pedido y la configuración del comerciante determinen la elegibilidad. Proporcione un método para abrir su formulario directamente, o múltiples métodos para restringir la elección.

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

El enrutamiento puede elegir entre los procesadores de tarjetas configurados, por lo que una entrada de tarjeta no necesita normalmente processors list.

Tenga el botón de enviar#

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;
});

La instancia activa también expone getWidgetState(), getSelectedPaymentMethod(), refetchOrder(), setOrderData(...), setCustomStyles(...)y close(). Utilice solo métodos relevantes para la experiencia activa y serialice las actualizaciones para que un token de pedido antiguo no sobrescriba un nuevo proceso de pago.

Tarjetas divididas e instalaciones#

Utilice el comportamiento anidado documentado para un flujo de dos tarjetas configurado:

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

Ver División de pagos con tarjeta para la conciliación y las pruebas. Utilice onInstallmentSelected para el exacto installmentPlanOptionId; nunca lo infiera de la información visible.

Manejo de errores y cierre#

Diagrama de flujo
1Widget outcome2-- No3Verify order onbackend4-- No, closed orinterrupted5Map type andmetadata code torecovery6Retrieve orderbefore retry7Render verifiedstate
Revisión o pendiente

No muestre mensajes de proveedores brutos. Mapee los tipos y códigos conocidos a guías de usuario localizadas, registre diagnósticos seguros y retroceda a un mensaje de reintento genérico.