Я пытаюсь интегрировать платежный терминал Ingenico Desk/5000 со специальной системой PHP POS через локальный TCP/IP.
Терминал находится в моей локальной сети:
Код: Выделить всё
Terminal IP: 192.168.2.78
Port: 9000
Пример проверки соединения:
Код: Выделить всё
$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);
Что я тестировал
1. Сообщение в рамке STX/ETX/LRC
Я попробовал отправить запрос на продажу на сумму 1,00 канадских долларов следующим образом:Код: Выделить всё
01|000000000100|000000000000|123456|124|0|0
Код: Выделить всё
STX + body + ETX + LRC
Код: Выделить всё
0230317c3030303030303030303130307c3030303030303030303030307c3132333435367c3132347c307c300333
Если я сначала отправляю байт ACK, а затем сообщение в рамке, терминал отвечает:
Код: Выделить всё
950
2. Сообщение с префиксом длины из 4 цифр
Я также пробовал отправлять сообщения с префиксом длины, например:Код: Выделить всё
004300|000000000100|000000000000|123456|124|0|0
Код: Выделить всё
300
Код: Выделить всё
Invalid ECR Request
Код: Выделить всё
0000
0001X
0004TEST
0006STATUS
Код: Выделить всё
300
3. Другие протестированные форматы тела
Я также тестировал варианты, используя:Код: Выделить всё
SALE|...
PURCHASE|...
JSON
XML-like body
key=value
CSV
semicolon-delimited fields
fixed-width numeric fields
Код: Выделить всё
300
Код: Выделить всё
950
Сканирование портов
Я просканировал общие порты на терминале. Открыт только порт 9000:
Код: Выделить всё
23 closed
80 closed
443 closed
8080 closed
8443 closed
9000 open
9100 closed
12000 closed
Что я пытаюсь понять
Ожидает ли 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?
- Может ли кто-нибудь предоставить минимальный пример действительного пакета запроса на продажу?
Минимальный тест PHP
Код: Выделить всё
Мобильная версия