gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:08:39 24 4
gpt4 key购买 nike

我有一个送货服务网络,客户从网站下订单,在餐厅中,用户通过自动打印订单票来接收订单。顾客下单后,餐厅必须自动打印门票。在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com