Отправить HTTP JSON на ККМ

user99

Постоялец
Регистрация
13 Янв 2008
Сообщения
141
Реакции
15
Добрый вечер!

Делаю интеграцию самописного ПО с ККМ СТАРРУС

Из инструкции к ККМ
Сервер HTTP JSON API Устройство может работать как HTTP-сервер и принимать запросы по протоколу HTTP различными методами.

Устройство принимает запросы по протоколу HTTP на 4444 порту. Запросы осуществля- ются методам POST. URL запроса формируется в виде: Для просмотра ссылки Войди или Зарегистрируйся устройства>:4444/fr/api/v2/<Команда> Возможные команды описаны в главе 5.

Нужно отправить запрос вида:

Код:
Пример запроса
{
"RequestId": "31",
"Password": 1,
"Lines": [
{
"Qty": 1000,
"Price": 10000,
"PayAttribute": 1,
"TaxId": 1,
"Description": "Булочка с маком"
},
{
"Qty": 2000,
"Price": 20000,
"PayAttribute": 2,
"TaxId": 2
}
],
"Cash": 100000,
"NonCash": [ 2000, 3000, 4000 ],
"PhoneOrEmail": "user@example.com",
"MaxDocumentsInTurn": 5000,
"FullResponse": false
}

Подскажите пожалуйста как сформировать и передать такой запрос, получить (вывести) ответ.

Спасибо!
 
Код:
$request="тут твой большой запрос";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, '<... устройства>:4444/fr/api/v2/<Команда>');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);  
$result = curl_exec ($ch);
curl_close($ch);
echo $result;
 
PHP:
$data = array(
'RequestId' => 31,
'Password' => 1,
...
);

$request = new request('http://<адрес устройства>:4444/fr/api/v2/<Команда>');
$request->payload($data);
$request->send();

echo $request->dump();

// $request->response

Класс: Для просмотра ссылки Войди или Зарегистрируйся
Я класс этот описывал в блоге тут, но блог пропал куда-то
 
А запрос нужно как до преобразовать? Ведь двойные кавычки в запросе не пройдут, или просто экранировать...

{
"RequestId": "31",
"Password": 1,
"Lines": [
{
"Qty": 1000,
"Price": 10000,
"PayAttribute": 1,
"TaxId": 1,
"Description": "Булочка с маком"
},
{
"Qty": 2000,
"Price": 20000,
"PayAttribute": 2,
"TaxId": 2
}
],
"Cash": 100000,
"NonCash": [ 2000, 3000, 4000 ],
"PhoneOrEmail": "user@example.com",
"MaxDocumentsInTurn": 5000,
"FullResponse": false
}

Как только не пробовал, ругается на синтаксис
 
Последнее редактирование:
А запрос нужно как до преобразовать? Ведь двойные кавычки в запросе не пройдут, или просто экранировать...

{
"RequestId": "31",
"Password": 1,
"Lines": [
{
"Qty": 1000,
"Price": 10000,
"PayAttribute": 1,
"TaxId": 1,
"Description": "Булочка с маком"
},
{
"Qty": 2000,
"Price": 20000,
"PayAttribute": 2,
"TaxId": 2
}
],
"Cash": 100000,
"NonCash": [ 2000, 3000, 4000 ],
"PhoneOrEmail": "user@example.com",
"MaxDocumentsInTurn": 5000,
"FullResponse": false
}

Как только не пробовал, ругается на синтаксис
На вход классу подаётся массив, а не строка. А в классе уже с помощью json_encode() преобразуется
 
Это все 1 массивом отправлять? или их несколько тут?
Пробую отправить первым методом, без класса.
 
Это все 1 массивом отправлять? или их несколько тут?
Пробую отправить первым методом, без класса.
ты же 1 массив в примере давал, откуда еще появились?

Если несколько - значит несколько запросов
 
Да, вот промер и не получается отправить.
$request="тут твой большой запрос"; - пробую сюда его и вставить весь.

Может запрос нужно как-то по другому писать? Он не записывается в таком виде в переменную.

Второй вопрос, запрос в encode отправлять виде или нет?

Из инструкции
JSON API 2.1. Форматы передачи данных Устройство принимает запросы по протоколу HTTP на 4444 порту. Запросы осуществля- ются методам POST. URL запроса формируется в виде: Для просмотра ссылки Войди или Зарегистрируйся устройства>:4444/fr/api/v2/<Команда> Возможные команды описаны в главе 5. 2.1.1. Формат данных Формат данных: JSON. Кодировка: UTF-8.

Пробую отправить так:
$request="
{
"RequestId": "31",
"Password": 1,
"Lines": [
{
"Qty": 1000,
"Price": 10000,
"PayAttribute": 1,
"TaxId": 1,
"Description": "Булочка с маком"
},
{
"Qty": 2000,
"Price": 20000,
"PayAttribute": 2,
"TaxId": 2
}
],
"Cash": 100000,
"NonCash": [ 2000, 3000, 4000 ],
"PhoneOrEmail": "user@example.com",
"MaxDocumentsInTurn": 5000,
"FullResponse": false
}
";
 
Последнее редактирование:
Кавычки надо одинарные
$request=' ... '
 
Спасибо, щас стала ругаться в ответе "{"Path":"/fr/api/v2/Complex","Response":{"Error":246,"ErrorMessages":["invalid character '/' looking for beginning of object key string"]}}"

Сори, нашел ошибку сам, забыл убрать экранирование!

Подскажите пожалуйста, как например такой ответ "{"RequestId":"1","ClientId":"","Path":"/fr/api/v2/Complex","Response":{"Error":2,"ErrorMessages":["MSGCODE: 67, Команда не может быть выполнена в текущей фазе жизни ФН: 1"]}}" записать в переменные, что бы потом вывести? Например текст ошибки в $ErrorMessages ?
 
Последнее редактирование:
Назад
Сверху