Post tecnico
Controlla un lettore di carte con chip dal tuo browser!
In un articolo precedente, ho mostrato come stabilire la connettività USB utilizzando NodeJS, il popolare motore di runtime JavaScript. In un articolo successivo, abbiamo visto come i Websocket possano essere utilizzati per la comunicazione tra processi tra NodeJS e qualsiasi browser (anche browser meno recenti che non supportano i Websocket).
Combinando il codice per la connettività USB con quello per i Websocket, è possibile far controllare a una pagina web un dispositivo USB (come il nostro VP3300, lettore di carte a 3 modalità, illustrato a destra) utilizzando esclusivamente JavaScript. È proprio questo il codice che voglio mostrarvi oggi.
Se non avete ancora scaricato gli script dai miei articoli precedenti, non preoccupatevi: lo script qui sotto (circa 360 righe di JavaScript) contiene tutto il necessario (eccetto Node stesso). Parleremo del codice tra poco, ma prima vediamo come utilizzarlo.
COME UTILIZZARE LO SCRIPT (IL MODO SEMPLICE)
1. Accedere alla Knowledge Base di ID TECH e scaricare il file node-driver.zip . (Nessun accesso richiesto.) NOTA: Si tratta di un download di dimensioni considerevoli (11 megabyte), poiché include Node.exe; attendere quindi qualche secondo. Inoltre: è compatibile esclusivamente con sistemi Windows. Salvare l'archivio in qualsiasi posizione del computer locale.
2. Estrarre l'archivio. Contiene tutti gli script necessari. (Non è necessario copiare e incollare il codice riportato di seguito!)
3. Nell'archivio estratto, individuare il file denominato start.bat. Eseguirlo. (Si aprirà una finestra della console; lasciarla aperta.) Il driver Node è ora in esecuzione.
4. Collegare un dispositivo supportato (ID TECH BTPay Mini, VP3300, UniPay III, VP8800) alla porta USB del computer. Il driver Node si connetterà automaticamente al dispositivo.
5. Aprire il file client.html (incluso nell'archivio) con un browser web. Fare clic sul pulsante Connetti. Dovrebbe apparire un messaggio che conferma l'avvenuta connessione Websocket sulla porta 9901. Il driver utilizzerà questa connessione per comunicare con il dispositivo USB.
COME UTILIZZARE LO SCRIPT (UTENTI AVANZATI)
Vedi le circa 360 righe di JavaScript riportate più in basso? Copia e incolla tutto il codice in un file di testo e salvalo con un nome a piacere, ad esempio driver.js.
Installa NodeJS sul tuo computer, se non l'hai già fatto. Prima di eseguire driver.js con Node, però, segui i passaggi indicati di seguito.
Usa npm per installare i seguenti moduli Node (disponibili su Github e altri repository):
1. node-hid (per la connettività USB)
2. socket.io (per la connettività WebSocket)
3. socket.io-client (per consentire agli script Node di fungere da client socket.io)
Ora esegui driver.js (il codice mostrato di seguito) tramite Node. Per connetterti al driver da un browser, crea una pagina HTML contenente:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.slim.js"></script>
Inoltre:
È necessario importare lo script socket.io.slim.js per utilizzare l'implementazione Websockets di socket.io. Utilizzare la variabile socket (var socket, sopra) per inviare messaggi Websocket.
Ecco il codice da eseguire in Node per abilitare la connettività USB in un browser tramite Websockets:
La prima parte di questo codice contiene la definizione della classe USBProvider (usando la notazione ECMA 6 supportata da Node), di cui ho parlato in un post precedente. La parte centrale del codice contiene la definizione della classe SocketProvider, che consente la creazione di un server Websockets. La parte inferiore del codice è il "codice shim" che collega le prime due parti. Crea un'istanza di USBProvider e una di SocketProvider, le avvia e interagisce con entrambe, in modo che i comandi possano essere inviati dal browser al dispositivo USB utilizzando un semplice costrutto basato su oggetti dati JSON:
Per inviare un comando raw al dispositivo di lettura, si procederà come segue:
var cmd = "5669564f74656368320060040000f5e1";
dobj = dataObject( 'client',cmd,'raw command');
socket.emit( 'echo', dobj ); // invia il comando al dispositivo
La piattaforma cmd La stringa mostrata sopra rappresenta i byte esadecimali grezzi del comando "Get Terminal Settings" per i dispositivi UniPay III, BTPay Mini o VP3300 di ID TECH.
Nel file client.html che accompagna l'archivio node-driver.zip menzionato in precedenza, ho già incluso un metodo chiamato getTerminalSettings() che invia il comando sopra indicato al dispositivo connesso. Eseguendo quel comando nella console di client.html, si ottiene un elenco dettagliato delle impostazioni del dispositivo, come mostrato di seguito:
Questo screenshot mostra alcune delle impostazioni predefinite del terminale del prodotto ID TECH BTPay Mini (VP3300). (NOTA: Non tutte le impostazioni sono visibili poiché lo screenshot non ha catturato l'intera area scorrevole.)
RIEPILOGO
Rivediamo rapidamente i punti principali emersi da questo articolo e dai due precedenti dedicati alla connettività USB. Abbiamo visto, tra l'altro, che:
1. Con l'ausilio di NodeJS (un popolarissimo motore di runtime JavaScript open-source, e a ragione), è possibile comunicare facilmente con qualsiasi dispositivo USB utilizzando JavaScript. Questo, di per sé, è davvero straordinario!
2. È inoltre possibile, con sole 75 righe di codice, utilizzare Node per creare un server Websocket che consenta una comunicazione inter-processo rapida, semplice, robusta e sicura su qualsiasi dispositivo che supporti Node.
3. Gli script Node possono trasmettere facilmente i dati USB (tramite Websocket) a qualsiasi browser che supporti i Websocket — ovvero qualsiasi browser moderno.
4. Di conseguenza, è facilmente possibile utilizzare JavaScript, in esecuzione in un browser web, per controllare un dispositivo USB (come un lettore di carte di credito) collegato al proprio laptop, PC, tablet o altro host. Tutto ciò significa, in definitiva, che è possibile creare potenti applicazioni di pagamento basate su browser, in grado di comunicare con un qualsiasi numero di lettori di carte ID TECH utilizzando esclusivamente codice JavaScript. Non è necessario scrivere codice nativo in C o C++.È quindi possibile prototipare quasi qualsiasi applicazione di pagamento in tempi molto rapidi, con un impegno di sviluppo minimo.
Nei prossimi articoli approfondirò ulteriormente come utilizzare le tecnologie web per creare applicazioni di pagamento che sfruttano i lettori di ID TECH. Continuate a seguirci!
Nel frattempo, se desiderate saperne di più su uno qualsiasi dei ID TECH Products, contattateci al numero verde:
