Publicación técnica
¡Controla un lector de tarjetas chip desde tu navegador!
En una entrada anterior, mostré cómo establecer conectividad USB mediante NodeJS, el conocido motor de ejecución de JavaScript. En una entrada posterior, vimos cómo se pueden utilizar los Websockets para la comunicación entre procesos entre NodeJS y cualquier navegador (incluso navegadores antiguos que no admiten Websockets).
Si combinamos el código de conectividad USB con el de Websockets, una página web puede controlar un dispositivo USB (como nuestro lector de tarjetas de 3 vías VP3300, que aparece a la derecha) utilizando únicamente JavaScript. Ese es el código que quiero mostrarte hoy.
Si aún no has descargado los scripts de mis publicaciones anteriores, no te preocupes: el script que aparece más abajo (unas 360 líneas de JavaScript) contiene todo lo que necesitas (excepto Node). Hablaremos del código en un momento, pero antes veamos cómo utilizarlo.
CÓMO USAR EL SCRIPT (LA FORMA SENCILLA)
1. Accede a la Base de Conocimiento de ID TECH y descarga el archivo node-driver.zip . (No requiere inicio de sesión). NOTA: Se trata de una descarga considerable (11 megabytes), porque incluye Node.exe, así que ten paciencia unos segundos. Además: solo es compatible con equipos Windows. Coloca el archivo en cualquier ubicación de tu equipo local.
2. Descomprime el archivo. Contiene todos los scripts que necesitas. (¡No hace falta copiar y pegar el código que aparece más abajo!)
3. Dentro del archivo descomprimido, busca el archivo llamado start.bat. Ejecútalo. (Se abrirá una ventana de consola; simplemente déjala abierta). El driver de Node ya está en ejecución.
4. Conecta un dispositivo compatible (ID TECH BTPay Mini, VP3300, UniPay III, VP8800) al puerto USB de tu equipo. El driver de Node se conectará a él automáticamente.
5. Abre el archivo client.html (incluido en el archivo) con un navegador web. Haz clic en el botón Conectar. Deberías ver un mensaje confirmando que se ha establecido una conexión Websocket en el puerto 9901. El driver utilizará esta conexión para comunicarse con tu dispositivo USB.
CÓMO USAR EL SCRIPT (USUARIOS AVANZADOS)
¿Ves las aproximadamente 360 líneas de JavaScript que aparecen más abajo? Copia y pega todo el contenido en un archivo de texto y guárdalo, por ejemplo, como driver.js.
Instala NodeJS en tu equipo si aún no lo has hecho. Pero antes de ejecutar driver.js con Node, sigue estos pasos.
Utiliza npm para instalar los siguientes módulos de Node (disponibles en Github, etc.):
1. node-hid (para la conectividad USB)
2. socket.io (para la conectividad de Websockets)
3. socket.io-client (para que los scripts de Node puedan actuar como clientes de socket.io)
Ahora ejecuta driver.js (el código que se muestra más abajo) con Node. Para conectarte al driver desde un navegador, crea una página HTML que incluya:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.slim.js"></script>
Y también:
Es necesario importar el script socket.io.slim.js para poder utilizar la implementación de Websockets de socket.io. Usa la variable socket (var socket, más arriba) para emitir mensajes de Websocket.
Este es el código que debes ejecutar en Node para disponer de conectividad USB en un navegador a través de Websockets:
La primera parte de este código contiene la definición de la clase USBProvider (utilizando la notación ECMA 6 compatible con Node), de la que hablé en una entrada anterior. La parte central del código incluye la definición de la clase SocketProvider, que permite crear un servidor de Websockets. La mitad inferior del código es «código puente» que une las dos partes anteriores. Crea una instancia de USBProvider y otra de SocketProvider, las inicia y se comunica con ambas, de modo que pueden enviarse comandos desde el navegador al dispositivo USB mediante una sencilla estructura de objeto de datos JSON:
Para enviar un comando de dispositivo en bruto a un lector, harás algo como:
var cmd = "5669564f74656368320060040000f5e1";
dobj = dataObject( 'client',cmd,'raw command');
socket.emit( 'echo', dobj ); // enviar comando al dispositivo
El cmd La cadena que se muestra arriba representa los bytes hexadecimales en bruto del comando «Get Terminal Settings» para los dispositivos UniPay III, BTPay Mini o VP3300 de ID TECH.
En el client.html archivo que acompaña al node-driver.zip archivo mencionado anteriormente, ya he incluido un método llamado getTerminalSettings() que envía el comando anterior al dispositivo conectado. Al ejecutar ese comando en la consola de client.html, obtendrás un listado detallado de los ajustes del dispositivo, tal como se muestra a continuación:
Esta captura de pantalla muestra algunos de los ajustes predeterminados del terminal del producto BTPay Mini (VP3300) de ID TECH. (NOTA: No se muestran todos los ajustes porque la captura no abarcó la totalidad del área desplazable.)
RESUMEN
Repasemos rápidamente algunas de las conclusiones más importantes de esta entrada y de las dos anteriores sobre conectividad USB. Hemos visto, entre otras cosas, que:
1. Con la ayuda de NodeJS (un popular y merecidamente reconocido motor de ejecución de JavaScript de código abierto), puedes comunicarte fácilmente con cualquier dispositivo USB utilizando JavaScript. ¡Esto, por sí solo, ya es bastante asombroso!
2. También puedes utilizar Node fácilmente (con 75 líneas de código) para crear un servidor de Websocket que permita una comunicación entre procesos rápida, sencilla, robusta y segura en cualquier dispositivo compatible con Node.
3. Tus scripts de Node pueden transmitir fácilmente datos USB (a través de Websockets) a cualquier navegador compatible con Websockets, es decir, a cualquier navegador moderno.
4. Como resultado, es perfectamente posible utilizar JavaScript, ejecutado en un navegador web, para controlar un dispositivo USB (como un lector de tarjetas de crédito) conectado a tu portátil, PC, tableta u otro host. Todo esto, a su vez, significa que puedes crear potentes aplicaciones de pago basadas en navegador capaces de comunicarse con cualquier número de lectores de tarjetas de ID TECH sin más código que JavaScript. No es necesario escribir código nativo en C ni en C++.Así, puedes prototipar casi cualquier aplicación de pago con muchísima rapidez y con un esfuerzo de programación mínimo.
En próximas entradas, tendré mucho más que decir sobre cómo utilizar la tecnología web para crear aplicaciones de pago que aprovechen los lectores de ID TECH. ¡Vuelve pronto para más contenido!
Mientras tanto, si quieres más información sobre cualquiera de los productos de ID TECH, llámanos gratis:
