Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > ОФД > Первый ОФД

API, не получается найти ID кассы по регномеру : Первый ОФД

21.11.2024 14:47


28.09.2018 12:04
В описании API сказано:
/api/kkms/search-kkms-ext - расширенный поиск кассы
Многа букафф из описания API:

Поиск ККТ по статусу (в ответ приходит список ККТ, сгруппированный по торговым точкам), по торговой точке, имени или номеру ККТ.
Кассы в списке будут содержать статус соединения (см. ниже).
В фильтре запроса статус передается как читаемое имя, а в ответе как код.
Online Status enumeratation
ONLINE((byte) 1),
OFFLINE((byte) 0),
BLOCKED((byte) 2),
UNKNOWN((byte) -1)
Параметры метода:
Параметр Где передается Тип Описание
filter.criteria Тело запроса, в Json String Поисковая строка. Касса и/или торговая точка попадает в список, если критерий поиска встретился в:
• имени торговой точки;
• имени кассы;
• регистрационном номере кассы;
• заводском номере кассы;
• внутреннем идентификаторе кассы.
filter.retailPlaceId Тело запроса, в Json String Идентификатор торговой точки. Принимает значение "-1", если принимаются во внимание все торговые точки
filter.monitoringFilter Тело запроса, в Json String Фильтрация по статусу касс
pagination.from Тело запроса, в Json Numeric Начальный индекс в списке, необязательный
pagination.to Тело запроса, в Json Numeric Конечный индекс в списке, необязательный
Пример запроса:
{"filter":
{"criteria":"",
"retailPlaceId":"-1",
"monitoringFilter":""},
"pagination":{"from":0,"to":4}
}

Так вот никак не соображу - как составить строку
Попробовал вот так:
SQL код:
$url = 'https://org.1-ofd.ru/api/kkms/search-kkms-ext:{"filter":
{"criteria":"' . $RegNomer . '",
"retailPlaceId":"-1",
"monitoringFilter":""},
"pagination":{"from":0,"to":4}
}
'; 
Где $RegNomer - определен выше, сформированную строку вставляю в браузер - получаю:
SQL код:
For request 'GET /api/kkms/search-kkms-ext?{%22filter%22:{%22criteria%22:%220001676437030137%22,%22retailPlaceId%22:%22-1%22,%22monitoringFilter%22:%22%22},%22pagination%22:{%22from%22:0,%22to%22:4}}' [Cannot parse parameter kkmId as Int: For input string: "search-kkms-ext"] 
Попробовал и без двоеточия, и замена двоеточия на ? - не выходит...
Чего я не понял???
28.09.2018 12:17
В описании метода указано не GET, а POST

Цитата:
Расширенный поиск ККТ
POST /api/kkms/search-kkms-ext
Возможно, дело в этом?

Что бы два раза не вставать:
Цитата:
При отправке запросов методом POST заголовок "Content-Type" должен иметь значение "application/json;charset=utf-8".
При отправке запросов методом GET заголовок "Content-Type" должен отсутствовать.
Цитата:
Аутентификация и CSRF-токен
Все запросы должны посылаться вместе с Cookie PLAY_SESSION, кроме вызова метода POST /api/user/login.
Во всех POST-запросах заголовок X-XSRF-TOKEN должен иметь значение, равное значению Cookie PLAY_SESSION.
28.09.2018 12:34
Исправил...
Вот кусь из программы:

.....
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); //Записываем куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$result = curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
print "code=" . $code;
print "\n";
curl_close($ch);
/* по регистрационному номеру определяем ID*/
$url = 'https://org.1-ofd.ru/api/kkms/search-kkms-ext?{"filter":{"criteria":"' . $RegNomer . '","retailPlaceId":"-1","monitoringFilter":""},"pagination":{"from":0,"to":4}}';
echo $url;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
print "Zapros code=" . $code;
print "\n";
print_r ($result);
print "\n";


Все равно <title>Bad Request</title>
Неправильно формирую строку в $url с фильтром. А как правильно ее сформировать - не соображу.

Вот ответ:
SQL код:
        <h1>Bad Request</h1>

        <p id="detail">
            For request 'POST /api/kkms/search-kkms-ext?{&quot;filter&quot;:{&quot;criteria&quot;:&quot;0001676437030137&quot;,&quot;retailPlaceId&quot;:&quot;-1&quot;,&quot;monitoringFilter&quot;:&quot;&quot;},&quot;pagination&quot;:{&quot;from&quot;:0,&quot;to&quot;:4}}' [Invalid Json: No content to map due to end-of-input
 at [Source: akka.util.ByteIterator$ByteArrayIterator$$anon$1@1633e3fa; line: 1, column: 0]]
        </p> 
