Desarrolladores · TEF & PINPad

Integra TEF.

Tu operación presencial
potenciada con IOPAY

¡Aumentar tus ventas presenciales conectadas al finalizar TEF! Llevar el poder del control de la gestión de la tecnología Iopay a su operación

TEF local + operación IOPAY
APP
Capa del integrador Tu Aplicación PDV + APIs + webhooks IOPAY
su sistema
IO
Capa central Las plataformas IOPAY Cuenta · transaccional · activación · webhooks
IOPAY
SDK
Captura local Descriptor SDK / El servidor Comunicación TEF con el terminal
local
PIN
Dispositivo físico PINPad / terminal Interacción con tarjeta y portador
TEF
01 · Visión general

Una integración dividida en dos capas bien definidas

La captura en presencia de TEF ocurre localmente entre Tu Aplicaciónel componente Zoop y el PINPad El pago, sin embargo, sigue integrado en IOPAY Esto preserva una sola capa para la gestión de transacciones, activación de la terminal, eventos y webhooks

✓
La regla principal de la arquitectura

Use Zoop Desktop SDK o Zoop Desktop Server para Captura de TEF local. Sigue usando IOPAY APIs + webhooks para el resto del ciclo operativo y transaccional

Captura en presencia Zoop SDK / servidor

Comunicación local entre el PDV, el servicio/SDK y el PINPad

Capa central IOPAY

Credenciación, cuenta, activación de terminal, transacción y webhooks

Integración de los clientes Tu Aplicación

Mantén tus APIs y webhooks IOPAY y añade la captura local TEF

02 · Responsabilidades

Quién hace qué en la integración

La separación a continuación evita que el uso del componente Zoop para captura local sea confundido con un cambio de la integración principal de la operación

Parte Responsabilidad en el proyecto
Tu Aplicación Integrar la captura TEF con el Zoop Desktop SDK o Desktop Server y mantener la integración con las APIs y webhooks IOPAY
IOPAY Credenciación de establecimiento, cuenta, activación del terminal por el portal, webhooks y flujo transaccional de la operación
SDK / servidor Zoop Local de captura de TEF y comunicación entre su aplicación y el PINPad
PINPad / terminal Dispositivo físico responsable de interactuar con la tarjeta y con el portador durante la captura
IO
— Dashboard — en la documentación Zoop

Para este modelo de integración, siempre que el flujo de activación de Zoop solicite que un token sea confirmado en el — dashboard — , el enlace operativo debe completarse en portal IOPAY → Terminals de pago → Añadir Terminal.

03 · Elegir la integración

SDK Embedded o Desktop Server

Hay dos formas documentadas de implementar la capa local Los dos conservan la misma arquitectura IOPAY para cuenta, activación y eventos

La
Inicio Zoop Desktop SDK

Biblioteca incorporada a su aplicación Indicado cuando el PDV puede consumir directamente el plugin y controlar la comunicación local con el terminal

B. El
La alternativa documentada Zoop Desktop Server

Servicio local en segundo plano Su aplicación habla con él por WebSocket, normalmente en ws://localhost:1337.

04 · Quickstart

Desde el proyecto vacío al primer pago en cinco pasos

01

Prepare el proyecto y el terminal

Confirmar con IOPAY el terminal y el entorno de prueba Configurar el repositorio Maven de Zoop, seleccionar el artefacto correspondiente a su plataforma — JVM, Android o KMP — y agregar las dependencias auxiliares indicadas en la documentación oficial Usa la versión acordada para el proyecto

Grado · ejemplo JVM
implementation(
    "br.zoop.pos.plugin:zoop-pos-plugin-desktop-jvm:X.Y.Z"
)
!
GitHub Packages ≠ credencial de pago

La descarga de paquetes puede requerir un usuario GitHub y un PAT con permiso de lectura Este acceso es sólo para el desarrollo/distribución del artefacto y está separado de la autenticación de la terminal

02

Inicia sin credenciales de pago

En la primera activación, inicia Zoop sin el bloque de credenciales y conecta el DesktopPlugin. En JVM, también informe los datos de la aplicación cuando lo requiera la versión del SDK; el bloque application no se aplica a Android

Kotlin · primera activación
Zoop.initialize(context)

val desktopPlugin = DesktopPlugin(
    Zoop.constructorParameters()
)

Zoop.plug(desktopPlugin)
03

Gerenciando el token y vinculando en el portal IOPAY

Crear la solicitud de activación con createDashboardActivationRequestBuilder()trata el tokenCallback y envíe la solicitud con Zoop.post(). Mostrar el token al operador y usarlo en el portal IOPAY en Terminal de pago → Añadir terminal. A continuación, espera la confirmación devuelta por el SDK

La estructura de la activación
val activationRequest =
    ZoopFoundationPlugin
        .createDashboardActivationRequestBuilder()
        .tokenCallback(/* receber e exibir o token */)
        .confirmCallback(/* persistir dados confirmados */)
        .build()

Zoop.post(activationRequest)
04

Persiste en la activación y autentique automáticamente

No es confirmCallbacksalvar los datos devueltos por la activación En las próximas inicializaciones, reutilice marketplace, seller y accessKey. La activación se realiza una vez por dispositivo mientras estos datos permanezcan válidos y disponibles

Estructura lógica · almacenamiento seguro
{
  "marketplace": "<retornado-na-ativacao>",
  "seller": "<retornado-na-ativacao>",
  "accessKey": "<retornado-na-ativacao>"
}
05

Ejecutar el primer pago

Antes de vender, confirma la presencia de la clave de transacción en el PINPad A continuación, crea una venta con DesktopPlugin.createPaymentRequestBuilder()Informar el valor en centavos, modalidad y parcelas aplicables y tratar mensajes, éxito, fracaso y finalización del flujo

✓
Sin digitación manual de credenciales de pago

Su aplicación no necesita solicitar ni introducir previamente claves de pago para activar cada terminal Los datos técnicos utilizados en las inicializaciones siguientes se obtienen en el flujo de activación y persisten por la aplicación misma

05 · SDK Embedded

Zoop Desktop SDK integrado directamente en el PDV

En este enfoque, el componente de captura se encuentra dentro de su aplicación El plugin habla localmente con el PINPad, mientras que la operación sigue vinculada a la infraestructura IOPAY

Iniciación después de la activación

Después de que marketplace, seller y accessKey si se han recuperado y persistido, utilice estos valores en tiempo de ejecución para reiniciar el SDK No deben ser digitados manualmente por el operador

Kotlin · inicialización posterior
Zoop.initialize(context) {
    credentials {
        marketplace = storedMarketplace
        seller = storedSeller
        accessKey = storedAccessKey
    }
}

val desktopPlugin = DesktopPlugin(
    Zoop.constructorParameters()
)

Zoop.plug(desktopPlugin)

Estado de integración

Primero cumplimiento Activar

Inicia sin credenciales, genera tokens y espera enlace por el portal IOPAY

Persistencia Datos recibidos

Su aplicación almacena marketplace, vendedor y accessKey de forma segura

Prósimas ejecuciones Autoiniciado

Los datos guardados se reutilizan sin nueva digitación por el operador

06 · Activar

El token nace en el SDK y el enlace se completa en IOPAY

La activación asocia el dispositivo a la cuenta correcta Este paso debe ocurrir antes de la primera transacción y debe probarse también después de reiniciar su aplicación

1
Generar tokens

Su aplicación solicita la activación del componente Zoop y recibe un token temporal

2
Portal IOPAY

El token se informa en Terminales de pago → Añadir terminal

3
Confirmación

El SDK devuelve los datos que su aplicación necesita persistir para futuras inicializaciones

!
No exponga los datos de activación

Arreglar los datos devueltos de forma protegida Evitar marketplace, vendedor y accessKey en pantallas de usuario, registros de aplicaciones, telemetría abierta o depósitos de desarreglos

07 · Primero pago

Consulte la clave de transacción antes de cobrar

La clave de transacción Zoop debe existir en el PINPad para que se ejecuten pagos con tarjeta Si está ausente, activa IOPAY para coordinar la corrección con el proveedor del equipo

!
PINPad sin clave de transacción no está listo para la venta

No trates la ausencia de la clave como un error que solo puede recuperarse por software en el PDV El terminal necesita ser regularizado antes de la transacción

