Свой кусочек информационного пирога по 54-ФЗ – обработка для получения данных о своих покупках по чекам ОФД (на примере сети магазинов «Лента»)

11.07.17

Учетные задачи - Кассовые операции

Новшества по 54-ФЗ в области новой ККТ и все новые аббревиатуры из двух и трех букв (ОФД, ФН, ФД и т.д.) – одни из главных событий в торговой отрасли 2016-2017-2018 гг. Несмотря на всю сложность выполнения новых обязательных требований для магазинов, для рядовых пользователей появляется возможность автоматизировать получение данных о своих покупках от Операторов фискальных данных (ОФД). Вашему вниманию предлагается несколько вариантов использования данных со своих онлайн-чеков (на примере получения данных о покупках в магазинах «Лента»).

Скачать исходный код

Наименование Файл Версия Размер
Внешняя обработка для получения данных о покупках по ФПД и сумме чека
.epf 11,18Kb
7
.epf 11,18Kb 7 Скачать
Мобильное приложение на платформе 1С с возможностью сканирования QR-кодов и загрузки данных в мобильное приложение
.apk 27,93Mb
2
.apk 27,93Mb 2 Скачать
Инструкция по работе с мобильным приложением
.pdf 940,18Kb
0
.pdf 940,18Kb Скачать

Новшества по 54-ФЗ в области новой ККТ и все новые аббревиатуры из двух и трех букв (ОФД, ФН, ФД и т.д.) – одни из главных событий в торговой отрасли 2016-2017-2018 гг. Несмотря на всю сложность выполнения новых обязательных требований для магазинов, для рядовых пользователей появляется возможность автоматизировать получение данных о своих покупках от Операторов фискальных данных (ОФД).

Государство ввело QR-код в чеке как инструмент гражданского контроля. Можно скачать бесплатное мобильное приложение «Проверка кассового чека в ФНС России», отсканировать QR-код и проверить чек на корректность. Однако, практической пользы для накопления данных о своих покупках с последующим их анализом, мобильное приложение ФНС пока предоставляет в очень ограниченном объеме. Кроме того, остается вопрос сохранения относительной приватности покупателя, так как для получения возможностей сохранения чеков в своем личном кабинете необходимо зарегистрироваться с предоставлением своих персональных данных.

Вашему вниманию предлагается несколько вариантов использования данных со своих онлайн-чеков (на примере получения данных о покупках в магазинах «Лента»):

- внешняя обработка для получения данных о покупках по ФПД (фискальному признаку документа) и сумме чека. Теоретические обработка должна работать в любой конфигурации на управляемых формах, у которой режим совместимости позволяет работать с методами типа «СтрНайти». Открывается через меню «Файл»

- мобильное приложение на платформе 1С с возможностью сканирования QR-кодов и загрузки данных в мобильное приложение с последующим анализом на количество и сумму покупок по товарам. Мобильное приложение скомпилировано для ОС Android (хотя приложение проверялась на разных версиях системы Android 3-4-5-6, однако, возможна ситуация, когда приложение не будет работать). Разработанное мобильное приложение никуда не передает данные и не обменивается с другими базами данных, приложениями или программами. Для загрузки онлайн-чеков не используются какие-либо персональные данные пользователя. Все накопленные данные являются исключительно собственностью пользователя мобильного приложения. Поэтому вся ответственность за сохранностью и целостностью данных лежит исключительно на пользователе мобильного приложения. Если у вас не получается загрузить мобильное приложением, то попробуйте его скачать с облака ТПУ по ссылке: https://filecloud.tpu.ru/index.php/s/ejfo64JndsC78HV

- инструкция по работе с мобильным приложением. Инструкцию по работе с мобильным приложением можно также скачать по ссылке: https://filecloud.tpu.ru/index.php/s/sBQ9JmHxLYMKp3p

Ниже приведены исходные модули внешней обработки. Настоящая статья написана в поддержку доклада «Народный big data или 54-ФЗ на службе анализа и планирования для рядовых покупателей» на конференции INFOSTART EVENT 2017 COMMUNITY (прямая ссылка на доклад: http://event.infostart.ru/2017/agenda/#item644121) Если доклад пройдет в итоговый список выступлений, то будет также выложены исходные модули мобильного приложения.

Модули формы внешней обработки:


&НаСервере
Процедура ЗагрузитьЧекНаСервере()
	
	ТекОбъект = РеквизитФормыВЗначение("Объект");
	
	URL = СокрЛП(Объект.URLЧека);
	ОтправляемаяКомандаНаФокус = URL;
	
	URLРазделенный = ТекОбъект.РазделитьURL(URL);
	Таймаут = 5;
	
	ИмяСервера           = URLРазделенный.ИмяСервера;
	ПутьКФайлуНаСервере  = URLРазделенный.ПутьКФайлуНаСервере;
	Протокол             = URLРазделенный.Протокол;
	Порт = Неопределено;
	ЗащищенноеСоединение = Неопределено;
	Если Протокол = "https" Тогда
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
	КонецЕсли;
	ПолнаяСтруктураURL = ТекОбъект.СтруктураURI(URL);	
	Если Не ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда
		ИмяСервера = ПолнаяСтруктураURL.Хост;
		Порт = ПолнаяСтруктураURL.Порт;
	КонецЕсли;
	
	Прокси = ТекОбъект.ПолучитьПрокси(Протокол);
	
	Попытка
		Соединение = Новый HTTPСоединение(ИмяСервера, Порт, , , Прокси, Таймаут, ЗащищенноеСоединение);				
	Исключение
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании HTTP-соединения с сервером %1:'") + Символы.ПС + "%2";
		ВызватьИсключение СообщениеОбОшибке;
	КонецПопытки;
	
	Заголовки = Новый Соответствие;	
	HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки);	
	
	HTTPОтвет = Соединение.Получить(HTTPЗапрос);
	ФайлОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
	HTTPОтвет = ТекОбъект.СтроковыеФункцииКлиентСерверИзвлечьТекстИзHTML(ФайлОтвета);
	КоличествоТоваровВЧеке = СтрЧислоВхождений(HTTPОтвет,"vmb_i67bc30956372029315_vblock")/13 - 1;
	
	Для НомерТовара = 0 По КоличествоТоваровВЧеке Цикл 
		
		ПоправкаНаДлинуНомераСтроки = 0;
		Если НомерТовара >= 10 Тогда
			ПоправкаНаДлинуНомераСтроки = 1;
		КонецЕсли;
		
		ТекНачалоСтрокиТовара = СтрНайти(HTTPОтвет,"vmb_i67bc30956372029315_vblock"+СокрЛП(НомерТовара),,,2);
		Если ТекНачалоСтрокиТовара = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		НачалоСтрокиТовара = ТекНачалоСтрокиТовара + 54 + ПоправкаНаДлинуНомераСтроки;
		ОкончаниеСтрокиТовара = СтрНайти(HTTPОтвет,"</span>",,НачалоСтрокиТовара);
		ДлинаНазванияТовара = ОкончаниеСтрокиТовара - НачалоСтрокиТовара;
		НазваниеТовара = Сред(HTTPОтвет,НачалоСтрокиТовара,ДлинаНазванияТовара);
		
		//количество
		НачалоСтрокиКоличества = СтрНайти(HTTPОтвет,"vmb_i67bc30956372029315_vblock"+СокрЛП(НомерТовара),,,3) + 54 + ПоправкаНаДлинуНомераСтроки;
		ОкончаниеСтрокиКоличества = СтрНайти(HTTPОтвет,"</span>",,НачалоСтрокиКоличества);
		ДлинаКоличества = ОкончаниеСтрокиКоличества - НачалоСтрокиКоличества;
		Количество = Сред(HTTPОтвет,НачалоСтрокиКоличества,ДлинаКоличества);
		
		//цена
		НачалоСтрокиЦены = СтрНайти(HTTPОтвет,"vmb_i67bc30956372029315_vblock"+СокрЛП(НомерТовара),,,4) + 54 + ПоправкаНаДлинуНомераСтроки;
		ОкончаниеСтрокиЦены = СтрНайти(HTTPОтвет,"</span>",,НачалоСтрокиЦены);
		ДлинаЦены = ОкончаниеСтрокиЦены - НачалоСтрокиЦены;
		Цена = Сред(HTTPОтвет,НачалоСтрокиЦены,ДлинаЦены);
		
		//сумма
		НачалоСтрокиСуммы = СтрНайти(HTTPОтвет,"vmb_i67bc30956372029315_vblock"+СокрЛП(НомерТовара),,,9) + 55 + ПоправкаНаДлинуНомераСтроки;
		ОкончаниеСтрокиСуммы = СтрНайти(HTTPОтвет,"</span>",,НачалоСтрокиСуммы);
		ДлинаСуммы = ОкончаниеСтрокиСуммы - НачалоСтрокиСуммы;
		Сумма = Сред(HTTPОтвет,НачалоСтрокиСуммы,ДлинаСуммы);
		
		НоваяСтрока = Объект.Покупки.Добавить();
		НоваяСтрока.НазваниеТовара = НазваниеТовара;
		НоваяСтрока.Количество = Количество;
		НоваяСтрока.Цена = Цена;
		НоваяСтрока.Сумма = Сумма;
		
	КонецЦикла;
		
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьЧек(Команда)
	
	Объект.Покупки.Очистить();
	СразуСсылкаНаЧек = "http://receipt.taxcom.ru/v01/show?fp=" + СокрЛП(Объект.ФПД) + "&s=" + СокрЛП(Формат(Объект.СуммаПокупки,"ЧГ=0")) + "&sf=False&sfn=False";
	Объект.URLЧека = СразуСсылкаНаЧек;
	ЗагрузитьЧекНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиПоСсылке(Команда)
	ЗапуститьПриложение(Объект.URLЧека);