а вот запрос:
SQL код:
https://org.1-ofd.ru/api/kkms/search-kkms-ext?{"filter":{"criteria":"0001676437030137","retailPlaceId":"-1","monitoringFilter":""},"pagination":{"from":0,"to":4}}Zapros code=400 
28.09.2018 12:51
Вот на такую строку:
https://org.1-ofd.ru/api/kkms/search-kkms-ext?{"filter":{"criteria":"0001676437030137","retailPlaceId":"-1","monitoringFilter":""},"pagination":{"from":0,"to":4}}
получил вот такой ответ:
....
[Invalid Json: No content to map due to end-of-input
at [Source: akka.util.ByteIterator$ByteArrayIterator$$anon$1@2e4e204e; line: 1, column: 0]]
....
28.09.2018 12:56
логично, ты по прежнему все в GET пхаешь...
Код:
curl_setopt($ch, CURLOPT_POSTFIELDS, ...
28.09.2018 13:01
Копи-пастил, а строчку эту профукал.... Спасибо....
01.10.2018 08:30
И все-таки, косяк в фильтре.
Делаю так:
Код:
<?php
/* проводит сверку УКМ-а и ОФД
на входе:
cash_id - айдишник кассы в УКМ-е - смотрим в УКМ-е
NomerSmenyUKM - номер смены в УКМ-е - смотрим в УКМ-е
RegNomer - регистрационный номер кассы - смотрим на зетке
NomerSmenyOFD - номер смены в ОФД - смотрим на зетке */

/* для отладки параметры присваиваю тут*/
$CashId ="209022003";
$NomerSmenyUKM =138;
$RegNomer ="0001******7";
$NomerSmenyOFD =202;
/* подключаемся к ОФД */
$url = "https://org.1-ofd.ru/api/user/login";
$MyLogin='ЛОГИН';
$MyPass='ПАРОЛЬ'; // паролько
$user=array('login'=>$MyLogin, 'password'=>$MyPass );
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"));
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); //Записываем куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$result = curl_exec($ch);
print "\nRESULT ";
print_r($result);
print "\n";
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
print "code=" . $code;
print "\n";
curl_close($ch);
/* по регистрационному номеру определяем ID*/
$url = 'https://org.1-ofd.ru/api/kkms/search-kkms-ext';
$MyFiltr='{"filter":{"criteria":"","retailPlaceId":"-1","monitoringFilter":""},"pagination":{"from":0,"to":4}}';
echo $url;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8;X-CSRF-Token:" . $result));
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($MyFiltr));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
print "Zapros code=" . $code;
print "\n";
print_r ($result);
print "\n";
?>

Если убираю ;X-CSRF-Token:" . $result)); - получаю отсутствие токена. С ним -
<p id="detail">
For request 'POST /api/kkms/search-kkms-ext' [Invalid Json: No content to map due to end-of-input
at [Source: akka.util.ByteIterator$ByteArrayIterator$$anon$1@25c32ac0; line: 1, column: 0]]
</p>
Хотя просто фильтр копи-пастил из описания...
01.10.2018 09:22
У тебя там выше вывод этого $result, я не знаю, какой он должен быть, но ты посмотри сам, предположи, правильный ли это ответ или нет...
01.10.2018 09:29
Подключилось нормально:
Код:
RESULT HTTP/1.1 200 OK
Server: nginx
Date: Mon, 01 Oct 2018 05:31:31 GMT
Content-Length: 0
Connection: keep-alive
Set-Cookie: PLAY_SESSION=ef92c************3cd0b37ec6d-rememberme=false&uid=131100&currentTime=1538*****1430; Path=/
Access-Control-Allow-Methods: POST,GET,OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,pragma
Access-Control-Expose-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,pragma
Access-Control-Allow-Credentials: true
Strict-Transport-Security: max-age=31536000; includeSubDomains
И далее - запрос отправился, но сервер не смог разобрать фильтра:
code=400
01.10.2018 09:32
Смотри, у тебя $result = вот тому дебагу, который ты цитируешь в #9 сообщении.
И тут ты
Код:
X-CSRF-Token:" . $result
отдаешь этот дебаг, как токен.
Часовой пояс GMT +3, время: 14:47.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.