Ejemplo de cobro por tarjeta

Kotlin · SDK de escritorio
val paymentRequest = DesktopPlugin
    .createPaymentRequestBuilder()
    .amount(1000)              // R$ 10,00 — valor em centavos
    .option(Option.CREDIT)
    .installments(2)
    .referenceId("pedido-84217")
    .callback(/* tratar sucesso e falha */)
    .build()

Zoop.post(paymentRequest)

Trabaja también los mensajes intermedios del flujo para mostrar al operador instrucciones como acercar, insertar o leer la tarjeta El retorno local permite al PDV seguir lo que está sucediendo en la terminal

Lo que persiste del resultado

Identificación transactionId

Relaciona la transacción local con la solicitud y la operación acompañada por IOPAY

Autorización NUE + código

Preserve NSU and authorization code returned for reconciliation and support

Los productos de prueba Datos de recibo

Guardar los datos de comprobante disponibles en la versión del SDK en uso

I
No use — flow — como sinónimo de aprobación

El llamado de vuelta onComplete indica que el flujo ha terminado, incluso cuando hubo falla Considere el pago aprobado solo a partir del correspondiente retorno de éxito y correlacione el resultado con la operación de IOPAY

08 · Servicio de escritorio

Alternativa a través de WebSocket local

Zoop Desktop Server se ejecuta como un servicio local y expone un WebSocket para su aplicación Su alcance sigue siendo la captura TEF Acreditación, cuenta, webhooks y flujo de transacciones permanecen en las plataformas IOPAY

01

Instalar y iniciar el servicio

Obtener el instalador en los lanzamientos oficiales de Zoop En las instalaciones de Windows y Linux descritas en la guía, prepare Java/JDK 17, validar con java -version y mantenga el servidor en ejecución en la estación conectada al PINPad

Terminal de la ciudad
java -version
02

Conecta tu aplicación

Cuando su aplicación y el servidor de escritorio estén en la misma máquina, conecte a la dirección local de abajo Trabajar con la apertura, mensajes, errores y cierre del socket

WebSocket
ws://localhost:1337
JavaScript · ejemplo de conexión
const socket = new WebSocket('ws://localhost:1337');

socket.onopen = () => {
    console.log('Desktop Server conectado');
};

socket.onmessage = (event) => {
    const message = JSON.parse(event.data);
    handleZoopMessage(message);
};

socket.onerror = (error) => {
    handleSocketError(error);
};

socket.onclose = () => {
    handleSocketClosed();
};
03

Inicie la activación

Envía {"type":"activation"}. Cuando el servidor responde con estado tokenPresenta el campo token y concluye el enlace en el portal IOPAY Guardar el estado success.

JSON · activación
{
  "type": "activation"
}

En el éxito, persista marketplace, seller y accessKey para las próximas inicializaciones

04

Iniciar con los datos recuperados

Envía el mensaje initialize utilizando exactamente los valores almacenados después de la activación. El campo devicePort es opcional; cuando se omite, el servidor puede detectar el PINPad automáticamente. Espera un poco. status: success antes de permitir las transacciones

JSON · inicializa
{
  "type": "initialize",
  "marketplace": "<valor recebido na ativacao>",
  "seller": "<valor recebido na ativacao>",
  "accessKey": "<valor recebido na ativacao>"
}
05

Implementar la captura en el VDP

Utilice los esquemas JSON documentados por el servidor de escritorio para comandos locales de captura y trate todas las devoluciones La respuesta local sirve para conducir la experiencia en PINPad; la gestión de transacciones y los webhooks continúan por IOPAY

I
Los marcadores de JSON se llenan en el tiempo de ejecución

<valor recebido na ativacao> representa los datos persistidos por su aplicación No son información que el operador debe escribir en cada inicialización

09 · APIs & webhooks

Tu Aplicación sigue recibiendo eventos de IOPAY.

Agregar TEF no cambia el contrato de integración asíncrona: Su aplicación sigue recibiendo por IOPAY los webhooks de cada evento y transacción según la integración contratada La devolución local del SDK/Server complementa la experiencia del PDV; no elimina la capa de eventos IOPAY