КонецПроцедуры

Модули объекта внешней обработки:

Функция РазделитьURL(URL) Экспорт
	
	Результат = ПолучениеФайловИзИнтернетаКлиентСервер.РазделитьURL(URL);					
	
	Если Результат.Свойство("ПустьКФайлуНаСервере") Тогда
		Результат.Вставить("ПутьКФайлуНаСервере", Результат.ПустьКФайлуНаСервере);	
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

Функция СтруктураURI(СтрокаURI) Экспорт
	
	Возврат ОбщегоНазначенияКлиентСервер.СтруктураURI(СтрокаURI);	
	
КонецФункции

Функция ПолучитьПрокси(Протокол) Экспорт
	
	Попытка
		Возврат ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол);
	Исключение
		Возврат Неопределено;
	КонецПопытки;
	
КонецФункции

Процедура УстановитьHTTPЗаголовки(Заголовки) Экспорт 
	
	Куки = Новый Соответствие;
	Куки.Вставить("new-int-rel", "1");
	Куки.Вставить("expires", Формат(ДобавитьМесяц(ТекущаяДата(), 1), "Л=en_US; ДФ='ddd, dd-MMM-yyyy H:mm:ss G""MT'"));    
	Куки.Вставить("path", "/");
	СтрКуки = "";
	Для Каждого Кука Из Куки Цикл
		СтрКуки = СтрКуки + "; " + Кука.Ключ + "=" + КодироватьСтроку(Кука.Значение, СпособКодированияСтроки.КодировкаURL);	
	КонецЦикла;
	
	СтрКуки = Сред(СтрКуки, 3);
	
	Заголовки.Вставить("Cookie", СтрКуки);
	
