Страница 1 из 3

[Сценарий] Сервис УФНС России - Проверка кассового чека

Добавлено: Ср апр 12, 2017 1:31 am
skysilver
Наверно, многие уже слышали, что в России в 2017 налоговая активно переводит торговые предприятия на онлайн-кассы. Рядовым покупателям это дает возможность получать и хранить кассовые чеки в электронном виде, а также проверить их легальность, добросовестность продавца или сообщить о нарушении.

Под это дело запилено приложение для андроид "Проверка кассового чека" Весьма глючное, но в принципе рабочее.
С помощью него можно отсканировать QR-код с чека и получить его электронную копию (png, pdf, json).
Причем есть сведения не только о дате и общей сумме покупки, но и все позиции покупок текстом! Т.е. можно максимально автоматизировать учет покупок, а если это дело совместить с модулем управления списком продуктов и списком покупок, то совсем классная тема вырисовывается. ;)

Официально API не объявляли. По-быстрому отснифил трафик приложения на андроиде. Оказалось, все передается открыто (http) с использованием базовой авторизации apache get-запросами. В качестве логина - номер телефона, пароль приходит в СМС при регистрации в приложении.

Запросы слать сюда http://proverkacheka.nalog.ru:8888

Для начала выявил такие запросы:

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

//получить выписку за все время
GET /v1/extract?sendToEmail=0&fileType=json
GET /v1/extract?sendToEmail=0&fileType=pdf
//получить выписку за указанный промежуток времени
GET /v1/extract?dateFrom=2017-04-11T00:00:00&dateTo=2017-04-11T23:59:00&sendToEmail=0&fileType=json HTTP/1.1
На стороне сервера пока никаких фильтраций не заметил. Но во избежание лучше соблюдать структуру запроса:

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

GET /v1/extract?dateFrom=2017-04-11T00:00:00&dateTo=2017-04-11T23:59:00&sendToEmail=0&fileType=json HTTP/1.1
Authorization: Basic ЛОГИН:ПАРОЛЬ (закодированные в base64)
Device-Id: ИД АНДРОИДА
Device-OS: Adnroid 7.1.1
Version: 2
ClientVersion: 1.3.7.1
Host: proverkacheka.nalog.ru:8888
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1
В ответ приходит json с сылкой на скачивание файла, в котором нужная нам инфа:

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

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 52
ETag: W/"34-knrjUyhteJ4MpF/gIp72hw"
Date: Tue, 11 Apr 2017 21:47:25 GMT
Connection: keep-alive

{"url":"/v1/download/xxxxxxxxxxx.json"} 
Вообщем, идею подал. Кто опытный в написании модулей, дерзайте. ))
Возможно, потом перейдут на https и сменят API, а пока все открыто и просто.

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Вт апр 18, 2017 10:28 am
Ivan
Тоже видел такое в "Магните"
Вещь интересная. Но вот название товара будет разное как у разных продавцов. Так у одного и того же через некоторое время.
А может быть ещё что товар будет называться одинаково а он будет другой.
Тут только интересно иметь статистику расходов

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Пн июл 17, 2017 6:57 pm
artscada
данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Пн июл 17, 2017 7:26 pm
skysilver
artscada писал(а):данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
Как на стороне сервера реализовано распознавание qr-кода?

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Чт июл 20, 2017 3:25 pm
Eraser
Накидал простейший плагин для получения и просмотра чеков с сервера

https://github.com/Anisan/majordomo-app ... master.zip

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Чт июл 20, 2017 3:43 pm
skysilver
Eraser писал(а):Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Чт июл 20, 2017 3:56 pm
skysilver
На днях продолжил ковырять этот сервис. Реализовал сценарий, при котором можно вообще не юзать приложение ИФНС.
Запилил сценарий. Вызов этого сценария поставил в настройках MajorDroid в обработчике QR-кодов. Далее сканируем чек MajorDroid-ом, вызывается сценарий и передаются ему данные с чека. В сценарии идет обращение к серверу ИФНС и, если чек был передан магазином, то в ответ получается содержимое чека в JSON. Ну а его уж можно обработать по своему усмотрению.

Код сценария:
СпойлерПоказать

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

<?php
DebMes("QR-code scan result: ".$_SERVER['REQUEST_URI']);

echo '<div align="center">Обработка чека...</div>';

if (strlen($params['t']) == 13) {
    $d = DateTime::createFromFormat('Ymd\THi', $params['t']);
} else if (strlen($params['t']) == 15) {
    $d = DateTime::createFromFormat('Ymd\THis', $params['t']);
} else {
    echo 'Ошибка при определении даты и времени чека!' . '<br>';
}

$login = '+7...';
$password = '...';
$srv = 'http://proverkacheka.nalog.ru:8888';
$url = $srv.'/v1/inns/*/kkts/*/fss/'.$params['fn'].'/tickets/'.$params['i'].'?fiscalSign='.$params['fp'].'&sendToEmail=no';

$headers = array(
"Device-Id: xxxx",                    //Тут подставил id своего андроида, но м.б. любой слючайный сойдет.
"Device-OS: Adnroid 6.0.1",
"Version: 2",
"ClientVersion: 1.4.2",
"Host: proverkacheka.nalog.ru:8888",
"Connection: Keep-Alive",
"Accept-Encoding: gzip",
"User-Agent: okhttp/3.0.1"); 

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$res = curl_exec($ch);

$tovary = '';

if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch); 
} else {
    print_r($res);
    $data = json_decode($res, true);
    echo '<br><br>';
        $check = $data['document']['receipt'];
         echo '<br>Дата покупки - '.$check['dateTime'];
        echo '<br>Сумма - '.$check['totalSum'];
         echo '<br>Товаров в чеке - '.count($check['items']);
         echo '<br>';
         for ($j = 0; $j < count($check['items']); $j++) {
             $tovar = $check['items'][$j];
            echo $j.' - '.$tovar['name'].'  Штук: '.$tovar['quantity'].'  Стоимость: '.$tovar['sum'];
             if ($j == (count($check['items'])-1)) $tovary .= $tovar['name'];
             else $tovary .= $tovar['name'] . '; ';
            echo '<br>';
        }
         echo '<br>';
}

curl_close($ch); 


if ($tovary == '') echo 'Чек еще не передан в налоговую!';

DebMes("QR-code scan result: ".$tovary);


// Это просто для отладки
echo '<div align="center"><b>Чек обработан!</b></div>';
echo '<br>';
echo '<div align="center">';
echo 'Дата и время покупки = <b>' . $d->format('Y-m-d H:i') . '</b><br>';
echo 'Сумма покупки = <b>' . $params['s'] . '</b> руб.<br>';
echo '</div><br>';

echo '<div align="center">Служебная информация:</div>';
echo $_SERVER['REQUEST_URI'] . '<br>';
echo 't = ' . $params['t'] . '<br>';
echo 's = ' . $params['s'] . '<br>';
echo 'fn = ' . $params['fn'] . '<br>';
echo 'i = ' . $params['i'] . '<br>';
echo 'fp = ' . $params['fp'] . '<br>';
echo 'n = ' . $params['n'] . '<br>'; 
Скрин:
СпойлерПоказать
photo_2017-07-20_16-02-30.jpg
photo_2017-07-20_16-02-30.jpg (85.55 КБ) 15888 просмотров
Думаю, в модуль такой вариант надо тоже добавить.

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Пт июл 21, 2017 2:11 pm
Eraser
skysilver писал(а):
Eraser писал(а):Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.
пофиксил отображение

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Пн июл 24, 2017 4:11 pm
artscada
skysilver писал(а):
artscada писал(а):данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
Как на стороне сервера реализовано распознавание qr-кода?
Запрос по API qrserver.com пришлось только обрабатывать фото в Cloudinary на "лету" тоже по API процент распознования значительно увеличился

Re: Сервис УФНС России - Проверка кассового чека

Добавлено: Чт июл 26, 2018 12:24 pm
uldman
В телеге появился бот, который похоже основан на чем-то подобном - https://t.me/ReseiptAnalyserBot - ведет анализ расходов по QR коду чека получает содержимое.