Функция ПреобразоватьЗаголовкиВСтруктуру(текЗаловка)
БезКавычек = СтрЗаменить(текЗаловка,"""","");
БезПС = СтрЗаменить(БезКавычек,Символы.ПС,"");
МассивПодстрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(БезПС);
КлючиЗнач = Новый Соответствие;
Для Каждого ЭлМ Из МассивПодстрок Цикл
Масс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);
КонецПроцедуры