КонецПроцедуры

Функция СтроковыеФункцииКлиентСерверИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт
	Результат = "";
	
	Текст = НРег(ИсходныйТекст);
	
	Позиция = Найти(Текст, "<body");
	Если Позиция > 0 Тогда
		Текст = Сред(Текст, Позиция + 5);
		ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5);
		Позиция = Найти(Текст, ">");
		Если Позиция > 0 Тогда
			Текст = Сред(Текст, Позиция + 1);
			ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
		КонецЕсли;
	КонецЕсли;
	
	Позиция = Найти(Текст, "</body>");
	Если Позиция > 0 Тогда
		Текст = Лев(Текст, Позиция - 1);
		ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1);
	КонецЕсли;
	
	ПозицияНачалаУдаления = стрНайти(Текст, "ttc_multiple_block_panel",,1);
	ДлинаТекста = СтрДлина(Текст);
	
	ВтораяЧастьТекста = Прав(Текст,ДлинаТекста - ПозицияНачалаУдаления - 29);
	ИсходныйТекст = ВтораяЧастьТекста;
	
	Результат = Результат + ИсходныйТекст;

	Возврат СокрЛП(Результат);
	
КонецФункции

Данная статья не претендует на универсальность в загрузке данных чеков с ОФД. Автор хотел лишь поделиться своим мнением и некоторыми наработками в вопросе работы с доступными данными с сайтов ОФД.

54-ФЗ загрузка чеков онлайн-чеки ОФД

См. также.

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Пользователь Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 руб.

21.04.2017    92699    116    40    

208

Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    167717    736    364    

393

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    15833    14    SQV0    48    

34

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения 1С:CRM ПРОФ, КОРП Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1). Подключайте любую онлайн кассу к практически любой конфигурации. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Поддерживает разрешительный режим. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows ЭМУЛЯТОР + ЭКВАЙРИНГ + МАРКИРОВКА + ПОДДЕРЖКА ФФД 1.2

6000 руб.

27.02.2017    777085    4722    9507    

2808

Розничная торговля Маркетплейсы Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Платные (руб)

Модуль для интеграции 1С с сервисом СберМаркет. Предназначен для обмена данными из торговых точек розничных сетей из баз данных 1С в базы данных СберМаркет, для отображения информации по товарам, остаткам, ценам, заказам и статусам заказов. Позволяет оперативно начать работать с сервисом СберМаркет, существенно повысить продажи и лояльность клиентов.

25000 руб.

14.10.2022    8248    10    13    

8

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима.

5400 руб.

25.05.2015    324027    1870    3029    

1008

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    213481    635    526    

449
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. maxx 994 11.07.17 22:47 Сейчас в теме
Интересно
Сейчас почти наладили взаимодействие Битрикс + Касса Атол на ферме касс с последующи сброса чека в базу 1с

