SmartLiving.ru

Обсуждение проекта
 
Текущее время: Ср июл 26, 2017 1:28 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Ср апр 12, 2017 1:31 am 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 370
Откуда: Киров, Россия
Благодарил (а): 121 раз.
Поблагодарили: 133 раз.
Наверно, многие уже слышали, что в России в 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, а пока все открыто и просто.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт апр 18, 2017 10:28 am 
Не в сети

Зарегистрирован: Сб окт 12, 2013 11:03 pm
Сообщения: 1368
Благодарил (а): 45 раз.
Поблагодарили: 259 раз.
Тоже видел такое в "Магните"
Вещь интересная. Но вот название товара будет разное как у разных продавцов. Так у одного и того же через некоторое время.
А может быть ещё что товар будет называться одинаково а он будет другой.
Тут только интересно иметь статистику расходов

_________________
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пн июл 17, 2017 6:57 pm 
В сети

Зарегистрирован: Пн июл 17, 2017 6:53 pm
Сообщения: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пн июл 17, 2017 7:26 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 370
Откуда: Киров, Россия
Благодарил (а): 121 раз.
Поблагодарили: 133 раз.
artscada писал(а):
данная статья оказала помощь в создании бота телеграм проверки чеков https://t.me/chekrobot
Как на стороне сервера реализовано распознавание qr-кода?

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт июл 20, 2017 3:25 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт окт 21, 2014 7:31 pm
Сообщения: 347
Откуда: Киров
Благодарил (а): 10 раз.
Поблагодарили: 146 раз.
Накидал простейший плагин для получения и просмотра чеков с сервера

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

_________________
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт июл 20, 2017 3:43 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 370
Откуда: Киров, Россия
Благодарил (а): 121 раз.
Поблагодарили: 133 раз.
Eraser писал(а):
Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.


Последний раз редактировалось skysilver Чт июл 20, 2017 4:07 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт июл 20, 2017 3:56 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 370
Откуда: Киров, Россия
Благодарил (а): 121 раз.
Поблагодарили: 133 раз.
На днях продолжил ковырять этот сервис. Реализовал сценарий, при котором можно вообще не юзать приложение ИФНС.
Запилил сценарий. Вызов этого сценария поставил в настройках 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 КБ | Просмотров: 208 ]

Думаю, в модуль такой вариант надо тоже добавить.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт июл 21, 2017 2:11 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт окт 21, 2014 7:31 pm
Сообщения: 347
Откуда: Киров
Благодарил (а): 10 раз.
Поблагодарили: 146 раз.
skysilver писал(а):
Eraser писал(а):
Накидал простейший плагин для получения и просмотра чеков с сервера
Логин-пароль ввел, нажал Refresh. В БД в таблицы данные подсосались из ФНС, а вот админке модуля все-равно "нет данных". Дебажить пока не было возможности.

пофиксил отображение

_________________
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пн июл 24, 2017 4:11 pm 
В сети

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


Запрос по API qrserver.com пришлось только обрабатывать фото в Cloudinary на "лету" тоже по API процент распознования значительно увеличился


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: artscada и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB