技术文章
通过浏览器控制芯片读卡器!
在 此前的文章中,我介绍了如何使用 NodeJS(这一广受欢迎的 JavaScript 运行时引擎)建立 USB 连接。在 后续文章中,我们了解了如何使用 Websockets 实现 NodeJS 与任何浏览器(甚至包括不支持 Websockets 的旧版浏览器)之间的进程间通信。
如果将 USB 连接代码与 Websockets 代码结合起来,网页便可仅通过 JavaScript 来控制 USB 设备(例如右图所示的 VP3300 三合一读卡器)。这正是我今天要向大家展示的代码。
如果您还没有下载我之前文章中的脚本,不必担心:下面的脚本(约 360 行 JavaScript 代码)包含了所需的全部内容(除了 Node 本身)。我们稍后会讨论代码,但首先来谈谈如何使用它。
1. 前往 ID TECH 知识库,下载 node-driver.zip 压缩包。(无需登录。)注意:由于该文件包含 Node.exe,体积较大(11 MB),下载需要几秒钟。此外,该文件仅适用于 Windows 系统。将压缩包保存到本地计算机的任意位置。
2. 解压压缩包。其中包含所需的全部脚本。(无需复制粘贴下方所示的代码!)
3. 在解压后的文件夹中,找到名为 start.bat的文件。运行它。(将打开一个控制台窗口,保持窗口开启即可。)Node 驱动程序现已运行。
4. 将受支持的设备(ID TECH BTPay Mini、VP3300、UniPay III、VP8800)插入计算机的 USB 端口。Node 驱动程序将自动连接该设备。
5. 使用网页浏览器打开压缩包中的 client.html 文件。点击 Connect 按钮。您应当会看到一条消息,确认已在 9901 端口建立 Websocket 连接。驱动程序将使用该连接与您的 USB 设备进行通信。
看到下方约 360 行的 JavaScript 代码了吗?将其整体复制粘贴到一个文本文件中,并保存为例如 driver.js。
如果尚未安装 NodeJS,请先在您的计算机上安装。但在使用 Node 运行 driver.js 之前,请先完成以下步骤。
使用 npm 安装以下 Node 模块(可在 Github 等处获取):
1. node-hid(用于 USB 连接)
2. socket.io(用于 Websockets 连接)
3. socket.io-client(使 Node 脚本可作为 socket.io 客户端)
随后使用 Node 运行 driver.js (即下方所示的代码)。若要从浏览器连接到该驱动程序,请创建一个包含以下内容的 HTML 页面:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.slim.js"></script>
以及:
您需要引入 socket.io.slim.js 脚本,以便使用 socket.io 的 Websockets 实现。使用 socket 变量(即上方的var socket)来发送 Websocket 消息。
以下是您需要在 Node 中运行的代码,可通过 Websockets 在浏览器中实现 USB 连接:
这段代码的第一部分包含 USBProvider 类的定义(采用 Node 支持的 ECMA 6 写法),我曾在 之前的文章中介绍过。代码的中间部分是 SocketProvider 类的定义,用于创建 Websockets 服务器。代码的下半部分是将前两部分串联起来的"衔接代码"。它创建一个 USBProvider 实例和一个 SocketProvider 实例,启动它们并与各方通信,从而可以使用简单的 JSON 数据对象结构,将命令从浏览器发送到 USB 设备:
若要向读卡器发送原始设备命令,您可以这样写:
var cmd = "5669564f74656368320060040000f5e1";
dobj = dataObject( 'client',cmd,'raw command');
socket.emit( 'echo', dobj ); // 向设备发送命令
该 cmd 上述字符串表示 ID TECH 的 UniPay III、BTPay Mini 或 VP3300 设备的"获取终端设置"命令的原始十六进制字节。
在前面提到的 client.html 归档文件所附带的 node-driver.zip 文件中,我已经包含了一个名为 getTerminalSettings() 的方法,可向已连接的设备发送上述命令。当您在 client.html 控制台中运行该命令时,会得到详细的设备设置列表,如下所示:
此屏幕截图显示了 ID TECH BTPay Mini (VP3300) 产品的部分默认终端设置。(注意:由于截图未能捕获整个可滚动区域,因此并未显示所有设置。)
让我们快速回顾一下本文以及前两篇关于 USB 连接文章中的一些重点内容。我们已经看到,其中包括:
1. 借助 NodeJS(一款广受欢迎的开源 JavaScript 运行时引擎),您可以使用 JavaScript 轻松与任何 USB 设备通信。仅这一点就已经相当令人惊叹!
2. 您还可以使用 Node 轻松地(仅需 75 行代码)创建一个 Websocket 服务器,从而在任何支持 Node 的设备上实现快速、便捷、稳健且安全的进程间通信。
3. 您的 Node 脚本可以轻松地(通过 Websockets)将 USB 数据传递给任何支持 Websockets 的浏览器——也就是说,任何现代浏览器。
4. 因此,可以非常方便地使用在 Web 浏览器中运行的 JavaScript,来控制连接到您的笔记本电脑、PC、平板电脑或其他主机的 USB 设备(如刷卡器)。这反过来意味着,您只需使用 JavaScript,无需其他代码,就可以创建功能强大的基于浏览器的支付应用程序,并与任意数量的 ID TECH 刷卡器通信。 无需用 C 或 C++ 编写原生代码。因此,您可以极快地完成几乎任何支付应用的原型开发,且编码工作量极小。
在后续文章中,我会就如何利用 Web 技术创建借助 ID TECH 读卡器的支付应用进行更详细的探讨。敬请关注!
与此同时,如果您想进一步了解 ID TECH 的任何产品,欢迎拨打我们的免费电话:
