Introducción
PayCode Connect es el SDK que permite que una aplicación se conecte de forma directa con una terminal punto de venta física (TPV) de PayCode, sin pasar por un servidor intermedio. La comunicación ocurre en una red punto a punto (P2P), es decir, directamente entre el dispositivo del negocio y la terminal, sin intermediarios. Esto permite enviar comandos y recibir eventos en tiempo real: iniciar cobros, leer códigos de barras, controlar el estado de la conexión, entre otros. Esta guía cubre la versión para C# y .NET. Está pensada para negocios que desarrollan aplicaciones de escritorio en Windows (por ejemplo con WPF, WinUI o MAUI) y que necesitan controlar una terminal PayCode desde su propio software de punto de venta.Este SDK se distribuye a través de NuGet, el gestor de paquetes de .NET. Si nunca has usado NuGet, solo es la forma en la que se instalan librerías en proyectos de Windows, similar a como npm funciona para JavaScript.
Instalación
El paquete está publicado en nuget.org bajo el nombrePaycodeConnect.
Configuración inicial (Setup)
Antes de poder conectar con una terminal, es necesario inicializar el SDK. Esto se hace llamando al métodoSetup(), el cual crea un nodo local en el equipo donde corre la aplicación. Este paso solo debe ejecutarse una vez, normalmente durante el arranque de la app.
Conexión con la terminal
Para vincular tu aplicación con una terminal física, se genera un ticket de conexión y se muestra como código QR. El SDK incluye un generador de QR integrado que retorna una imagen PNG codificada en base64:Reconexión
El SDK guarda automáticamente el último ticket usado. Esto permite reconectar con la última terminal conocida sin necesidad de volver a escanear un QR:Recepción de eventos
PayCode Connect expone eventos de C# para el estado de la conexión, la presencia de la terminal, el ciclo de vida de una transacción con chip (EMV) y la lectura de códigos de barras.Todos los eventos se entregan sobre el
SynchronizationContext capturado durante Setup(), por lo que es seguro usarlos para actualizar la interfaz en frameworks como WPF, WinUI o MAUI.Cambio de conexión
Se dispara cuando cambia el estado de conexión con la terminal.Estado EMV
Se dispara a lo largo de todo el ciclo de vida de una transacción EMV, después de llamar aStartEMV(). El callback recibe un objeto EMVData cuyos campos se llenan según el estado actual:
Si se envió un valor de
metadata al llamar a StartEMV, ese mismo valor estará disponible en el campo Metadata de cada evento EMVData de esa transacción.
Presencia
Se dispara confalse cuando los mensajes dejan de llegar a la terminal conectada, aunque la conexión no se haya perdido por completo. Se dispara con true cuando la terminal vuelve a responder. Este evento corresponde al ícono amarillo de advertencia que se muestra en la terminal.
Escáner
Una terminal conectada puede usarse como lector de códigos de barras. Para habilitarlo, primero se debe configurar la propiedadScannerPrefixes (ver Configurar capacidades). Una vez configurado, este evento se dispara cada vez que la terminal escanea un código que coincide con esos prefijos.
Mensajes perdidos
Este evento se dispara en dos escenarios distintos:- Con mensajes — después de llamar a
RequestLostMessages(), entrega un arreglo deEMVDataque no fueron confirmados. - Con una bandera — después de llamar a
RequestHasLostMessages(), entrega un booleano que indica si existen mensajes pendientes.
Comandos
Una vez establecida la conexión, la terminal puede controlarse de forma remota a través de los siguientes comandos:
Todos los comandos retornan un
ResultCode y aceptan opcionalmente un CompletionCallback para la operación asíncrona interna.
Iniciar EMV
Inicia una transacción EMV en la terminal conectada. El parámetroamount es un string en pesos mexicanos (MXN). El parámetro opcional emvType toma por defecto el valor EMVType.Combined y puede configurarse como Emv (Visa/Mastercard), Amex o Combined (detección automática). Para dar seguimiento al ciclo de vida de la transacción hay que suscribirse al evento EMVStateChange.
El parámetro opcional metadata acepta cualquier objeto serializable, el cual será regresado en cada evento EMVData de esa transacción. Esto es útil para asociar contexto propio de la aplicación (por ejemplo, el id de una orden o el número de una mesa) sin necesidad de manejar estado externo.
También existe una variante StartEMV(amount, emvType, callback) para pasar un callback sin necesidad de especificar metadata.
Revertir transacción
Revierte una transacción previamente completada usando su número de folio. El resultado de la reversión se recibe en el eventoEMVStateChange.
Reimprimir transacción
Reimprime el comprobante de una transacción previamente completada, usando su número de folio.Configurar capacidades
Configura las capacidades de la terminal. Las opciones disponibles son:Autorizar
Autentica contra la terminal conectada usando correo y contraseña. Si la terminal ya tiene una sesión iniciada, el comando se ignora.Establecer PIN
Establece un PIN en la terminal para autenticación mediante PIN. Requiere la contraseña de la cuenta para su verificación.Autorizar con PIN
Autentica contra la terminal usando un PIN previamente configurado.Cerrar sesión
Cierra la sesión activa en la terminal conectada.Mensajes perdidos
El sistema de mensajes perdidos permite recuperar mensajes de transacciones con chip (EMV) que no fueron confirmados, por ejemplo debido a una desconexión ocurrida durante la transacción.LostMessagesEvent (ver Mensajes perdidos).
Apagar
Desconecta y apaga el nodo actual. Se puede pasartrue en el parámetro restart para que se llame automáticamente a Setup() de nuevo después del apagado.
Propiedades
Tipos
EMVData
Información enviada por la terminal a lo largo del proceso EMV. Los campos se llenan según elEMVState actual.
Metadata contiene la misma información enviada en StartEMV. Se puede usar el método auxiliar GetMetadata<T>() para deserializarlo al tipo propio de la aplicación:
Transaction
Detalles de la transacción, recibidos cuandoEMVState es Success.

1.png?fit=max&auto=format&n=4-5R_aQB0EkHGUZD&q=85&s=9d9475963092edc3d5df46df2866696a)