Ошибка подключения к TM-U220

Я скачал 2 javascript SDK для принтера Epson, который поддерживает TM-U220, и оба они не подключаются к моему принтеру и не будут печатать. Но когда я попытался использовать другой SDK, такой как QZ Tray, он работал, но QZ Tray должен быть включен, я хочу, чтобы это работало в Android, поэтому я использую javascript SDK от Epson.

Проблема в том, что когда я использую образец принтера, который Epson предоставил в javascript SDK, и ввожу ip: 192.168.1.98, порт: 9100 и идентификатор устройства: local_printer, я получаю эту ошибку:

Не удалось подключиться к интерфейсу обслуживания устройства ePOS. [ERROR_TIMEOUT]

,
Но принтер сделал небольшую печать, письмо, которое я не могу прочитать, и в самом конце печати: 2http / 1.1. И в консоли:

ОПЦИИ https://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 net:: ERR_CONNECTION_REFUSED


а также

ОПЦИИ https://192.168.1.98/cgi-bin/eposDisp/service.cgi?devid=local_display&timeout=10000 net:: ERR_CONNECTION_REFUSED


Я также создал свой собственный простой код. Это мой первый код, использующий epos-2.3.0.js:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Print Test</title>

        <script type="text/javascript" src="epos-2.3.0.js"></script>

        <script type="text/javascript">
            // Retrieving Printer objects (printer selection)
            var printer = null;
            // Retrieving Printer objects (printer selection)

            // Creating ePOSDevice objects (device connection and communication)
            var ePosDev = new epson.ePOSDevice();

            function connect() {
                var ipAddress = '192.168.1.98'; var port = '9100';
                ePosDev.connect(ipAddress, port, callback_connect);
            }
            // Creating ePOSDevice objects (device connection and communication)

            // Retrieving Printer objects (printer selection)
            function callback_connect(resultConnect) {
                var deviceId = 'local_printer';
                var options = {'crypto' : false, 'buffer' : false};

                if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
                    // Retrieves the printer object
                    alert("Success callback connect");
                    ePostDev.createDevice(deviceId, ePosDev.DEVICE_TYPE_PRINTER, options, callback_createDevice);
                }
                else {
                    // Displays error messages
                    alert("Error callback connect");
                }
            }

            function callback_createDevice(deviceObj, errorCode) {
                if (deviceObj === null) {
                    // Displays an error message if the system fails to retreive the printer object
                    return;
                }
                printer = deviceObj;

                // Registers the print complete event
                printer.onreceive = function(response) {
                    if (response.success) {
                        // Displays the successful print message
                        alert("Callback create device response success");
                    }
                    else {
                        // Displays error messages
                        alert("Callback create device response failed");
                    }
                }
            }
            // Retrieving Printer objects (printer selection)

            // Creating print data (data buffering)
            function createData() {
                printer.addTextAlign(printer.ALIGN_CENTER);
                printer.addText('Hello World\n');
            }
            // Creating print data (data buffering)

            // Sending print data (printing and disconnection)
            function send() {
                if (ePosDev.isConnected) {
                    printer.send();
                }
            }
            // Sending print data (printing and disconnection)
        </script>
    </head>
    <body>
        <input type="button" onclick="connect()" value="Connect" />
        <input type="button" onClick="send()" value="Print Hello World" />
    </body>
</html>


И этот я использую epos-print-3.2.0.js:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Print Test 2</title>
        <script type="text/javascript" src="epos-print-3.2.0.js"></script>
        <script type="text/javascript">
            function buildMessage() {
                // Create a print document
                var builder = new epson.ePOSBuilder();
                builder.addTextLang('en');
                builder.addTextSmooth(true);
                builder.addTextFont(builder.FONT_A);
                builder.addTextSize(3, 3);
                builder.addText('Hello,\tWorld!\n');
                builder.addCut(builder.CUT_FEED);
                var request = builder.toString();

                var address = 'http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000';

                // Create an ePOS-Print object
                var epos = new epson.ePOSPrint(address);
                //Send the print document
                epos.send(request);
            }
        </script>
    </head>
    <body>
        <button onclick="buildMessage()">Run</button> 
    </body>
