Обращение через CURL

Mini web-сервер для печати чеков на фискальных регистраторах из мобильных приложений через HTTP запрос JSON.
Ответить
anastasia
Сообщения: 1
Зарегистрирован: 25 янв 2017, 21:17

Обращение через CURL

Сообщение anastasia » 26 янв 2017, 18:32

Добрый день.
Кассовый аппарат пока не подключён.
Тестирую новую версию программы.
Авторизация проходит и возвращается html главной страницы.
Но если передать параметры в формате json, то ответ не меняется.
Из php обращаюсь:

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

$data = json_encode($data); // json с параметрами для команды RegisterCheck
if( $curl = curl_init() ) {
            $request_headers = array();
            $request_headers[] = "Authorization: Basic QWRtaW46";
            curl_setopt($curl, CURLOPT_USERAGENT, "https://127.0.0.1:5893");
            curl_setopt($curl, CURLOPT_URL, $this->UrlServer);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $request_headers);
            curl_setopt($curl, CURLOPT_TIMEOUT, 300);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , 0);   // чтобы не проверяли сертификат
            curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // параметры в json
            $out = curl_exec($curl);
            echo $out;
            curl_close($curl);
Как можно получить ответ в json?

Audim
Администратор
Сообщения: 2395
Зарегистрирован: 17 мар 2015, 18:36

Re: Обращение через CURL

Сообщение Audim » 26 янв 2017, 19:46

Вы обращаетесь по URL к исходной страничке сервера.
URL для вызова команды следующий: http://127.0.0.1:5893/Execute/sync
В теле передаете JSON команды
В ответе в теле получаете JSON ответа.
TIMEOUT 300 мс - это очень мало, ставьте больше чем в поле JSON команды "Timeout".
По умолчанию "Timeout" команды = 30000мс. Соответственно Вы ставьте 40000

И потренируйтесь сначала на http а не на https - т.е. переключите сервер в http (уберите сертификат в настройках).
Под https могут быть иные проблемы, тем более если сертификат самоподписной.

Spike
Сообщения: 31
Зарегистрирован: 13 мар 2017, 13:49

Re: Обращение через CURL

Сообщение Spike » 24 мар 2017, 20:45

А можно пример для наглядности. Например как получить список устройств сервера.

Audim
Администратор
Сообщения: 2395
Зарегистрирован: 17 мар 2015, 18:36

Re: Обращение через CURL

Сообщение Audim » 24 мар 2017, 22:09

Примеры здесь: https://kkmserver.ru/KkmServer#PrimerJavaCheck
Еще есть файл: КаталогУстановки/html/unittest.js - В нем самые свежие примеры - т.к. этот файл используется сервером для тестирования устройств.

Для получения списка устройств пошлите по адресу "http://127.0.0.1:5893/Execute/sync" такой текст:

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

{
	"Command": "List"
}
В ответе в теле получите что-то типа этого:

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

 {
	"ListUnit": [
		{
			"NumDevice": 1,
			"IdDevice": "7fcfc44a-3741-486b-b8a0-a6f695e06301",
			"OnOff": true,
			"Active": true,
			"TypeDevice": "Фискальный регистратор",
			"IdTypeDevice": "KkmStrihM",
			"IP": "192.168.137.111",
			"NameDevice": "ШТРИХ-М-01Ф",
			"KktNumber": "0149060006000651",
			"INN": "504404744207",
			"TaxVariant": "0,2,3,5",
			"AddDate": "2017-02-21T23:05:29.1953529+03:00",
			"OFD_Error": "",
			"OFD_NumErrorDoc": 132,
			"OFD_DateErrorDoc": "2017-02-28T20:47:00",
			"FN_DateEnd": "2018-04-01T00:00:00",
			"FN_MemOverflowl": false,
			"FN_IsFiscal": true,
			"PaperOver": false
		}, {
			"NumDevice": 5,
			"IdDevice": "c387f054-edb2-41b1-87f8-ad091428e264",
			"OnOff": true,
			"Active": true,
			"TypeDevice": "Принтер чеков",
			"IdTypeDevice": "PinterPOS",
			"IP": "",
			"NameDevice": "Posiflex PP69000 Printer",
			"KktNumber": "<Не определено>",
			"INN": "<Не определено>",
			"TaxVariant": "",
			"AddDate": "2017-02-25T20:09:02.9088015+03:00",
			"OFD_Error": "",
			"OFD_NumErrorDoc": 0,
			"OFD_DateErrorDoc": "0001-01-01T00:00:00",
			"FN_DateEnd": "0001-01-01T00:00:00",
			"FN_MemOverflowl": false,
			"FN_IsFiscal": false,
			"PaperOver": false
		}
	],
	"Command": "List",
	"Error": "",
	"Status": 0,
	"IdCommand": ""
  }

Ответить