与网站的现金抽屉沟通

The*_*Rat 14 php c

我目前正在为我的公司建立一个POS解决方案.最难的部分是购买现金抽屉,因为我没有太多的经验,他们更喜欢USB现金抽屉.我找到了一个我感兴趣的模型

CR-4005

http://www.thebarcodewarehouse.co.uk/epos-systems/cash-drawers/cr-4005-b/

供应商包括可在此处找到的驱动程序

http://www.posiflexusa.com/driver.php

这允许您使用dll文件打开抽屉等.给出的代码示例如下:

Public Declare Function OpenUSB Lib "usbcr.dll" () As Long
Run Code Online (Sandbox Code Playgroud)

我对C有一点经验但是谷歌我确信我可以把这一部分搞清楚.

我遇到的问题是该解决方案实际上是一个非现场托管的网站,我需要做的是从网站发布命令到使用它的客户端机器.因此,当他们完成销售时,我可以打开该特定机器的抽屉.

我需要澄清的是我是如何做到这一点的.例如,我假设我在客户端计算机上安装驱动程序并插入现金抽屉.然后,当他们访问该站点时,我需要执行上面显示的C命令来打开抽屉.我遇到的问题是如何解决这个问题.当然,如果我在服务器上执行命令,它将有效地查看服务器USB端口并尝试打开抽屉.而不是将命令发送到客户端机器.因此,为了解决这个问题,有可能在客户端机器上有c文件然后我只是使用类似的东西调用网站上的文件

C:\Windows\execute.bat
Run Code Online (Sandbox Code Playgroud)

它反过来调用客户端计算机上的c文件.

我知道我没有提供很多信息,因为我想在进行购买之前弄清楚这一点,我可能过于复杂,但任何指针或信息都会非常感激.此外,我还没有完全按照这个模型设置,所以如果您知道一些有良好文档或现有解决方案的替代方案,我也对此持开放态度.

笔记

我知道有一个可能的解决方案,使用chrome api调用

我可能会安装xampp并创建一个简单的php文件,调用exe来完成必要的工作.因此,访问客户端计算机上的本地地址可能是另一个潜在的想法(即127.0.0.1/open.php).

更新

我的网站包括POS方面的东西已经建成并准备好了.这是使用PHP构建的,并托管在外部服务器上.我们通过域名访问该网站.

当用户在外部站点上执行特定操作时,需要通过打开本地文件(即可以打开抽屉的exe)或通过访问机器上的本地Web服务器(即localhost)来打开本地工作人员直到抽屉. /打开.

直通抽屉是上面列出的抽屉,它通过USB连接到客户机器.没有使用收据打印机.

Gus*_*bio 24

让我说清楚:

  1. 你做了一个网络应用程序,这是一个POS(可能是PHP)
  2. 您的用户通过本地服务器上的Web浏览器访问POS
  3. 您需要能够打开现金抽屉客户端...(例如,将更改返回给客户)

选项1:

考虑到:

  • 您可以控制客户POS客户端(如您可以安装软件和设置策略)
  • 您可以安装Google Chrome并将其设置为您的应用的要求

然后你可以尝试使用原生的chrome USB库:

http://developer.chrome.com/apps/app_usb

有它的警告,是的,但你可能有运气,并且设备可以打开它.我已经为POS软件公司工作了几年,串口和USB现金抽屉都有一个非常简单的协议,即使使用FoxPro也可以打开它们.

您必须创建一个小型Chrome应用程序,它发送命令以打开抽屉.这个应用程序应该公开一个函数,可以在您编写操作或将事务提交到服务器时调用(例如,当您保存销售记录时),这样您就可以在jQuery或javascript中附加回调,这样做会在您发布后执行此操作数据并获得成功的响应.

选项2:

Java小程序:

我没有这方面的经验.但是您可以使用JNI(java本机接口)来调用本机代码.我不确定applet容器是否以不允许你这样做的方式进行沙盒化,但是这两个链接可能会派上用场:

如何使用JNI从Java调用本机(DLL)代码从java 调用C库例程

选项3:

以操作方式执行操作:

另一种选择,对我来说似乎是最简单的选择,是在OS级别映射击键,以便组合执行某些命令.您可以在这里看到如何在Windows中执行此操作的说明.在linux(gnome和kde等)中,这很容易.

一旦你这样做了,你就可以使用这个 "模拟"击键的jQuery库,所以,当你收到交易完成的回复并且你需要打开现金抽屉时,你会想要回调一个函数,执行你根据我给你的文章预先配置的模拟击键.

当然,这个命令将运行一个本地本机应用程序,实际打开抽屉,可以是C/C++/C#或任何支持的设备API.但我确信它是一个标准界面,因此您可以使用任何语言轻松编写该应用程序.这是 C#的良好开端.

选项4:

本地Web服务器.

现在您提到了一个本地Web服务器,实际上这可能是一个选项.但是,为什么要在客户端计算机上安装XAMPP?有一种更好的方法.答案是在C#/ .NET中编写一个非常小而简单的HTTP Web服务器.所以遵循这种方法你会想:

  1. 在C#/ .Net中写一个HTTP服务器,听一个特定的端口(这里是一个指南,它只有50行代码)
  2. 在你的C#代码,你会想要么使用任何集成的API与硬件,未来的P/Invoke的C库(我不推荐),或者干脆利用发送到USB端口命令的做法.因此,在操作系统集成的C#中打开抽屉,打印或做任何你需要的东西会更简单.(即使对于单声道的linux/mac)
  3. 在C#中设置你的代码,这样服务器只能监听本地地址,所以没有人可以打开,除非是同一个网络,哎呀,我只允许127.0.0.1只是为了确保只有本地机器可以打开它.
  4. 将此编译的exe放在Windows自动启动上,以便每当计算机启动打开收银台的迷你Web服务器时也会启动.
  5. 只要事务成功到POS服务器就抓住你的回调,最后做类似的事情:

    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: 1,
        url: '127.0.0.1:8088/open',
        error: function() {
            alert('Could not open cash drawer');
        },
        success: function() {
            //do something else
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

因此,您将向本地计算机发送POST请求,该请求将侦听8088端口中的HTTP协议(或您在代码中设置的任何内容),然后它将在内部处理请求,如打开抽屉,如果您抛出该代码中的异常比您可以从此C#迷你网络服务器返回HTTP 500响应,以便您在jquery(或您使用的任何库)的错误处理程序上捕获它

我强烈建议,就像我告诉你的那样,这个应用程序只是出于安全原因才听取本地请求,即使你只是做一个简单的操作.它的工作原理是因为本地机器正在调用客户端jquery代码.

您还可以优化Web服务器应用程序,以便它读取.ini文件或某些设置文件(.Net具有.config默认值,这是可行的方式),以便您可以根据每个客户进行调整而不进行硬编码选项.

祝好运!让我们知道你是怎么做到的