Saltar al contenido principal
En esta página

El widget del cupón presenta las instrucciones o la referencia generada para un cupón o método de pago en efectivo compatible. Utiliza un token de pedido existente; no crea ni paga un segundo pedido.

Ciclo de vida del cupón#

01 · backend
Crear el pedido
Crear un pedido que sea elegible para el método de cupón configurado.
02 · app
Abrir Cupón
Pasar el valor devuelto order_token to the platform SDK.
03 · customer
Guardar las instrucciones
El cliente visualiza, copia o descarga la referencia compatible.
04 · backend
Confirmar el pago
Esperar el estado del pedido definitivo antes de la entrega.
Diagrama de secuencia
1Merchant app2DEUNA API3Voucher widget4CustomerCreate eligible orderorder_tokenOpen with the same tokenVoucher / referenceinstructionsCopy or downloadVerified webhook orretrieved state
Comercio o clienteDEUNA

Abrir el widget#

await DeunaSDK.initVoucherWidget({
  orderToken,
  language: 'en',
  callbacks: {
    onSuccess: (data) => showVoucherInstructions(data),
    onError: (error) => showRecovery(error),
    onClosed: () => showPaymentMethods(),
    onPaymentProcessing: () => disableDuplicateActions(),
  },
});

Parámetros#

ParámetroPlataformasRequeridoPropósito
orderTokenTodosSíToken para el pedido existente elegible para el cupón.
callbacksTodosSíÉxito, error, cerrar, evento y manejadores de procesamiento de pagos compatibles.
languageTodosNoIdioma compatible del widget. Los tipos de Web actualmente aceptan en, eso pt.
modeReaccionar nativoSímodal o el modo de renderizador integrado compatible.
fraudCredentialsNativo + React NativeNoCredenciales del proveedor solo cuando el flujo de fraude configurado lo requiere.
customUserAgentiOS + AndroidNoAgente de usuario WebView específico de la aplicación para una necesidad de integración aprobada.
domainTodosNoSobreescritura del entorno para pruebas controladas; omitir en integraciones de producción normales.

Finalización y estado de pago#

onSuccess significa que la experiencia del cupón ha completado su acción del cliente compatible. El cobro del cupón suele ocurrir más tarde, fuera de la aplicación. Mantenga el pedido pendiente en su interfaz hasta que su parte posterior observe el estado final a través de un webhook verificado o una recuperación de API.

SituaciónMensaje del clienteAcción del comerciante
Instrucciones mostradas"Utilice estas instrucciones para completar el pago."Persistir el ID del pedido del comerciante y esperar un cambio de estado.
Widget cerrado"Puede volver a este pedido más tarde."No cancelar ni recrear automáticamente. Reconciliar primero.
Error de red"No pudimos cargar el cupón."Ofrecer un reintento con el mismo token de pedido.
Cupón pagado"Pago confirmado."Complete solo después de la verificación en el backend.
Vale expirado o rechazadoExplique el siguiente paso admitido.Vaya a un estado terminal o intencional desde la respuesta de la API.

Recibos y entrega de archivos#

Una respuesta de pago de referencia puede contener un reference_processors array. Cada entrada de procesador disponible puede proporcionar un código de barras, fecha de vencimiento, nombre del procesador y la URL del recibo HTML o PDF alojado. Debido a que este campo es un array, la experiencia de recibos alojados puede presentar múltiples recibos cuando el pago procesado devuelve múltiples referencias de procesadores.

Diagrama de flujo
NoYes1Reference paymentresponse2reference_processorspresent?3Show the widget'ssupportedcontinuation4Present one or morereceipts5View processorinstructions6Open, save, or sharethe availablereceipt7Keep payment pendinguntil backendconfirmation
ResultadoProveedor o procesadorRevisión o pendiente

El procesador determina qué campos de la factura están presentes. No se debe generar una URL de PDF a partir de un código de barras ni asumir que todos los métodos de referencia tienen formatos HTML y PDF.

Ver abajo. Esta es la que afecta a tu factura.Descargar la propiedadComportamiento de integración
WebWidget y navegador alojadosEl widget muestra la acción disponible para la factura. El contrato actual de devolución web no tiene una devolución de archivo dedicada.
Reaccionar nativoAplicación del comercianteonDownloadFile recibe {type, data}. type es url cuando el procesador proporciona una URL de factura, o base64 cuando el SDK captura la vista actual del cupón.
androideSDK nativoEl SDK descarga la URL de factura proporcionada o guarda una copia de seguridad cuando el widget emite la acción de guardar. Pruebe el comportamiento de almacenamiento y compartición en versiones de Android compatibles.
iOSSDK nativoEl SDK descarga la URL de factura proporcionada o captura la vista actual como respaldo. Pruebe la experiencia resultante de guardar/compartir en versiones de iOS compatibles.

Para React Native, verifique el discriminador en lugar de asumir que el payload es siempre un cuerpo de archivo:

JavaScript
import {DownloadType} from '@deuna/react-native-sdk';

const onDownloadFile = async ({type, data}) => {
  if (type === DownloadType.URL) {
    await openTrustedReceiptUrl(data);
    return;
  }

  await saveBase64VoucherImage(data);
};

Valide cualquier URL antes de abrirla o recuperarla, utilice HTTPS, mantenga los archivos descargados en una ubicación protegida o seleccionada por el usuario, y no registre el contenido de la factura. Una factura guardada es evidencia para el cliente; no es una confirmación de pago autoritativa.

Móvil y accesibilidad#

  • Presente el Vale desde una pantalla visible, no desde una llamada de retorno de fondo.
  • Mantenga las acciones de descarga, copia y cierre accesibles con un tamaño de texto del 200%.
  • En React Native, solicite solo la capacidad de almacenamiento o compartir necesaria para su implementación de guardado.
  • Devuelva el foco al control que abrió el modal y anuncie los errores de carga a través de la API de accesibilidad de la plataforma.
  • Pruebe la referencia con nombres de comerciantes largos, instrucciones localizadas largas y dispositivos estrechos.

Resolución de problemas#

El widget informa de un token de pedido inválidoValidación de token

Verifique que la cadena no esté vacía, pertenezca al entorno seleccionado y provenga del mismo pedido que desea mostrar. No intercambie una clave API privada ni el cuerpo del pedido con el cliente.

No aparecen instrucciones para el valeElegibilidad

Verifique que la confirmación del pedido y el método de pago estén configurados para un flujo de vales. Un pedido de tarjeta estándar no se convierte en un pedido de vale simplemente abriendo este widget.

Se ha disparado la llamada de retorno, pero el pedido sigue pendiente.Estado asíncrono esperado.

Esto es normal para los métodos de pago en efectivo y vales. La llamada de retorno completó la acción de la interfaz de usuario, no el procesamiento del pago. Siga escuchando el estado verificado del backend.