А откуда информацию берете о сервисах по получению информации о чеках?
2. delta 670 12.07.17 03:41 Сейчас в теме
(1) В данном случае данные о сервисе берутся непосредственно с сервиса проверки чеков оператора фискальных данных Такском (http://receipt.taxcom.ru/) с передачей всех необходимых для проверки чеков для этого ОФД параметров: фискального признака документа и суммы чека.
В обработке это строка кода:
СразуСсылкаНаЧек = "http://receipt.taxcom.ru/v01/show?fp=" + СокрЛП(Объект.ФПД) + "&s=" + СокрЛП(Формат(Объект.СуммаПокупки,"ЧГ=0"))
3. maxx 994 12.07.17 09:41 Сейчас в теме
(2)т.е. у всех ОФД буду открытые сервисы для программного подключения и вытаскивания информации о чеках (а не просто формочка на их сайте) ?
4. delta 670 12.07.17 10:04 Сейчас в теме
(3) Этот вопрос к каждому ОФД в отдельности. На сайтах ОФД про такого рода возможности ничего не написано. Лично мы в своих исследованиях из 10 действующих на текущий момент ОФД возможность получения данных по чекам нашли только у троих. Частично этот вопрос раскрывается в моем докладе на конференции Инфостарт-2017 (http://event.infostart.ru/2017/agenda/#item644121).
5. olegmedvedev 65 12.07.17 10:12 Сейчас в теме
(4)а каких ОФД не подскажите? первый ОФД(https://www.1-ofd.ru/) там есть?
6. delta 670 12.07.17 13:22 Сейчас в теме
(5) Нет, с Первого ОФД автоматически данные получать пока не получается. Данные удается пока получать только с ЭВОТОРа, ПЕТЕР-СЕРВИС Спецтехнологии и Такскома. Но даже во всех этих случаях есть свои ньюансы и сложности.
7. Mobsted 12.07.17 14:18 Сейчас в теме
А в каком формате чек возвращается?
8. delta 670 12.07.17 17:35 Сейчас в теме
(7) Для приведенного примера работы с ОФД Такском формат чека XML. Некоторые ОФД возвращают в формате JSON.
9. delta 670 19.07.17 07:43 Сейчас в теме +10 $m
Нашел на gihube интересный код для получения данных онлайн-чека с Первого ОФД, нужно только помочь перевести его часть кода с Python на язык 1С (вставил сюда только самую значимую часть кода:

 url_first_get = "https://consumer.1-ofd.ru/#/landing"
    url_receipt_get = "https://consumer.1-ofd.ru/api/tickets/ticket/{}"
    url_receipt_find = "https://consumer.1-ofd.ru/api/tickets/find-ticket"

    def is_suitable(self, data): //функция по возврату булевых данных
        return data['fiscal_drive_id'] and data['fiscal_id'] and data['fiscal_document_number'] and not data['kkt']

    def search(self): //self - сама на себя
        print("Search in ofd1...")

        ofd1_payload = {
            "fiscalDocumentNumber":	self.fiscal_document_number,
            "fiscalDriveId":		self.fiscal_drive_id,
            "fiscalId":				self.fiscal_id
        }
        # fix for single quotes server error
        ofd1_payload = json.dumps(ofd1_payload, sort_keys=True)

        session = requests.Session() 
        session.get(self.url_first_get)

        session.headers.update({
            'Content-Type': 'application/json',  # fix 415 error
            'X-XSRF-TOKEN': session.cookies.get_dict()['XSRF-TOKEN'],
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
        })

        # print(session.headers)
        # print(session.cookies.get_dict())
        # cookies = session.cookies.get_dict().copy()
        # cookies.update({
        # 	'PLAY_LANG': 'ru'
        # })
        # print(cookies)

        ofd1 = session.post(self.url_receipt_find, data=ofd1_payload)

        if (ofd1.status_code == 200):
            answer = ofd1.json()
            status = answer["status"]
            self.receipt_id = answer["uid"]

            print("Getting the receipt...")
            ofd1 = requests.get(self.url_receipt_get.format(self.receipt_id))

            if (ofd1.status_code == 200):
                self.raw = json.dumps(
                    ofd1.json(), ensure_ascii=False).encode('utf8')
                self.receipt_data = json.loads(self.raw)

                filename = self.get_receipt_file_name()

                if not os.path.exists(filename):
                    with open(filename, 'w') as outfile:
                        outfile.write(self.raw)
                else:
                    print("Receipt already saved!")
                    if not self.resend:
                        print("Skipping...")
                        return False
                return True
            else:
                print("Error {} while getting receipt from ofd1!".format(
                    ofd1.status_code))
                if config.debug:
                    print(ofd1.text)

        elif (ofd1.status_code == 404):
            print("Not found!")

        else:
            print("Error {} while searching in ofd1!".format(ofd1.status_code))
            if config.debug:
                print(ofd1.text)

        return False
Показать
Оставьте свое сообщение