Ошибка подключения к 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-терминала в качестве адреса приема.