Отправка http запросов с Дайджест-аутентификацией из 1С на примере кассового аппарата MG N707TS

16.07.18

Интеграция - ККМ

Возникала необходимость использовать кассовый аппарат MG N707TS под ubuntu, как известно, COM объекты не поддерживаются. На самом деле не все так сложно! Расписывать долго не буду, смотрите "Процедура КнопкаСформироватьНажатие" , может кому пригодится.
Функция ПреобразоватьЗаголовкиВСтруктуру(текЗаловка)
    
    БезКавычек = СтрЗаменить(текЗаловка,"""","");
    БезПС = СтрЗаменить(БезКавычек,Символы.ПС,"");
    
    МассивПодстрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(БезПС);
    КлючиЗнач = Новый Соответствие;
    Для Каждого ЭлМ Из МассивПодстрок Цикл         
        Масс2 = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ЭлМ,"=");
        КлючиЗнач.Вставить(СокрЛП(Масс2[0]),СокрЛП(Масс2[1]));
    КонецЦикла;
    
    Возврат КлючиЗнач;
    
КонецФункции

Функция МД5(ПолСтрок)
    
    фу = Новый ХешированиеДанных(ХешФункция.MD5);
    фу.Добавить(ПолСтрок);
    
    с1 = СтрЗаменить(НРег(фу.ХешСумма)," ","");
    
    Возврат с1;
    
КонецФункции

Функция Рассчитать_response(Логин,Пароль,realm,Метод="GET",УРЛ,nonce,nc,cnonce,qop);
    
    мд5_А1 = МД5(Логин+":"+ realm +":"+Пароль);
    мд5_А2 = МД5(Метод+":"+ УРЛ);
    мд5_response = МД5(мд5_А1+":"+nonce+":"+nc+":"+cnonce+":"+qop+":"+ мд5_А2);    
    Возврат мд5_response;
    
КонецФункции

Процедура КнопкаСформироватьНажатие(Кнопка)
    
    _userName = "1";
    _passWord = "0";
    
    НомерОперации = 1;
    гч = Новый ГенераторСлучайныхЧисел(ТекущаяДата()-НачалоДня(ТекущаяДата()));        
    _cnonce = МД5(Строка(гч.СлучайноеЧисло(1,999999))); // можно просто "ABCDEF"  без разницы
    
    //GET / POST
    _МЕТОД = ЭлементыФормы.ПолеВыбораМетода.Значение;
    
    Если _МЕТОД = "POST" Тогда
        
        //чек
        _url = "cgi/chk";
        
        //qty  - Необязательное поле. Должно быть цифрой с не более чем тремя знаками после десятичной точки. Если поле пропущено, количество принимается равным 1.
        //price- Должно быть цифрой с не более чем двумя знаками после десятичной точки.
        //name - Название товара.
        //code - Код товара из не более чем 13 цифр
        //tax  - Необязательное поле. Номер налоговой ставки из таблицы Tax. 0 - без нало-га. При отсутствии поля продажа происходит с первой налоговой ставкой из таблицы налогов.
        
        МассивСтрокОперации = Новый Массив;
        МассивСтрокОперации.Добавить(Новый Структура("C",Новый Структура("cm","комментарий")));
        МассивСтрокОперации.Добавить(Новый Структура("S",Новый Структура("code,price,name,qty,tax",1,20.50,"товар1",3,1)));
        МассивСтрокОперации.Добавить(Новый Структура("D",Новый Структура("prc,all",-7,0))); // скидка 7% этот товар
        МассивСтрокОперации.Добавить(Новый Структура("S",Новый Структура("code,price,name,qty,tax",2,40.30,"товар2",0.750,1)));
        МассивСтрокОперации.Добавить(Новый Структура("D",Новый Структура("prc,all",-5,1))); // скидка 5% на промежуточный итог
        МассивСтрокОперации.Добавить(Новый Структура("D",Новый Структура("sum,all",-10,1)));// скидка 10 денег на весь чек        
        //сумма по чеку 73.05
        
        // обязательно!!! в отбраном порядке т.к. если наличка первая ругается не неверную сумму
        // если в обратном порядке то рассчитывает здачу
        МассивСтрокОперации.Добавить(Новый Структура("P",Новый Структура("no,sum",4,50)));    // карточкой
        //МассивСтрокОперации.Добавить(Новый Структура("P",Новый Структура("no,sum",3, 0)));// кредит
        //МассивСтрокОперации.Добавить(Новый Структура("P",Новый Структура("no,sum",2, 0)));// чеком
        МассивСтрокОперации.Добавить(Новый Структура("P",Новый Структура("no,sum",1,25))); // наличные
        
        
        стрОпераця = Новый Структура;
        стрОпераця.Вставить("F",МассивСтрокОперации); //продажа 
        //стрОпераця.Вставить("R",МассивСтрокОперации); //возврат
        зпJSON = Новый ЗаписьJSON;
        зпJSON.УстановитьСтроку();
        ЗаписатьJSON(зпJSON,стрОпераця);
        ТелоЗапроса = зпJSON.Закрыть();
        
        
    Иначе
        
        _url = "cgi/rep/pay";    
        _url = "cgi/tbl/Oper";
        _url = "cgi/chk";
        _url = "cgi/state";        
        
    КонецЕсли;
    
    СоединениеККМ             = Новый HTTPСоединение(ИП_ИмяКассы);
    HTTPЗапрос                 = Новый HTTPЗапрос(_url);
    HTTPОтвет                 = СоединениеККМ.Получить(HTTPЗапрос);
    тЗаговокАутентификации     = HTTPОтвет.Заголовки.Получить("WWW-Authenticate");    
    сотвЗаголовковАутентификации= ПреобразоватьЗаголовкиВСтруктуру(тЗаговокАутентификации);
    
    _realm     = сотвЗаголовковАутентификации.Получить("Digest realm");    
    _nonce     = сотвЗаголовковАутентификации.Получить("nonce");
    _qop    = сотвЗаголовковАутентификации.Получить("qop");
    
    
    _nc     = Формат(НомерОперации,"ЧЦ=8; ЧН=; ЧВН=; ЧГ=");    
    
    _response= Рассчитать_response(_userName,_passWord,_realm,_МЕТОД,_url,_nonce,_nc,_cnonce,_qop);
    
    тАвторизация = "Digest username="+_userName    +","
    +                "realm="    +_realm            +","
    +                "nonce="    +_nonce            +","
    +                "uri="        +_url            +","
    +                "algorithm="+сотвЗаголовковАутентификации.Получить("algorithm")+","
    +                "cnonce="    +_cnonce        +","
    +                "nc="        +_nc            +","
    +                "qop="        +_qop            +","
    +                "response="    +_response;
    
    
    ЗаголовокЗапроса = Новый Соответствие;
    ЗаголовокЗапроса.Вставить("Authorization",тАвторизация);    
    HTTPЗапрос2 = Новый HTTPЗапрос(_url,ЗаголовокЗапроса);
    Если _МЕТОД = "POST" Тогда
        
        HTTPЗапрос2.УстановитьТелоИзСтроки(ТелоЗапроса);
        HTTPОтвет2 =  СоединениеККМ.ОтправитьДляОбработки(HTTPЗапрос2);
        
    Иначе
        
        HTTPОтвет2 =  СоединениеККМ.Получить(HTTPЗапрос2);
        
    КонецЕсли;
    
    телоОтвета= HTTPОтвет2.ПолучитьТелоКакСтроку();
    Сообщить(телоОтвета);
    
    чJSON = Новый ЧтениеJSON;
    чJSON.УстановитьСтроку(телоОтвета);
    ВостДанные = ПрочитатьJSON(чJSON);
    
КонецПроцедуры

 

Пример Дайджест-аутентификацией из 1с MG 707

См. также

ККТ-ОНЛАЙН 54-ФЗ: Обработка для работы онлайн касс АТОЛ, ШТРИХ, VIKI PRINT и т.д. МАРКИРОВКА + ЭКВАЙРИНГ + БЕСПЛАТНЫЙ ДЕМО

ККМ Кассовые операции Розничная торговля Платформа 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

4800 руб.

27.02.2017    763149    4668    9495    

2781

Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, Розница 2.х, УНФ, ERP 2.х, БП 3, БГУ2

ККМ Кассовые операции Розничная торговля Обмен с ГосИС Бухгалтерский учет Оперативный учет Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение конфигурации для УТ 11.4, 11.5, КА 2.4, 2.5, Розница 3.0, 2.3 и 2.2, УНФ 1.6, УНФ 3x, ERP 2.4, 2.5, БП 3, БГУ2 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

4000 руб.

27.08.2018    115990    981    564    

827

54-ФЗ. Очередь печати для ККМ. Обработки для подключения онлайн-касс к 1С 8 (поддержка Маркировки) + Эмулятор + ФФД 1.2

ККМ Кассовые операции Розничная торговля Платформа 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    316581    1844    3008    

994

Обработка 1С для печати чеков на кассе ККТ АТОЛ.ОНЛАЙН

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

Печать чеков по документам 1С РеализацияТоваров (РасходнаяНакладная), КорректировкаРеализации, СчетНаОплату, ЗаказКлиента, ЧекККМ, ПоступлениеНаРС. Соответствует требованиям 54-ФЗ. Одна облачная касса может использоваться всеми подразделениями организации, без привязки к рабочим местам. Электронные чеки отправляются на email клиента и всегда доступны в 1С, по требованию можно распечатать. Легкая настройка: после регистрации кассы на сайте АТОЛ.ОНЛАЙН, в обработке необходимо указать логин, пароль и идентификатор группы ККТ (берутся в личном кабинете АТОЛ.ОНЛАЙН). Одну кассу можно использовать с 1С при расчетах с физ. и юр. лицами и для интернет-магазина. HTTPS протокол интеграции API v4 / ФФД 1.05 или API v5 / ФФД 1.2.

21600 руб.

23.08.2022    10551    27    4    

22

Обмен между 1С:Розница и Frontol 6 по организациям (Розница - Фронтол)

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

Обмен между 1С:Розница и Frontol 6 при торговле от нескольких организаций, а также ряд других полезных функций. Данный модуль незаменим для тех, кто ведёт учет по нескольким организациям в 1С:Розница, а на РМК (рабочее место кассира) установлен Frontol, или планируется его установка. Подходит для 1С:Розница 2.3./ 3.0, 1С:УНФ 3.0

1500 руб.

22.03.2019    78207    389    475    

161

UTM Proxy для УТМ ЕГАИС (или как не пропустить дубль алкогольной марки и недостачу на кассе + Контроль МРЦ)

Розничная торговля ККМ Обмен с ГосИС Розничная и сетевая торговля (FMCG) Россия Акцизы Платные (руб)

Что такое УТМ прокси? УТМ прокси - это универсальное программное обеспечение для борьбы с дублями марок алкогольной продукции при розничной продажи. Данное программное обеспечение - это своего рода "прокладка" между кассовым ПО и УТМ ЕГАИС. UTM Proxy работает с любыми кассами, вот некоторые из них: miniPOS, рабочие места кассиров в конфигурациях 1С (в том числе и базовые версии), Фронтол и другие...

2400 руб.

16.11.2016    49294    472    60    

24

Пробитие чека ККМ с разных складов через РМК в УТ 11

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

Расширение для 1С:Управление торговлей 11.5, которое позволяет пробивать чеки ККМ и списывать товар с разных складов. Склад списание товара можно указывать в табличной части рабочего места кассира (РМК).

5880 руб.

12.04.2023    7889    26    2    

23

Разбитие чека ККМ по группам товаров и пробитие их на разных кассах, подключенных к одному рабочему месту. Расширение для УТ 11.5, УТ 11.4, КА 2.5

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

Расширение для 1С:Управление торговлей 11.5 и 11.4, которое позволяет из рабочего места кассира разбивать чек ККМ на несколько чеков и пробивать их на разных кассах подключенных к одному РМК. Можно пробивать разные группы товаров по разным организациям на разных кассовых аппаратах.

5880 руб.

22.08.2022    10051    13    15    

17
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. FesenkoA 57 16.07.18 16:13 Сейчас в теме
Вообще то у них есть уже драйвер на НТТР ))) правда немного корявый в плане настройки, но все же
2. IgKR 5 16.07.18 16:57 Сейчас в теме
(1)
же драйвер на НТТР
видать, что я пропустил :)
3. FesenkoA 57 16.07.18 17:09 Сейчас в теме
(2) Мы и производитель (продавец?) с клиентами намучались сильно, так что знакомо... Но ваша версия тоже имеет право на жизнь!
4. rusmil 262 17.07.18 05:18 Сейчас в теме
Для тех кто не в теме можете пояснить для чего применяется эта "отправка http запросов с Дайджест-аутентификацией из 1С" ?
5. IgKR 5 17.07.18 08:56 Сейчас в теме
(4) В данном случаи я ее применяю для связи 1с и кассового аппарата. На кассовом аппарате есть свой WEB сервер, связь осуществляется по HTTP, логин пароль в открытом виде я думаю буден не безопасно, разработчики кассового аппарата по этому и применили дайджест аутентификацию. А куча JSONа это печать чека продаж. для проверки работоспособности.
6. Region102 29.07.18 18:53 Сейчас в теме
Лайк за то что сделали и выложили, дизлайк за оформление кода.


(4) Обычная basic аутентификация при отправке http запроса является не надежной, так вот многие сервисы переходят на другие способы аутентификации, при чем дайджест не самая сложная. Надеюсь 1С включить новые способы аутентификации в стандартные платформенные механизмы.
7. IgKR 5 30.07.18 13:52 Сейчас в теме
(6)
поводу оформления, Согласен. Спасибо!
8. rotting 46 11.01.19 20:02 Сейчас в теме
Спасибо тебе добрый человек
Оставьте свое сообщение