Capas de eventos IOPAY

Transacciones, actualizaciones operativas y eventos de integración

Endpoint configurado Tu Aplicación

Mantén tu webhook endpoint y correlaciona los eventos con la solicitud, terminal y transacción local

Modelo de correlación recomendado

Pedido referenceId

Use un identificador propio para conectar el pago a la solicitud de su aplicación cuando esté disponible

Captura de las personas transactionId / NSU

Preserva los identificadores devueltos por el flujo local de la terminal

Evento sincrónico Webhook IOPAY

Actualizar el estado de la operación con los eventos recibidos por la integración IOPAY

✓
Una sola capa de eventos para su aplicación

El componente TEF es local, pero su aplicación no necesita abandonar el flujo ya existente de APIs y webhooks IOPAY Continuar validando los webhooks de cada evento y transacción durante la homologación

10 · Erros y cancelaciones

Exercita fallas antes de homologar

No válida sólo el escenario de aprobación El piloto debe contemplar fallas de comunicación, token expirado, interrupción durante la captura, reinicio de la aplicación y cancelaciones

SDK Cancelación de la cooperativa

Cuando se aplica al flujo local, use los comandos documentados por el SDK para interrumpir/cancelar una operación en curso

Desktop Server Los comandos JSON

El servidor tiene sus propios flujos de cancelación y mensajes de estado Trata el inicio, la selección, el éxito, el fracaso y la finalización de acuerdo con la documentación de la versión utilizada

!
Cancelación de la operación × estado de la transacción

Valida la cancelación también en el flujo transaccional IOPAY Antes de repetir un cobro después de fallas de comunicación, confirme el estado real de la transacción para evitar duplicidades

11 · Seguridad

Datos de activación deben permanecer fuera de la interfaz y de los registros

marketplace, vendedor y accessKey son parte del arranque técnico del dispositivo Su aplicación debe protegerlos y usarlos automáticamente después de su activación

Persistencia El almacenamiento protegido

Usa un mecanismo local apropiado para la plataforma y restringe el acceso a los procesos que realmente necesitan los datos

Observabilidad No hay secreto en el log

No grabar accessKey o datos equivalentes en logs, traces, mensajes de error o análisis

UX operativo Sin impresión recurrente

La activación es técnica El operador no debe tener que copiar credenciales para vender

12 · Aplicación de los productos

Checklist antes de liberar al piloto

✓
Operación centralizada en IOPAY

Acreditación, cuenta y flujo transaccional continúan por las plataformas IOPAY, con webhooks validados para los eventos y transacciones de integración

✓
Terminal asociado con la cuenta en línea

Confirmar la vinculación en Terminales de pago → Añadir terminal y reiniciar su aplicación para validar el uso de los datos guardados

✓
Resultado del pago correctamente tratado

Mostrar mensajes del SDK, diferenciar el éxito de la simple terminación del flujo y preservar transactionId, NSU, código de autorización y comprobantes/datos de recibo

✓
Errores y cancelaciones cometidos

Teste de falla de comunicación, caducidad del token, interrupción de captura y cancelaciones en el flujo IOPAY y en la capa local cuando corresponda

✓
PINPad preparado

Confirmar la presencia de la clave transaccional antes de la primera venta Si está ausente, haga clic en IOPAY para coordinar la corrección con el proveedor

✓
Persistencia segura

Datos de activación almacenados de forma protegida y ausentes de pantallas, registros y telemetría indebida

13 · Referencias

Documentación oficial para la implementación

Use las guías siguientes como referencia técnica de la versión del componente instalado en el proyecto Parámetros, compatibilidad, versiones y protocolos pueden evolucionar; siempre valida la documentación oficial durante la implementación

I
Base técnica de esta página

El flujo se ha estructurado a partir de la guía técnica IOPAY de integración TEF y de las referencias públicas de Zoop Usa la versión homologada para el proyecto y confirma los parámetros completos en las guías oficiales en el momento de la implementación

¿Listo para homologar el primer terminal?

Generar el token por el SDK o Desktop Server, vincular el terminal en el portal IOPAY y validar el flujo completo — captura local, transacción y webhooks — antes de seguir a la producción