javascript - 如何从 php 服务器打印到 POS 打印机

标签 javascript php mysql printing pos

我有一个送货服务网络,客户从网站下订单,在餐厅中,用户通过自动打印订单票来接收订单。顾客下单后,餐厅必须自动打印门票。在使用 XAMPP 的本地主机中,我可以很好地打印票据,但问题是如何从主机打印。

我创建了使用 CRON 作业运行的下一个代码,但到目前为止票证尚未打印。我每 1 分钟执行一次这个 Cron。我还在计算机上配置了打印机,启用共享打印机选项。

这是 cron 作业的代码:

      include_once "../../../app/config.inc.php";
              include_once "../../../app/Connection.php";

              class PrintTickets
              {

              public static function CheckOrderToPrint ($connection, $status) 
              {
                    $category = [];

                    if (isset($connection)) {
                      try {

                        $sql = "SELECT * FROM orders WHERE status =:status ORDER BY id ASC";
                        $sentence = $connection ->prepare($sql);
                        $sentence -> bindParam (':status', $status, PDO::PARAM_STR);
                        $sentence -> execute();
                        $result = $sentence -> fetch();

                    if (!empty($result)) {
                        $category = [$result['id'], 
                                    $result['id_preOrder'],
                                    $result['total_amount'], 
                                    $result['discount'],
                                    $result['liefergenbuhr'],
                                    $result['gesamtbetrag'],
                                    $result['order_number'],
                                    $result['status']];
                         }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $category;
                }




                public static function CheckPreOrderToPrint ($connection, $id) 
              {
                  $category = [];

                    if (isset($connection)) {
                      try {

                        $sql = "SELECT * FROM pre_order WHERE id =:id";
                        $sentence = $connection ->prepare($sql);
                        $sentence -> bindParam (':id', $id, PDO::PARAM_INT);
                        $sentence -> execute();
                        $result = $sentence -> fetch();

                    if (!empty($result)) {
                        $category = [$result['id'], 
                                    $result['order_num'],
                                    $result['address'], 
                                    $result['zip_code'],
                                    $result['other_field'],
                                    $result['type_order'],
                                    $result['status']];
                         }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $category;
                }


                public static function CheckOrderDetailsToPrint($connection, $id) 
                  {
                  $category = [];
                    if (isset($connection)) {
                      try {
                        $sql = "SELECT * FROM order_details WHERE id_order = :id_order";
                        $sentence = $connection ->prepare($sql);
                        $sentence -> bindParam (':id_order', $id, PDO::PARAM_INT);
                        $sentence -> execute();
                        $result = $sentence -> fetchAll();

                    if (count($result)) {
                        foreach ($result as $row) 
                          {
                            $category[] = [$row['id'], $row['id_order'], $row['id_dish'], $row['quantity']];
                          } 
                        }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $category;
                }


               public static function CheckOrderDishesToPrint($connection, $id) 
                  {
                  $category = [];
                    if (isset($connection)) {
                      try {
                        $sql = "SELECT p.*, c.name AS category FROM products p INNER JOIN category c ON p.id_category = c.id WHERE p.id = :id";
                        $sentence = $connection ->prepare($sql);
                        $sentence -> bindParam (':id', $id, PDO::PARAM_INT);
                        $sentence -> execute();
                        $result = $sentence -> fetch();

                    if (!empty($result)) {
                        //foreach ($result as $row) {
                            $category[] = [$result['id'], 
                                    $result['id_category'],
                                    $result['name'], 
                                    $result['ingredients'],
                                    $result['price'],
                                    $result['status'],
                                    $result['category']];
                          //}
                         }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $category;
                }


                 public static function UpdateOrdersPrint ($connection, $id, $status) {
                   $preOrder_saved = false;
                   $lastId = 0;
                  if (isset($connection)) {

                    try {
                      $sql = "UPDATE orders SET status = :status WHERE id = :id"; 
                      $sentence = $connection -> prepare($sql);
                      $sentence -> bindParam (':id', $id, PDO::PARAM_INT);
                      $sentence -> bindParam (':status', $status, PDO::PARAM_STR);

                      $preOrder_saved = $sentence -> execute();
                      $lastId = $connection->lastInsertId(); 

                    } catch (PDOException $ex) {
                      print 'ERROR' . $ex -> getMessage();
                    }
                  }
                  return $lastId;
                }



                public static function GlobalGetGeneral($connection, $id) 
                {
                    $orders = null;
                    if (isset($connection)) {
                      try {
                        $sql = "SELECT * FROM global_setting WHERE id = :id";
                        $sentence = $connection ->prepare($sql);
                         $sentence -> bindParam(':id', $id, PDO::PARAM_INT);
                        $sentence -> execute();
                        $result = $sentence -> fetch();

                    if (!empty($result)) 
                       {
                        $orders = [$result['id'], $result['discount'], $result['rest_name'], $result['coin'], $result['address'], $result['phone'], $result['email']];
                         }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $orders;
                }



                public static function GetCustomerOrders($connection, $pre_order_Id) {
                   $orders = null;
                    if (isset($connection)) {
                      try {
                        $sql = "SELECT * FROM costumers WHERE pre_order_Id = :pre_order_Id";
                        $sentence = $connection ->prepare($sql);
                        $sentence -> bindParam(':pre_order_Id', $pre_order_Id, PDO::PARAM_INT);
                        $sentence -> execute();
                        $result = $sentence -> fetch();

                    if (!empty($result)) 
                       {
                        $orders = [$result['id'], $result['first_name'], $result['last_name'], $result['firma'], $result['address'], $result['zip_code'], $result['zip_code2'], $result['zip_address'], $result['telephone'], $result['email'], $result['etage'], $result['nachricht'], $result['pre_order_Id']];
                         }
                      } catch (PDOException $ex) {

                        print 'ERROR' . $ex -> getMessage();
                      }
                    }
                  return $orders;
                }

              }


                    Connection::open_db();
                    $status = "Processed";
                    $poststatus = "Finished";

                    $Result = PrintTickets::CheckOrderToPrint(Connection::GetConnection(), $status);
                    if($Result)
                    {

                    $orderNum = $Result[0];

                    $Result2 = PrintTickets::GlobalGetGeneral(Connection::GetConnection(), 1);
                    $restaurent = $Result2[2];
                    $adresse = $Result2[4];
                    $celphone = $Result2[5];
                    $email = $Result2[6];
                    $coin = $Result2[3];
                    $IDRest = "YG84784FOSJD-00";  

                    $Result3 = PrintTickets::GetCustomerOrders(Connection::GetConnection(), $Result[1]);

                    $name = $Result3[1] ." ". $Result3[2];
                    $telefone = $Result3[8];
                    $emailCos = $Result3[9];
                    $ID_Client = $Result3[10]; 

                    $Result4 = PrintTickets::CheckPreOrderToPrint(Connection::GetConnection(), $Result[1]); 

                    $type_orders = $Result4[5];

                    if ($type_orders == "TAKE_OVER") 
                    {
                      $type_orders = "TAKE OVER";
                    }
                    else if ($type_orders == "DELIVERY")
                    {
                      $type_orders = "DELIVERY";
                    }

                    $dish_details = "";

                    $Result6 = PrintTickets::CheckOrderDetailsToPrint(Connection::GetConnection(), $Result[0]);

                    //
                    //print_r($Result6);

                   $total = $Result[2]; 
                   for ($i=0; $i < count($Result6); $i++) 
                    { 
                      $price = 0;
                      $Result5 = PrintTickets::CheckOrderDishesToPrint(Connection::GetConnection(), $Result6[$i][2]);
                      //print_r($Result5);
                      for ($j=0; $j < $Result6[$i][3]; $j++) 
                      { 
                        $price = ($price + $Result5[0][4]);
                      }

                      $dish_details = $dish_details . "<tr><td>".$Result6[$i][3]."</td><td>".$Result5[0][6]. " " . $Result5[0][2]."</td><td align='right'>".$price."</td></tr>";
                    }

                    include_once "windows-usb.php";

                    $Result7 = PrintTickets::UpdateOrdersPrint(Connection::GetConnection(), $Result[0], $poststatus);

                    }
                    else
                    {
                    echo "nothing yet";
                    }

                    Connection::close_db();

这是 windows-usb.php 文件:

     /* Change to the correct path if you copy this example! */
                require __DIR__ . '/../../autoload.php';
                use Mike42\Escpos\Printer;
                use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;

                /**
                 * Install the printer using USB printing support, and the "Generic / Text Only" driver,
                 * then share it (you can use a firewall so that it can only be seen locally).
                 *
                 * Use a WindowsPrintConnector with the share name to print.
                 *
                 * Troubleshooting: Fire up a command prompt, and ensure that (if your printer is shared as
                 * "Receipt Printer), the following commands work:
                 *
                 *  echo "Hello World" > testfile
                 *  copy testfile "\\%COMPUTERNAME%\Receipt Printer"
                 *  del testfile
                 */
                try {
                    // Enter the share name for your USB printer here
                    //$connector = null;
                    $connector = new WindowsPrintConnector("HP Photosmart C4400 series2");

                    /* Print a "Hello world" receipt" */

                    $printer = new Printer($connector);

                    $printer -> text("<table border='0' align='center' width='385px'><tr><td align='center'>.::<strong> ". $restaurent ." </strong>::.\n ". $celphone ." - ID: ". $IDRest ."</td></tr><tr><td align='center'>Date/Time:" . date('d-m-Y H:i:s') . "</td></tr><tr><td align='left'></td></tr><tr><td>Client: ".$name."</td></tr><tr><td>ID Client: ".$ID_Client."</td></tr><tr><td>Order Nº: ".$orderNum."</td></tr><tr><td colspan='3' align='left'>Type of Order: ".$type_orders."</td></tr></table>\n"."<table border='0' align='center' width='300px'><tr><td><span id='cantDragg'>QUANTITY.</span></td><td><span id='descripDragg'>DETAILS</span></td><td align='right'><span id='importDragg'>TOTAL</span></td></tr><tr><td colspan='3'>==========================================</td></tr>"."<tr><td>Here Quantity</td><td>Here Dish Name</td><td align='right'>Here price</td></tr><tr><td>2</td><td>Pizza 4 cheese</td><td align='right'>330 CHF</td></tr><tr><td>&nbsp;</td><td align='right'><b>TOTAL:</b></td><td align='right'><b>360 CHF</b></td></tr><tr><td colspan='3'>Nº of Dishes: 2</td></tr><tr><td colspan='3'>&nbsp;</td></tr><tr><td colspan='3' align='center'>here other important detail</td></tr></table>");
                    $printer -> cut();
                    /* Close printer */
                    $printer -> close();
                    //header("Location:../../../../index.php");



                    echo "<table border='0' align='center' width='385px'><tr><td align='center'>.::<strong> ". $restaurent ." </strong>::. \n". $celphone ." - ID: ". $IDRest ."</td></tr><tr><td align='center'>Date/Time:" . date('d-m-Y H:i:s') . "</td></tr><tr><td align='left'></td></tr><tr><td>Client: ".$name."</td></tr><tr><td>ID Client: ".$ID_Client."</td></tr><tr><td>Order Nº: ".$orderNum."</td></tr><tr><td colspan='3' align='left'>Type of Order: ".$type_orders."</td></tr></table>\n"."<table border='0' align='center' width='300px'><tr><td><span id='cantDragg'>QUANTITY.</span></td><td><span id='descripDragg'>DETAILS</span></td><td align='right'><span id='importDragg'>TOTAL</span></td></tr><tr><td colspan='3'>==========================================</td></tr>". $dish_details."<tr><td>&nbsp;</td><td align='right'><b>TOTAL:</b></td><td align='right'><b>".$total." ".$coin."</b></td></tr><tr><td colspan='3'>Nº of Dishes: 2</td></tr><tr><td colspan='3'>&nbsp;</td></tr><tr><td colspan='3' align='center'>here other important detail</td></tr></table>";


                } catch (Exception $e) {
                    echo "Couldn't print to this printer: " . $e -> getMessage() . "\n";
                }

客户下单后如何从主机自动打印门票? 我使用 ESC/POS 库进行打印 更轻松。库的所有文件夹和文件都位于系统所在的服务器文件夹中。

此交付页面还有其内容管理系统,该系统还有一个显示客户订单的菜单。这是包含 ESC/POS 库的文件夹所在的位置,并且用 cron 打印的 php 文件也在那里。

最佳答案

问题是,您的打印机未连接到服务器,因此您无法从服务器控制打印机。

有几种方法可以做到这一点。

  1. 谷歌云打印的方法 我可以使用云打印机成功从服务器打印到本地 pos 打印机。 我已将打印机注册到云打印机,并将收据转换为 pdf,但是 打印结果不好。 所以,我不推荐这种方法。
  2. 使用本地网络的方法。 您可以在连接客户端浏览器的 WiFi 网络中设置打印机。 对于打印,在您的客户端浏览器中,将向您的本地打印机发送请求。 它运作良好,我正在使用它。 如果是无线打印机,您必须有笔记本电脑。 并且还可以使用树莓派来缩小体积,专门为 打印。
  3. 通过 vps 的方法。 有人说我们可以从vps服务获得专用的公共(public)IP。 但我还无法配置它。 但我认为这也是一个好方法。

关于javascript - 如何从 php 服务器打印到 POS 打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55501173/

相关文章:

javascript - 记住从第二页导航回第一页时的滚动位置

通过将字符串转换为日期格式来对 Javascript 日期进行排序

php - 反对票 PHP

mysql - phpmyadmin mysql docker 简单链接

javascript - vuejs 2.0 中的递归组件通信

javascript - Tone.PitchShift 和 Howler.js 问题

php - 在 Varnish 缓存页面中包含 req.http.referer

PHP:从对象获取单个键

php - 将数据从一列移动到表

mysql - Rails:minitest是否使用schema.rb重新创建测试模式?