Немного предыстории:
Собрались мы небольшой компанией отдохнуть на озеро. Закупились в супермаркете (естественно, чек общий). Но ведь потом надо свести баланс: выяснить, кто на сколько набрал. Пока были в пути, товарищ нарыл приложение на зеленый телефон, которое это позволяет сделать. Но оно не совсем удобное плюс вынуждает установить его всем участникам закупки.
Но мы же АйТишники, сами можем придумать такой сервис...
Изучение матчасти:
Только мы же еще и ленивые - не хотим заполнять данные из чека с нуля. Было бы неплохо его загрузить :)
Судя по всему API у ФНС изменялась несколько раз, последний из которых был не так давно. Поэтому многие статьи из базы Инфостарта уже не актуальны (а в других обработку нужно купить). Пришлось немного покопаться на просторах интернета. Там я нашел статью на Хабре исходя из которой процесс регистрации и запроса данных очень даже не сложный
Зарегистрировался на сайте проверки чеков, подтвердил почту и сгенерировал Токен. На все ушло минут 10 (и не надо никуда никакие письма писать и заявления подписывать ЭЦП)
Помните только, что количество запросов ограничено (кажется, 15 чеков). Если нужно больше, то необходимо приобрести платную подписку (но тут я подробно не подскажу, не интересовался)
Маленькая обработочка:
Запрашивать данные будем по строке qrraw (эту строку мы получаем, если наведем камеру телефона на QR код чека).
Есть и другие варианты запроса (я думаю, при необходимости вы сможете их сами реализовать).
Это прям весь код из обработки (саму обработку приложу к публикации).
Процедура КомандаЗапросЧека(Команда)
HTTPСоединение = Новый HTTPСоединение("proverkacheka.com", , , , , , Новый ЗащищенноеСоединениеOpenSSL(), Ложь);
АдресРесурса = "/api/v1/check/get";
ОбъектJSON2 = Новый Структура;
ОбъектJSON2.Вставить("token", Токен);
ОбъектJSON2.Вставить("qrraw", СтрокаQR);
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(Запись, ОбъектJSON2);
ОветJSON = Запись.Закрыть();
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.Заголовки.Вставить("POST "+АдресРесурса+" HTTP/1.1");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("Cookie", "ENGID=1.1");
HTTPЗапрос.АдресРесурса = АдресРесурса;
HTTPЗапрос.УстановитьТелоИзСтроки(ОветJSON);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ = СтрокаJSON(ОбъектJSON(HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8")));
КонецПроцедуры
Функция СтрокаJSON(ОбъектJSON) Экспорт
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(Запись, ОбъектJSON);
Возврат Запись.Закрыть();
КонецФункции
Функция ОбъектJSON(СтрокаJSON) Экспорт
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
ОбъектJSON = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Возврат ОбъектJSON;
КонецФункции
Заключение
Многие сервисы (последнее время часто приходится сталкиваться с API) гораздо проще, чем кажутся на первый взгляд. Проблема лишь в том, что далеко не у многих сервисов есть приличная инструкция (не говоря уже о том, что под 1С они не рассчитаны). А если разобраться, то оказывается, что всё очень просто.
Обработка написана на УФ, код открыт.
Проверено на следующих конфигурациях и релизах:
- Розница, редакция 3.0, релизы 3.0.9.123