Post Técnico
Controle um Leitor de Cartão com Chip pelo seu Navegador!
Em um post anterior, mostrei como estabelecer conectividade USB usando o NodeJS, o popular motor de execução JavaScript. Em um post de acompanhamento, vimos como os WebSockets podem ser usados para comunicação entre processos no NodeJS e em qualquer navegador (inclusive navegadores mais antigos que não suportam WebSockets).
Ao combinar o código de conectividade USB com o código de WebSockets, torna-se possível que uma página web controle um dispositivo USB (como o nosso VP3300, leitor de cartão com 3 interfaces, exibido à direita) usando apenas JavaScript. É exatamente esse código que quero apresentar hoje.
Caso você ainda não tenha baixado os scripts dos meus posts anteriores, não se preocupe: o script abaixo (com aproximadamente 360 linhas de JavaScript) contém tudo o que você precisa (exceto o próprio Node). Vamos falar sobre o código em instantes, mas primeiro, veja como utilizá-lo.
COMO USAR O SCRIPT (DA FORMA MAIS SIMPLES)
1. Acesse a Base de Conhecimento da ID TECH e baixe o node-driver.zip arquivo. (Não é necessário login.) NOTA: Este é um download considerável (11 megabytes), pois inclui o Node.exe — aguarde alguns segundos. Além disso, é compatível apenas com máquinas Windows. Salve o arquivo em qualquer local do seu computador.
2. Extraia o arquivo. Ele contém todos os scripts necessários. (Não é preciso copiar/colar o código exibido abaixo!)
3. Na pasta extraída, localize o arquivo chamado start.bat. Execute-o. (Uma janela de console será aberta; deixe-a aberta.) O driver Node está em execução.
4. Conecte um dispositivo compatível (ID TECH BTPay Mini, VP3300, UniPay III, VP8800) à porta USB do seu computador. O driver Node se conectará a ele automaticamente.
5. Abra o arquivo client.html (contido no arquivo extraído) em um navegador web. Clique no botão Conectar. Você deverá ver uma mensagem confirmando que uma conexão Websocket foi estabelecida na porta 9901. O driver utilizará essa conexão para se comunicar com o seu dispositivo USB.
COMO USAR O SCRIPT (USUÁRIOS AVANÇADOS)
Veja as cerca de 360 linhas de JavaScript mais abaixo? Copie e cole todo esse conteúdo em um arquivo de texto e salve-o como, por exemplo, driver.js.
Instale o NodeJS em sua máquina, caso ainda não tenha feito isso. Antes de executar o driver.js com o Node, siga os passos abaixo.
Use o npm para instalar os seguintes módulos Node (disponíveis no Github, entre outros):
1. node-hid (para conectividade USB)
2. socket.io (para conectividade via Websockets)
3. socket.io-client (para que scripts Node possam funcionar como clientes socket.io)
Agora execute o driver.js (o código exibido abaixo) usando o Node. Para conectar ao driver a partir de um navegador, crie uma página HTML que contenha:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.slim.js"></script>
E também:
É necessário importar o script socket.io.slim.js para utilizar a implementação de Websockets do socket.io. Use a variável socket (var socket, acima) para emitir mensagens via Websocket.
Abaixo está o código que deve ser executado no Node para habilitar a conectividade USB em um navegador, por meio de Websockets:
A primeira parte deste código contém a definição da classe USBProvider (utilizando a notação ECMA 6 compatível com o Node), sobre a qual comentei em uma publicação anterior. A parte central do código contém a definição da classe SocketProvider, que permite a criação de um servidor Websockets. A metade inferior do código é um "shim" que integra as duas primeiras partes. Ele cria uma instância de USBProvider e uma instância de SocketProvider, inicializa ambas e estabelece a comunicação entre elas, de modo que os comandos possam ser enviados do navegador ao dispositivo USB por meio de uma estrutura simples de objeto de dados JSON:
Para enviar um comando bruto ao leitor, utilize algo como:
var cmd = "5669564f74656368320060040000f5e1";
dobj = dataObject( 'client',cmd,'raw command');
socket.emit( 'echo', dobj ); // envia o comando ao dispositivo
O cmd A string apresentada acima representa os bytes hexadecimais brutos do comando "Get Terminal Settings" para os dispositivos UniPay III, BTPay Mini ou VP3300 da ID TECH.
No client.html arquivo que acompanha o node-driver.zip arquivo compactado mencionado anteriormente, já incluí um método chamado getTerminalSettings() que envia o comando acima ao dispositivo conectado. Ao executar esse comando no console do client.html, você obtém uma listagem detalhada das configurações do dispositivo, conforme mostrado abaixo:
Esta captura de tela exibe algumas das configurações padrão do Terminal do produto ID TECH BTPay Mini (VP3300). (OBSERVAÇÃO: Nem todas as configurações são exibidas, pois a captura de tela não registrou a área de rolagem completa.)
RESUMO
Vamos revisar rapidamente os principais pontos abordados neste artigo e nos dois artigos anteriores sobre conectividade USB. Entre outras coisas, vimos que:
1. Com o auxílio do NodeJS (um popular e reconhecido mecanismo de execução JavaScript de código aberto), é possível comunicar-se facilmente com qualquer dispositivo USB utilizando JavaScript. Por si só, isso é bastante impressionante!
2. Também é possível, de forma simples (com apenas 75 linhas de código), usar o Node para criar um servidor Websocket que permita uma comunicação entre processos rápida, fácil, robusta e segura em qualquer dispositivo compatível com Node.
3. Seus scripts Node podem transmitir facilmente dados USB (via Websockets) para qualquer navegador compatível com Websockets — ou seja, qualquer navegador moderno.
4. Como resultado, torna-se perfeitamente viável utilizar JavaScript, executando em um navegador web, para controlar um dispositivo USB (como um leitor de cartão de crédito) conectado ao seu laptop, PC, tablet ou outro host. Tudo isso significa que você pode criar aplicações de pagamento baseadas em navegador, com grande poder de processamento, capazes de se comunicar com qualquer quantidade de leitores de cartão da ID TECH usando apenas JavaScript. Não há necessidade de escrever código nativo em C ou C++.Assim, é possível prototipar praticamente qualquer aplicativo de pagamento de forma muito rápida e com pouco esforço de programação.
Em posts futuros, terei muito mais a dizer sobre como usar tecnologia web para criar aplicativos de pagamento que aproveitam os leitores da ID TECH. Volte em breve para mais novidades!
Enquanto isso, se quiser saber mais sobre qualquer um dos produtos da ID TECH Products, ligue gratuitamente:
