Php 通过网站与现金出纳沟通

Php 通过网站与现金出纳沟通,php,c,Php,C,我目前正在为我的公司构建POS解决方案。最难的部分是购物的现金抽屉,因为我没有太多的经验与他们,并希望一个USB现金抽屉。我找到了一个我感兴趣的模型 CR-4005 供应商包括一个驱动程序,可在此处找到 这允许您使用dll文件打开抽屉等。给出的代码示例如下所示: Public Declare Function OpenUSB Lib "usbcr.dll" () As Long 我在C语言方面有一些经验,但在谷歌方面,我相信我能理解这一部分 我遇到的问题是,该解决方案实际上只是一个网站托管

我目前正在为我的公司构建POS解决方案。最难的部分是购物的现金抽屉,因为我没有太多的经验与他们,并希望一个USB现金抽屉。我找到了一个我感兴趣的模型

CR-4005

供应商包括一个驱动程序,可在此处找到

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

Public Declare Function OpenUSB Lib "usbcr.dll" () As Long
我在C语言方面有一些经验,但在谷歌方面,我相信我能理解这一部分

我遇到的问题是,该解决方案实际上只是一个网站托管在异地,我需要能够做的是从站点向使用它的客户机发出命令。这样,当他们完成销售时,我就可以打开那台机器的抽屉

我需要澄清的是我是如何做这件事的。例如,我假设我在客户机上安装了驱动程序,并插入了现金抽屉。然后当他们访问站点时,我需要执行上面显示的C命令来打开抽屉。我遇到的问题是,我的脑子里总是想着这是怎么回事。当然,如果我在服务器上执行该命令,它将有效地查看服务器的usb端口并尝试打开抽屉。而不是向客户机发出命令。因此,为了解决这个问题,有可能在客户机上安装c文件,然后我只需在站点上使用

C:\Windows\execute.bat
然后调用客户机上的c文件

我知道我没有太多的信息可以提供,因为我正在尝试在继续购买之前弄清楚这一点,我可能过于复杂了,但任何提示或信息都将不胜感激。此外,我还没有完全建立在这个模型上,因此,如果您知道一个具有一些好的文档或现有解决方案的替代方案,我也愿意这样做

注释

我知道ChromeAPI调用可能会有一个解决方案

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

更新

我的网站,包括POS端的东西是建立和准备去。这是使用PHP构建的,托管在外部服务器上。我们通过域访问该站点

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


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

不是真正的答案,但太长,无法发表评论

在我看来,您似乎希望从浏览器调用本机代码。这不会让很多人满意,尽管我知道实现这一点的确切方法。它包括Internet Explorer和COM服务器(activeX)。IE可以创建activeX程序的实例,您需要编写该实例

然后,此activeX可以向供应商提供的DLL发出命令。但问题是,如果我坐在其中一个终端上,有一个键盘,我也可以打开抽屉。您还需要一种从服务器向客户端传达打开抽屉意图的方法。我想您可以使用WebSocket来维护客户机和服务器之间的通信通道,通过该通道可以发出打开抽屉的意图

在锁定的情况下,这可能没什么问题,尽管我在这里没有考虑也没有提到各种安全问题

总而言之,这里有一个可能的解决方案:

  • 在客户端和服务器之间建立WebSocket连接
  • 通过此通道从服务器向客户端浏览器发出命令
  • 在浏览器中捕获此命令,然后创建ActiveX对象
  • 使用javascript,告诉此activeX对象打开抽屉
  • 在ActiveX对象内部,通过调用供应商提供的DLL中的相应函数来响应打开抽屉的请求
  • 我对亲自实施这一点感到有点不安(并希望得到丰厚的补偿)

    顺便说一句,在其他示例中,您可以通过这种方式控制MS Office—允许您从浏览器中创建电子表格/word文档/etc,用用户输入的信息填充新文档

    这是我18个月前为一个项目编写的一个JS文件,它控制Excel

    //
    // jsExcelObj.js
    // 28/08/2012 
    
    // the (only Excel) app instance - we only want to have 1
    // **** don't access this variable directly ****
    var jsExcelApp = null;
    
    /*****************************************************************************
        Excel class
    *****************************************************************************/
    function startExcel()
    {
        jsExcelApp = new ActiveXObject("Excel.Application");
    }
    
    function stopExcel()
    {
        jsExcelApp.Quit();
        delete(jsExcelApp);
        jsExcelApp = null;
    }
    
    function jsExcelWorkbook(filename)
    {
        if (jsExcelApp == null)
            startExcel(); //jsExcelApp = new ActiveXObject("Excel.Application");
    
        this.mFilename = filename;
        this.mExcelSheet = null;
        this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
    
        this.close = function()
        {
            this.mWorkbook.Close(false);
            this.mFilename = null;
            this.mExcelSheet = null;
            this.mWorkbook = null;
        }
    
        this.open = function(filename)
        {
            if (jsExcelApp == null)
                startExcel();
    
            if (this.mFilename != null)
                this.close();
    
            this.mFilename = filename;
            this.mExcelSheet = null;
            this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
        }
    
        this.setSheet = function(sheetName)
        {
            this.mExcelSheet = this.mWorkbook.Worksheets(sheetName);
        }
    
        this.getCellValue = function(column, row)
        {
            return this.mExcelSheet.Cells(row, column).value;
        }
    
        // returns the cells background colour as a html hex color value - e.g "7a554a"
        this.getCellColor = function(column, row)
        {
            var hexStrVel, r, g, b, decNum;
    
            decNum =  this.mExcelSheet.Cells(row, column).Interior.Color;
            // get a hexidecimal string representation of the number
            hexStrVal = decNum.toString(16);
    
            // pad to 6 bytes long
            while (hexStrVal.length < 6)
            {
                hexStrVal = "0" + hexStrVal;
            }
    
            // extract the 3 components
            r = hexStrVal.substr(4,2);
            g = hexStrVal.substr(2,2);
            b = hexStrVal.substr(0,2);
    
            return r+g+b; // return them in reverse order
        }
    }
    
    //
    //jsExcelObj.js
    // 28/08/2012 
    //(仅Excel)应用程序实例-我们只希望有1个
    //****不要直接访问此变量****
    var jsExcelApp=null;
    /*****************************************************************************
    Excel类
    *****************************************************************************/
    函数startExcel()
    {
    jsExcelApp=新的ActiveXObject(“Excel.Application”);
    }
    函数stopExcel()
    {
    jsExcelApp.Quit();
    删除(jsExcelApp);
    jsExcelApp=null;
    }
    函数jsExcelWorkbook(文件名)
    {
    如果(jsExcelApp==null)
    startExcel();//jsExcelApp=newActivexObject(“Excel.Application”);
    this.mFilename=文件名;
    this.mExcelSheet=null;
    this.mWorkbook=jsExcelApp.Workbooks.Open(文件名);
    this.close=函数()
    {
    此.mWorkbook.Close(false);
    this.mFilename=null;
    this.mExcelSheet=null;
    this.mWorkbook=null;
    }
    this.open=函数(文件名)
    {
    如果(jsExcelApp==null)
    startExcel();
    if(this.mFilename!=null)
    这个。关闭();
    this.mFilename=文件名;
    this.mExcelSheet=null;
    this.mWorkbook=jsEx
    
    <script src='script/jsExcelObj.js'></script>
    <script>
    var fullyQualifiedPathToExcelWorkbook = "C:/someFile.xls";
    var mExcel = new jsExcelWorkbook(fullyQualifiedPathToExcelWorkbook);
    mExcel.setSheet("Sheet1");
    var col1Row1 = mExcel.getCellValue(1, 1);
    alert(col1Row1);
    mExcel.close();
    stopExcel();
    </script>
    
    $.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
        }
    });
    
    <?php
    
    $texttoprint = $_POST['printthis']; 
    $texttoprint = stripslashes($texttoprint); 
    
    $fp = fsockopen("192.168.10.30", 9100, $errno, $errstr, 10); 
    if (!$fp) { 
        echo "$errstr ($errno)<br />\n"; 
    } else { 
        fwrite($fp, "\033\100"); 
        $out = $texttoprint . "\r\n"; 
        fwrite($fp, $out); 
        fwrite($fp, "\012\012\012\012\012\012\012\012\012\033\151\010\004\001"); 
        fclose($fp); 
    } 
    
    ?>