Widget de pago para Web
Integre el Widget de Pago de DEUNA en la web con una presentación adaptable, control de envío, callbacks, filtrado de pagos y recuperación.
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#
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#
Parámetros#
| Parámetro | Requerido | Propósito |
|---|---|---|
orderToken | Sí | Token devuelto cuando su backend creó el pedido. |
callbacks | No, recomendado | Éxito, error, cerrar, redimensionar, pago, BIN, cuotas, y manejadores de eventos. |
language | No | en, eso pt; de lo contrario, aplican los valores predeterminados del comerciante. |
userToken | No | Contexto de usuario DEUNA autenticado para métodos de pago guardados elegibles. |
paymentMethods | No | Restringe o abre directamente los métodos configurados. No codifique procesadores utilizados por la enrutamiento a menos que sea necesario. |
mode + target | No | Renderice dentro de un elemento compatible en lugar del modal predeterminado. Ambos son necesarios para el modo de destino. |
hidePayButton | No | Oculte la acción del widget cuando su página es la responsable del envío. |
styleFile | No | Identificador de tema/estilo gestionado por DEUNA o recurso de estilo aprobado. |
widgetExperience | No | Temas y controles de experiencia de usuario compatibles. |
behavior | No | Comportamientos de flujo compatibles, como tarjetas divididas o redirecciones de popup. |
fraudCredentials | No | Solo configuraciones de proveedores de fraude aprobadas. |
sessionId, idempotencyKey | No | Control de correlación y de intentos duplicados para los flujos compatibles. |
domain | No | Override del entorno controlado; omitir en el uso normal de producción. |
Modal o incrustado#
El modal es el predeterminado. Para el modo incrustado:
<div id="deuna-payment" aria-label="Detalles de pago"></div>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.
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#
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:
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#
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.