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

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Ср апр 12, 2017 1:31 am

Наверно, многие уже слышали, что в России в 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, а пока все открыто и просто.
За это сообщение автора skysilver поблагодарили (всего 6):
Denis_k (Ср апр 12, 2017 9:36 pm) • Ivan (Вт апр 18, 2017 10:29 am) • directman66 (Чт май 25, 2017 7:47 am) • ypiter2006 (Чт фев 01, 2018 9:52 pm) • Strangeman (Чт окт 25, 2018 11:23 am) • Ron (Пн ноя 05, 2018 2:56 pm)
Рейтинг: 6.98%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

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

Сообщение Ivan » Вт апр 18, 2017 10:28 am

Тоже видел такое в "Магните"
Вещь интересная. Но вот название товара будет разное как у разных продавцов. Так у одного и того же через некоторое время.
А может быть ещё что товар будет называться одинаково а он будет другой.
Тут только интересно иметь статистику расходов
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
artscada
Сообщения: 2
Зарегистрирован: Пн июл 17, 2017 6:53 pm
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение artscada » Пн июл 17, 2017 6:57 pm

данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
За это сообщение автора artscada поблагодарил:
Ron (Пн ноя 05, 2018 2:43 pm)
Рейтинг: 1.16%
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн июл 17, 2017 7:26 pm

artscada писал(а):данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
Как на стороне сервера реализовано распознавание qr-кода?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

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

Сообщение Eraser » Чт июл 20, 2017 3:25 pm

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

https://github.com/Anisan/majordomo-app ... master.zip
За это сообщение автора Eraser поблагодарили (всего 6):
skysilver (Пт июл 21, 2017 2:53 pm) • XeonStaf (Пт авг 25, 2017 1:05 pm) • Jager (Пт июл 27, 2018 9:46 pm) • lanket (Пт авг 03, 2018 11:34 pm) • Ron (Пн ноя 05, 2018 2:45 pm) • Jilber (Пн янв 13, 2020 8:56 am)
Рейтинг: 6.98%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Чт июл 20, 2017 3:43 pm

Eraser писал(а):Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.
Последний раз редактировалось skysilver Чт июл 20, 2017 4:07 pm, всего редактировалось 1 раз.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Чт июл 20, 2017 3:56 pm

На днях продолжил ковырять этот сервис. Реализовал сценарий, при котором можно вообще не юзать приложение ИФНС.
Запилил сценарий. Вызов этого сценария поставил в настройках 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 КБ) 15674 просмотра
Думаю, в модуль такой вариант надо тоже добавить.
За это сообщение автора skysilver поблагодарили (всего 4):
Eraser (Пт июл 21, 2017 10:08 pm) • XeonStaf (Пт авг 25, 2017 1:06 pm) • lanket (Пт авг 03, 2018 11:33 pm) • Ron (Пн ноя 05, 2018 2:43 pm)
Рейтинг: 4.65%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 868 раз
Контактная информация:

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

Сообщение Eraser » Пт июл 21, 2017 2:11 pm

skysilver писал(а):
Eraser писал(а):Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.
пофиксил отображение
За это сообщение автора Eraser поблагодарил:
lanket (Пт авг 03, 2018 11:33 pm)
Рейтинг: 1.16%
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
artscada
Сообщения: 2
Зарегистрирован: Пн июл 17, 2017 6:53 pm
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение artscada » Пн июл 24, 2017 4:11 pm

skysilver писал(а):
artscada писал(а):данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
Как на стороне сервера реализовано распознавание qr-кода?
Запрос по API qrserver.com пришлось только обрабатывать фото в Cloudinary на "лету" тоже по API процент распознования значительно увеличился
uldman
Сообщения: 1
Зарегистрирован: Чт июл 26, 2018 12:21 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение uldman » Чт июл 26, 2018 12:24 pm

В телеге появился бот, который похоже основан на чем-то подобном - https://t.me/ReseiptAnalyserBot - ведет анализ расходов по QR коду чека получает содержимое.
Ответить