ID TECH
Contatto
Tutti gli articoli tecnici

Post tecnico

Gestisci un lettore di carte chip direttamente 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 di approfondimento, abbiamo visto come i WebSocket possano essere utilizzati per la comunicazione tra processi tra NodeJS e qualsiasi browser (inclusi i browser più datati che non supportano i WebSocket).

Collegando il codice per la connettività USB con il codice per i WebSocket, è possibile controllare un dispositivo USB (come il nostro VP3300, il lettore di carte a tre modalità mostrato a destra) tramite una pagina web utilizzando esclusivamente JavaScript. È proprio questo il codice che vi mostrerò oggi.

Se non avete ancora scaricato gli script dai miei articoli precedenti, non preoccupatevi: lo script riportato di seguito (circa 360 righe di JavaScript) contiene tutto il necessario (ad eccezione di Node stesso). Tra poco parleremo del codice, ma prima vediamo come utilizzarlo.

COME UTILIZZARE LO SCRIPT (IL METODO SEMPLICE)

1. Accedete alla Knowledge Base di ID TECH e scaricate il node-driver.zip archivio. (Nessun accesso richiesto.) NOTA: Si tratta di un download di dimensioni considerevoli (11 megabyte), poiché include Node.exe, quindi attendere qualche secondo. Inoltre: è compatibile esclusivamente con sistemi Windows. Salvare l'archivio in qualsiasi posizione sul proprio computer locale.

2. Estrarre l'archivio. Contiene tutti gli script necessari. (Non è necessario copiare e incollare il codice mostrato 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 (contenuto nell'archivio) con un browser web. Fare clic sul pulsante Connetti. Verrà visualizzato un messaggio di conferma che indica che è stata stabilita una connessione Websocket sulla porta 9901. Il driver utilizzerà questa connessione per comunicare con il dispositivo USB.

COME UTILIZZARE LO SCRIPT (UTENTI AVANZATI)

Si notino le circa 360 righe di JavaScript riportate più avanti? Copiare e incollare l'intero blocco in un file di testo e salvarlo con un nome come, ad esempio, driver.js.

Installa NodeJS sul tuo computer se non lo hai già fatto. Prima di eseguire driver.js con Node, però, completa i passaggi seguenti.

Usa npm per installare i seguenti moduli Node (disponibili su Github, ecc.):

1. node-hid (per la connettività USB)

2. socket.io (per la connettività WebSocket)

3. socket.io-client (per consentire agli script Node di funzionare come client socket.io)

Ora esegui driver.js (il codice mostrato di seguito) utilizzando Node. Per connettersi al driver da un browser, crea una pagina HTML che contenga:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.slim.js"></script>

E inoltre:

Per utilizzare l'implementazione Websockets di socket.io è necessario importare lo script socket.io.slim.js. 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 (utilizzando la notazione ECMA 6 supportata da Node), di cui ho parlato in un articolo 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 è uno "shim" che collega le prime due parti. Crea un'istanza di USBProvider e una di SocketProvider, le avvia e le mette in comunicazione tra loro, in modo che i comandi possano essere inviati dal browser al dispositivo USB utilizzando un semplice costrutto di oggetti dati JSON:

Per inviare un comando grezzo al dispositivo di lettura, si procede come segue:

var cmd = "5669564f74656368320060040000f5e1";

dobj = dataObject( 'client',cmd,'raw command');

socket.emit( 'echo', dobj ); // invia il comando al dispositivo

Il 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 client.html file allegato all'archivio node-driver.zip menzionato in precedenza, ho già incluso un metodo chiamato getTerminalSettings() che invia il comando sopra indicato al dispositivo collegato. Eseguendo tale 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 Terminal predefinite 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

Riprendiamo brevemente i punti salienti di questo articolo e dei due precedenti sulla connettività USB. Abbiamo visto, tra le altre cose, che:

1. Con l'ausilio di NodeJS (un motore di runtime JavaScript open-source estremamente apprezzato), è possibile comunicare facilmente con qualsiasi dispositivo USB tramite 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 dati USB (tramite Websocket) a qualsiasi browser che supporti i Websocket, ovvero qualsiasi browser moderno.

4. Di conseguenza, è assolutamente possibile utilizzare JavaScript, eseguito 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 ultima analisi, che è possibile creare potenti applicazioni di pagamento basate su browser in grado di comunicare con qualsiasi lettore 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 modo estremamente rapido, con un minimo sforzo di programmazione.

Nei prossimi articoli avrò molto altro da dire su come utilizzare le tecnologie web per creare applicazioni di pagamento che sfruttano i lettori di ID TECH. Torna presto per saperne di più!

Nel frattempo, se desideri saperne di più su uno qualsiasi dei prodotti di ID TECH, chiamaci al numero verde:

Numero verde
1-800-984-1010