И снова все доброго дня!
Преамбула: Долгое время для интернет-магазина использовали битрикс, на своем сервере. И свою самописную обработку для обмена 1с 7.7 (опять же кастомная конфа) для обмена с ним. Написана она была с использованием v7plus. Битрикс, из-за старенькой ОС (CentOS 6.5) уже не мог обновляться, а перенести магазин на новый через архив - не получилось, из-за разработчиков конкретно нашего магазина, как то так криво адаптировавших выбранный шаблон под наши хотелки, что новом движке битрикса у него вылетало все что только можно с руганью о устаревших и неподдерживаемых операторах.
Но вот так случилось что сервер с битриксом скоропостижно скончался, и прежде чем его восстанавливать, решила я оглядеться - а что за эти годы (около 10) изменилось? Может появилось что-то поинтереснее и полегче битрикса?
Ну вот обратила внимание на InSales - и выглядит симпатично, и легкая, и обмен с 1с по тому же протоколу, что и у битрикса. Но вот беда - у InSales обмен возможен только по протоколу https, который v7plus не поддерживает.
Делать нечего, засучила рукава, стала переделывать на использование системных компонент, на выбор - либо WinHttpRequest, - либо ServerXMLHTTP.
Теперь собтвенно проблема: С приёмом данных от вебсервера справилась. С передачей xml тоже. Засада появилась при попытке передать zip файл.
В v7plus все проблемы по формированию заголовков и правильной обертке данных для передачи берет на себя сама компонента. Пишешь просто
в ФайлЗаказов - имя файла
в ПутьКЗаказам - полный путь к файлу
И не важно что там в файле, xml или zip - 1с файл отправит, вебсервер его примет
А вот с компонентами всё на так просто :(
Ладно, как я уже говорила, с текстом (xml) я справилась:
Функция ОтправитьДляОбработки(Соединение, Ресурс, Знач Источник, ТипДанных, Ответ, ТипОтвета)
//ТипДанных = 1 - Путь к файлу, 2 - Строка, 3 - поток
//ТипЩтвета = 1 - Путь к файлу, 2 - Строка, 3 - поток
Если флДвижок = 1 Тогда
Соединение.Open("POST", Ресурс, 0, ПараметрыСоединения.ИмяПользователя, ПараметрыСоединения.ПарольПользователя);
Иначе
Соединение.Open("POST", Ресурс, 0);
Соединение.SetCredentials(ПараметрыСоединения.ИмяПользователя, ПараметрыСоединения.ПарольПользователя, 0);
КонецЕсли;
Если ПустоеЗначение(ПараметрыСоединения.Печенька) = 0 Тогда
Соединение.SetRequestHeader("Cookie", ПараметрыСоединения.Печенька);
КонецЕсли;
Если ТипДанных = 1 Тогда
Если Прав(Источник, 3) = "xml" Тогда
ДанныеДляОтправки = СоздатьОбъект("MSXML2.DOMDocument.6.0");
ДанныеДляОтправки.load(Источник);
Соединение.Send(ДанныеДляОтправки.xml)
Иначе
КонецЕсли;
Иначе
Соединение.Send(Источник);
КонецЕсли;
Если Соединение.Status <> 200 Тогда
Предупреждение(Ресурс + РазделительСтрок + Соединение.Status + " " + Соединение.statusText);
Возврат 0;
КонецЕсли;
Если ТипОтвета = 1 Тогда
ИначеЕсли ТипОтвета = 2 Тогда
Ответ = СтрЗаменить(Соединение.ResponseText, Симв(13), "");
Ответ = СтрЗаменить(Ответ, Симв(10), РазделительСтрок);
Иначе
Ответ = Соединение.ResponseStream;
КонецЕсли;
Возврат 1;
КонецФункции
Показать
А вот с zip - возникли проблемы.
Попыталась использовать 1cpp BinaryData:
там скорее всего как-то перекодировать надо в басе64 возмождно и указывать правильный заголоовк.
.
какими нить сторонними средствами отправить аналогичный запрос и какимнить монитором отследить пакет который формируется
(3) Я SoapUI пробовала, атачем пристегнуть к post запросу, но почему то файл на сайте сохранялся вместе с "заголовком" boundary
А если просто пихать двоичное содержимое файла архива в тело - почему то байты 0х00 в файле заменяются на 0х20, возможно неправильно укfзываю тип содержимого - application/zip?
(4)curl у меня на сервере есть, я дажа принимаю им файлы со своего другого веб-сервера, но там вся безопасность - тупо нестандртный порт ресурса и входящие разрешены только с одного адреса - адреса 1с сервера.
Но я в нем не сильна :( Как в параметры curl вставить в заголовок куку и авторизацию?
и входящие разрешены только с одного адреса - адреса 1с сервера.
- ну ставишь курл на сервере1
.
а далее я сам слабоват ;-)
в принципе там формируешь запрос нужного формата правильно оформленный и курл его пихает и возвращает ответ.
надо доки по курлу читать...