Делал интеграцию с DPD через SOAP сервис, конечно же само сразу не заработало.
Написал в поддержку, ответили что я не передаю не правильные заголовки XML, т.е. сам дурак, а у них все работает. В общем то на их месте я бы так же ответил ) Большое спасибо что указали верные заголовки ))
Пришлось пилить костыли отправки XML на ихний сервер.
Процедура Отправить()
URL = "http://wstest.dpd.ru/services/order2?wsdl";
URL = "http://ws.dpd.ru/services/order2?wsdl";
WSОпределения = Новый WSОпределения(URL);
Namespace = WSОпределения.Сервисы[0].URIПространстваИмен;
WSПрокси = Новый WSПрокси(WSОпределения, Namespace, WSОпределения.Сервисы[0].Имя, WSОпределения.Сервисы[0].ТочкиПодключения[0].Имя);
НастройкиDPD = Настройки.Найти(Организация, "Организация");
Если НастройкиDPD = Неопределено Тогда Продолжить;
КонецЕсли;
auth = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "auth"));
auth.clientKey = НастройкиDPD.clientKey;
auth.clientNumber = НастройкиDPD.clientNumber;
senderAddress = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "address"));
ЗаполнитьАдресОтправителя(senderAddress, Организация);
header = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "header"));
header.datePickup = Формат(ПутевойЛист.ДатаЗабораDPD, "ДФ=yyyy-MM-dd");
header.senderAddress = senderAddress;
dpdOrdersData = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "dpdOrdersData"));
dpdOrdersData.auth = auth;
dpdOrdersData.header = header;
receiverAddress = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "address"));
ЗаполнитьАдресПолучателя(receiverAddress, Заказ);
order = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "order"));
order.orderNumberInternal = a_ВолшебныйМодульСерверПовтор.ПолучитьНомер(Заказ.НомерДилер);
order.serviceCode = "CUR";
order.serviceVariant = "ДД";
order.cargoNumPack = 1;
order.cargoWeight = 2;
order.cargoVolume = 2;
order.cargoRegistered = Ложь;
order.cargoCategory = "мебель";
order.receiverAddress = receiverAddress;
dpdOrdersData.order.Добавить(order);
createOrder = WSОпределения.ФабрикаXDTO.Создать(WSОпределения.ФабрикаXDTO.Тип(Namespace, "createOrder"));
createOrder.orders = dpdOrdersData;
Результат = ОтправитьСообщение("createOrder",
URL,
WSОпределения.ФабрикаXDTO,
createOrder,
"orders");
Если ТипЗнч(Результат) = Тип("Строка") Тогда Возврат;
КонецЕсли;
Если Результат.Статус <> 200 Тогда Возврат;
КонецЕсли;
ПрочитатьОтвет(Результат.Ответ, ТабЗаказов);
КонецПроцедуры
Функция ОтправитьСообщение(Сервис, URL, ФабрикаСервиса, Сообщение, Тег)
ИмяФайлаВыгрузки = ПолучитьИмяВременногоФайла("xml");
ДокументXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0");
ДокументXML.ОткрытьФайл(ИмяФайлаВыгрузки, ПараметрыЗаписиXML);
ДокументXML.ЗаписатьОбъявлениеXML();
ФабрикаСервиса.ЗаписатьXML(ДокументXML, Сообщение);
ДокументXML.Закрыть();
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяФайлаВыгрузки);
ОсновнойТекст = ТекстовыйДокумент.ПолучитьТекст();
НачалоДокумента = "
|
|
|" ;
КонецДокумента = "
|
|";
НачалоОбласти = Найти(ОсновнойТекст, "<" + Тег + ">");
КонецОбласти = Найти(ОсновнойТекст, "" + Тег + ">") + СтрДлина("" + Тег + ">") - НачалоОбласти;
Документ = СокрЛП(Сред(ОсновнойТекст, НачалоОбласти, КонецОбласти));
НовыйДокумент = НачалоДокумента + Символы.ПС + Документ + Символы.ПС + КонецДокумента;
ТекстовыйДокумент.Очистить();
ТекстовыйДокумент.УстановитьТекст(НовыйДокумент);
ТекстовыйДокумент.Записать(ИмяФайлаВыгрузки);
Таймаут = 20000;
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.SetTimeouts(Таймаут, Таймаут, Таймаут, Таймаут);
WinHttp.Option(2, "utf-8");
WinHttp.Open("POST", URL);
WinHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
Попытка WinHttp.Send(НовыйДокумент);
Исключение Возврат "(-1) " + ОписаниеОшибки();
КонецПопытки;
Ответ = Новый Структура();
Ответ.Вставить("Ответ", WinHttp.ResponseText);
Ответ.Вставить("Статус", WinHttp.Status);
Ответ.Вставить("ОписаниеСтатуса", WinHttp.StatusText);
Возврат Ответ
КонецФункции
Процедура ПрочитатьОтвет(Ответ, ТабЗаказов)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Ответ);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ЭлементыReturn = ДокументDOM.ПолучитьЭлементыПоИмени("return");
Для Каждого Заказ Из ЭлементыReturn Цикл
ЭлементOrderNumberInternal = Заказ.ПолучитьЭлементыПоИмени("orderNumberInternal");
Если ЭлементOrderNumberInternal.Количество() = 0 Тогда Продолжить;
КонецЕсли;
Номер = ЭлементOrderNumberInternal[0].ТекстовоеСодержимое;
Строки = ТабЗаказов.НайтиСтроки(Новый Структура("Номер", Номер));
СтрЗаказ = Строки[0];
ЭлементStatus = Заказ.ПолучитьЭлементыПоИмени("status");
Если ЭлементStatus.Количество() > 0 Тогда СтрЗаказ.Статус = ЭлементStatus[0].ТекстовоеСодержимое;
КонецЕсли;
ЭлементErrorMessage = Заказ.ПолучитьЭлементыПоИмени("errorMessage");
Если ЭлементErrorMessage.Количество() > 0 Тогда СтрЗаказ.Ошибка = ЭлементErrorMessage[0].ТекстовоеСодержимое;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