</html>

Когда я запускаю второй код, я получаю эту ошибку в моей консоли:

ВАРИАНТЫ http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000


а также

XMLHttpRequest не может загрузить http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000. Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Происхождение 'null', следовательно, не разрешено. Ответ имел HTTP-код состояния 405.


Но когда я меняю адрес с
http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
в
http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
это напечатало меня это:

ОПЦИИ /cgi-bin/epos/service.cgi?devid=local-printer&timeout=10000 HTTP / 1.1
Host: 192.168.1.98:9100
Соединение: keep-alive Access-Control-Request-Method: POST
Происхождение: ноль
Пользователь-агент: Mizilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome / 52.0.2743.116 Safari / 537.36
Access-Control-Request-Headers: тип контента, если изменено, так как мыло
Принять: * / *
Accept-Encoding: gzip, deflate, sdch
Accept = язык: en-US, en;q=0,8

2 ответа

Я получал те же ошибки для нового TM-T88VI. Затем я увидел в Руководстве пользователя ePOS SDK, что для управления принтером TM необходимо включить настройку ePOS-Print из EpsonNet Config на принтере.

Глядя на руководство, чтобы напрямую управлять TM-U220 (без использования интеллектуального принтера TM), вам необходимо установить сетевой интерфейс UB-E04 или UB-R04. В нем говорится, что вы можете проверить, какие интерфейсы установлены, распечатав лист состояния.

Судя по всему, это проблема HTTP-запроса перекрестного происхождения (CORS). Эта статья MDN объясняет это: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Я предполагаю, что IP 92.168.1.98 - это IP-адрес принтера (который находится в локальной сети). Смотрите: http://trendblog.net/ever-wondered-use-192-168-x-x-ip-addresses-home/ и вы можете получить к нему доступ через порт 9100, как описано в вашем посте выше.

Таким образом, поскольку ваше реальное веб-приложение находится на IP-адресе, отличном от IP-адреса принтера и способа работы в Интернете, CORS требуется, когда вы звоните на другой IP-адрес / хост, чтобы предотвратить атаку межсайтовых скриптов.

Здравый смысл заключается в том, что если принтер выставляет себя через порт 9100, это должно быть частью вашего URI. Вот почему http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 работает, а другой - нет.

Что касается попытки доступа к нему через устройство Android... вопрос в том, подключено ли устройство к вашей локальной сети (192.168....) или оно находится в Интернете? Если он подключен к Интернету, я не думаю, что вы можете получить доступ к принтеру, который, вероятно, не будет открыт для Интернета (с публичным IP). Пока они принадлежат к одной сети, они должны иметь возможность общаться. Если нет, вам нужно будет выставить его в Интернет (плохая идея) или убедиться, что они видят друг друга (Android подключается к вашему корпоративному WIFI, и к принтеру можно подключиться через WIFI).

Но когда я меняю адрес с http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 на http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid = local_printer& timeout = 10000 он напечатал мне это:

Порт 9100 - это необработанный входной порт принтера, кажется, он печатает весь входной запрос без его интерпретации. Служба ePOS, похоже, доступна на портах 80 / 443.

Я получал те же ошибки для нового TM-T88VI. Затем я увидел в Руководстве пользователя ePOS SDK, что для управления принтером TM вам необходимо включить настройку ePOS-Print из EpsonNet Config на принтере.

Включение службы печати ePOS было для меня правильным решением. Для этого мне пришлось обновить прошивку принтера (TM-T88VI). В заводских настройках по умолчанию не было возможности включить службу ePOS.

У меня была такая же проблема с TM-T20III. Вы должны использовать служебную программу от Epson для вашего принтера. В расширенных настройках сети есть меню, которое вызывает "Фильтры", и я добавляю IP-адрес своего POS-терминала в качестве адреса приема.

Другие вопросы по тегам