Ingenico Desk/5000 через TCP/IP возвращает 300 Invalid ECR Request или 950 Invalid Message Format при отправке запроса нPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ingenico Desk/5000 через TCP/IP возвращает 300 Invalid ECR Request или 950 Invalid Message Format при отправке запроса н

Сообщение Anonymous »

Тело
Я пытаюсь интегрировать платежный терминал Ingenico Desk/5000 со специальной системой PHP POS через локальный TCP/IP.
Терминал находится в моей локальной сети:

Код: Выделить всё

Terminal IP: 192.168.2.78
Port: 9000
Моя PHP POS может успешно открыть сокет терминала и записать на него данные, поэтому это не похоже на проблему IP/брандмауэра/соединения.
Пример проверки соединения:

Код: Выделить всё

$sock = fsockopen('192.168.2.78', 9000, $errno, $errstr, 10);

if (!$sock) {
die("Connect failed: $errno $errstr");
}

fwrite($sock, $payload);

$response = fread($sock, 4096);

echo bin2hex($response);
Терминал принимает TCP-соединение, но отклоняет формат запроса.
Что я тестировал

1. Сообщение в рамке STX/ETX/LRC

Я попробовал отправить запрос на продажу на сумму 1,00 канадских долларов следующим образом:

Код: Выделить всё

01|000000000100|000000000000|123456|124|0|0
В рамке:

Код: Выделить всё

STX + body + ETX + LRC
Пример в шестнадцатеричном формате:

Код: Выделить всё

0230317c3030303030303030303130307c3030303030303030303030307c3132333435367c3132347c307c300333
Если я отправляю это сообщение без рукопожатия, я обычно не получаю ответа.
Если я сначала отправляю байт ACK, а затем сообщение в рамке, терминал отвечает: Терминал не показывает экран оплаты.

2. Сообщение с префиксом длины из 4 цифр

Я также пробовал отправлять сообщения с префиксом длины, например:

Код: Выделить всё

004300|000000000100|000000000000|123456|124|0|0
Терминал отвечает: На экране терминала отображается:

Код: Выделить всё

Invalid ECR Request
Я также протестировал очень простые значения с префиксом длины, например:

Код: Выделить всё

0000
0001X
0004TEST
0006STATUS
Все возвращаются: Таким образом, 300 выглядит как общий неверный ответ на запрос/параметр ECR.

3. Другие протестированные форматы тела

Я также тестировал варианты, используя:

Код: Выделить всё

SALE|...
PURCHASE|...
JSON
XML-like body
key=value
CSV
semicolon-delimited fields
fixed-width numeric fields
Они все либо возвращаются: или: или нет ответа.
Сканирование портов
Я просканировал общие порты на терминале. Открыт только порт 9000:

Код: Выделить всё

23 closed
80 closed
443 closed
8080 closed
8443 closed
9000 open
9100 closed
12000 closed
Поэтому я считаю, что 9000 является правильным прослушивателем ECR/POS.
Что я пытаюсь понять
Ожидает ли Ingenico Desk/5000 определенный протокол, такой как:

Код: Выделить всё

Elavon TSI
Commerce SDK / CSDK
INGENICO_RBA_UPP
RBA
NEXO
POSXML
Telium
или другой формат?
Я нашел документацию Elavon Commerce SDK, в которой упоминается INGENICO_RBA_UPP, критерии IP-соединения и возможный TLS 1.2, но служба поддержки сказала мне, что терминал должен работать напрямую и не требует дополнительного программного обеспечения.
Вопрос
Каков правильный формат запроса для отправки простого 1,00 доллара США Запрос на продажу CAD на Ingenico Desk/5000 через TCP/IP через порт 9000?
В частности:
  • Этот терминал ожидает простой TCP или TLS?
  • Требует ли он STX/ETX/LRC, пакетов с префиксом длины или другого конверта?
  • 300 определенно «Неверный запрос ECR/Неверный параметр ECR»?
  • Является ли 950 «Неверным форматом сообщения»?
  • Нужно ли PHP взаимодействовать через Elavon Commerce SDK/CWS вместо необработанного TCP?
  • Может ли кто-нибудь предоставить минимальный пример действительного пакета запроса на продажу?
Я пока не ищу логику утверждения/расчета. Я хочу, чтобы терминал отображал приглашение на оплату только для тестовой продажи стоимостью 1,00 канадских долларов.
Минимальный тест PHP
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»