Готовим Soap для Web-сервисов. Рецепты

Публикация № 721872

Разработка - Системная интеграция - Интеграция с WEB

Web-сервисы SOAP XDTO HTTPЗапрос

В статье описаны различные варианты обмена данными с web-сервисами по протоколу Soap, основанные на личном опыте.

Disclaimer: Статей на эту тему написано очень много и, как вы, конечно, догадались, это очередная. Возможно, вы узнаете из неё что-то новое, но ничего сверхсекретного, что нельзя было бы нагуглить самостоятельно, здесь не описано. Только заметки из личного опыта.

Вступление

Рассматривать будем только ситуацию, когда есть сторонний web-сервис и стоит задача наладить обмен данными.

Строение сервиса описывается в файле WSDL (англ. Web Services Description Language)

Файл чаще всего доступен по ссылке, где находится точка входа в сам web-сервис. Я написал «чаще всего», так как бывают исключения. Например, Web-сервис на базе SAP не публикует wsdl и его можно получить только выгрузив из самого приложения.

И так, у нас есть описание web-сервиса, логин, пароль. Давайте подключимся.

// Определяем настройки

URLПространстваИменСервиса = "http://Somesite.ru";
ИмяПользователя = "TestUser";
Пароль = "q1w2e3";
МестоположениеWSDL = "https://Somesite.ru/WebService/Some?wsdl";
ИмяСервиса = "SomeServiceName";
ИмяТочкиПодключения = "SomeService_Port";

// Создаем подключение

SSL = Новый ЗащищенноеСоединениеOpenSSL();
WSОпределение = Новый WSОпределения(МестоположениеWSDL,,,,,SSL);
WSПрокси = Новый WSПрокси(WSОпределение, URLПространстваИменСервиса, ИмяСервиса, ИмяТочкиПодключения,,,SSL);
WSПрокси.Пользователь = ИмяПользователя;
WSПрокси.Пароль = Пароль;

Отлично! Мы подключились к web-сервису! По идее это основа любого варианта обмена, так как позволяет создавать объект структуры данных на основании wsdl, а работать с таким объектом одно удовольствие.

Рассмотрим XML который нам выдает SoapUI

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:som="http://Somesite.ru">
    <soapenv:Header/>
    <soapenv:Body>
        <som:SUBMISSION>
            <som:ID>357</som:ID>
            <som:CUSTOMER>
                <som:CLIENT_ID>121212</som:CLIENT_ID>
                <som:SEX>M</som:SEX>
                <som:CLIENT_BIRTHDAY>19900111</som:CLIENT_BIRTHDAY>
                <som:CARS>
                    <som:CLASS>Mercedes</som:CLASS>
                    <som:MODEL>GLS</som:MODEL>
                </som:CARS>
                <som:CARS>
                    <som:CLASS>Audi</som:CLASS>
                    <som:MODEL>TT</som:MODEL>
                </som:CARS>
            </som:CUSTOMER>
        </som:SUBMISSION>
    </soapenv:Body>
</soapenv:Envelope>

 Теперь опишем его программно

// Создаем объект и наполняем его данными

СвояФабрикаXDTO = WSОпределение.ФабрикаXDTO;

КорневойТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "SUBMISSION");
КорневойОбъект = СвояФабрикаXDTO.Создать(КорневойТип);

КорневойОбъект.ID = "4356";

КлиентТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "CUSTOMER");
КлиентОбъект = СвояФабрикаXDTO.Создать(КлиентТип);

КлиентОбъект.CLIENT_ID = "121212";
КлиентОбъект.SEX = "M"; // F - женский, M - мужской
КлиентОбъект.CLIENT_BIRTHDAY = "19900111";

// Автомобили клиента

АвтоТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "CARS");

АвтоОбъект = СвояФабрикаXDTO.Создать(АвтоТип);
АвтоОбъект.CLASS = "Mercedes";
АвтоОбъект.MODEL = "GLS";

КлиентОбъект.CARS.Добавить(АвтоОбъект);

АвтоОбъект = СвояФабрикаXDTO.Создать(АвтоТип);
АвтоОбъект.CLASS = "Audi";
АвтоОбъект.MODEL = "TT";

КлиентОбъект.CARS.Добавить(АвтоОбъект);

КорневойОбъект.CUSTOMER.Добавить(КлиентОбъект);

Данные успешно заполнены. Теперь нужно их отправить.

В этот самый момент и возникает множество нюансов. Попробуем рассмотреть каждый.

 

Рецепт 1. Отправляем XDTO-объект целиком

Результат = WSПрокси.AddCustomers(КорневойОбъект);

Остается лишь обработать результат, который нам вернул сервис и на этом всё. Согласитесь, что это очень удобно!

Но на практике не всегда бывает так. Например 1с не ладит с префиксацией определенных тэгов внутри xml, когда пространство имен корнеового тэга отличается от пространства дочерних. В таких случаях приходится собирать soap вручную. Так же приходилось сталкиваться с web-сервисами, которые в качестве параметра ждут xml в чистом виде. Маразм, но все же делается это не слишком сложно.

 

Рецепт 2. Отправляем чистый xml в качестве параметра

ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
МойXML = Новый ЗаписьXML;
МойXML.УстановитьСтроку(ПараметрыЗаписиXML);
МойXML.ЗаписатьОбъявлениеXML();

СвояФабрикаXDTO.ЗаписатьXML(МойXML, КорневойОбъект);

СтрокаXML = МойXML.Закрыть();

Если УдалитьОписаниеПространстваИмен Тогда
    Попытка
        ПервыйТэгВСтроке = СтрПолучитьСтроку(СтрокаXML,2);
        ИмяКорневогоТэга = КорневойОбъект.Тип().Имя;
        СтрокаXML = СтрЗаменить(СтрокаXML, ПервыйТэгВСтроке, "<"+ИмяКорневогоТэга+">");
    Исключение
        //ОписаниеОшибки()
    КонецПопытки;
КонецЕсли;

Результат = WSПрокси.AddCustomers(СтрокаXML);

Если не удалять пространство имен, которое 1с добавляет по умолчанию, то стало больше всего на 5 строк кода. Чаще всего я заворачиваю преобразование xml в функцию, так как обычно вызываем более одного метода.

 

Рецепт 3. Отправляем через нативный HTTPЗапрос.

СтрокаSOAP = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns=""http://Somesite.ru"">
| <soapenv:Header/>
| <soapenv:Body>
|"
+СтрокаXML+
"
| </soapenv:Body>
|</soapenv:Envelope>";

// Описываем заголовки HTTP-запроса

Заголовки = Новый Соответствие;

Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");
Заголовки.Вставить("SOAPAction", "http://sap.com/xi/WebService/soap1.1");
Заголовки.Вставить("Authorization", "Basic "+ПолучитьBase64ЗаголовокАвторизации(ИмяПользователя, Пароль));

// ВНИМАНИЕ!!!
// Нельзя заполнять программно следующие заголовки, так как это приводит к ошибке
// Платформа сама правильно их заполнит
//Заголовки.Вставить("Accept-Encoding", "gzip,deflate");
//Заголовки.Вставить("Content-Length", Формат(СтрДлина(СтрокаSOAP),"ЧГ=")); // длина сообщения
//Заголовки.Вставить("Host", "Somesite.ru:8001");
//Заголовки.Вставить("Connection", "Keep-Alive");
//Заголовки.Вставить("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");


// Подключаемся к сайту.

Соединение = Новый HTTPСоединение("Somesite.ru/WebService/Some",,ИмяПользователя, Пароль,,,SSL, Ложь); // Адрес должен быть без https://

// Получаем текст корневой страницы через POST-запрос.

HTTPЗапрос = Новый HTTPЗапрос("/GetCustomer", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаSOAP);

Результат = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос);

В этом варианте нам придется собрать soap вручную. По сути мы просто оборачиваем xml из рецепта 2 в оболочку soap, где в зависимости от требований web-сервиса мы можем менять наш soap как душе угодно.

Далее описываем заголовки согласно документации. Некоторые сервисы спокойно прожуют наш запрос и без заголовков, тут надо смотреть конкретный случай. Если вы не знаете какие заголовки прописывать, то самый простой способ это подглядеть запрос в SoapUI переключившись во вкладку RAW.

Функция получения Base64 строки выглядит так (подсмотрел здесь):

Функция ПолучитьBase64ЗаголовокАвторизации(ИмяПользователя, Пароль)

    КодировкаФайла = КодировкаТекста.UTF8;
    ВременныйФайл = ПолучитьИмяВременногоФайла();
    Запись = Новый ЗаписьТекста(ВременныйФайл, КодировкаФайла);
    Запись.Записать(ИмяПользователя+":"+Пароль);
    Запись.Закрыть();

    ДвДанные = Новый ДвоичныеДанные(ВременныйФайл);
    Результат = Base64Строка(ДвДанные);
    УдалитьФайлы(ВременныйФайл);

    Результат = Сред(Результат,5);

    Возврат Результат;

КонецФункции

Есть важный момент. При работе с HTTPСоединение указывайте адрес без указания протоколов «http://» и «https://», иначе рискуете потратить время на поиск не очевидной ошибки.

Рецепт 4. Отправляем через WinHttpRequest

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");

WinHttp.Option(2,"UTF-8");
WinHttp.Option(4, 13056); //intSslErrorIgnoreFlag
WinHttp.Option(6, true); //blnEnableRedirects
WinHttp.Option(12, true); //blnEnableHttpsToHttpRedirects

WinHttp.Open("POST", "https://Somesite.ru/WebService/Some/GetCustomer", 0);
WinHttp.SetRequestHeader("Content-type", "text/xml");
WinHttp.SetCredentials(ИмяПользователя, Пароль, 0);

WinHttp.Send(СтрокаSOAP);
WinHttp.WaitForResponse(15);

XMLОтвет = WinHttp.ResponseText();

Здесь по сути тоже самое, что и в предыдущем варианте, но работаем с COMОбъектом. Строку соединения указываем полностью, вместе с протоколом. Особое внимание следует уделить только флагам игнорирования ошибок SSL-сертификатов. Они нужны, если мы работаем по SSL, но без определенного сертификата, так как создать новое защищенное соединение в таком варианте не предоставляется возможным (или я не умею как). В остальном механизм схож с предыдущим.

Так же помимо "WinHttp.WinHttpRequest.5.1" можно использовать "Microsoft.XMLHTTP", "Msxml2.XMLHTTP", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP.6.0", если вдруг не взлетит на WinHttp. Методы практически такие же, только количество параметров другое. Подозреваю, что один из этих вариантов и зашит внутри объекта 1c HTTPЗапрос.

На данный момент это все рецепты, что у меня есть. Если столкнусь с новыми, то обязательно дополню статью.

 

Обработка результата

В рецепте 1 мы чаще всего получаем готовый XDTO-объект и работаем с ним как со структурой. Во всех остальных случаях можно преобразовывать xml-ответ в XDTO

Если Результат.КодСостояния = 200 Тогда

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
ОбъектОтвет = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_ID);
Сообщить(ОбъектОтвет.Body.Response.RESPONSE_TEXT);

КонецЕсли; 

Тут все просто.

 

Вместо заключения

1. Начинайте работу с web-сервисами с программы SoapUI. Она предназначена для таких работ и позволит быстрее понять как работает тот или иной сервис. Для освоения есть статья про SoapUI.

2. Если вы обмениваете с сервисом по незащищенному каналу http и возникает вопрос в том что именно отправляет 1с в своих сообщениях, то можно воспользоваться снифферами трафика такими как Wireshark, Fiddler, и другие. Проблема возникнет только если используете ssl-соединение.

3. Если все же web-сервис общается по https, то ставим на удаленной машине (любой, главное не на своей) сервер Nginx, к которому мы и будем обращаться, а он в свою очередь запакует все в https и перешлет куда нужно (reverse proxy) и в стандартный конфиг добавляем:

server {
    listen 0.0.0.0:8080;
    server_name MyServer;
    location ~ .* {
        proxy_pass https://Somesite.ru:8001;
        proxy_set_header Host $host;
        proxy_set_header Authorization "Basic <base64 ваш пароль:логин>";
        proxy_pass_header Authorization;
    }
}

4. Если вас пугает XDTO, то рекомендую ознакомится с циклом статей злого бобра Андрея XDTO - это просто.

5. Если аутентификация предполагает использование Cookie, то нашлась следующая статья.

 

P.S. Если у вас появились вопросы, предложения по улучшению кода, есть собственные рецепты, отличные от описанных, вы нашли ошибки или считаете, что автор "ниправ" и ему "не место в 1с", то пишите комментарии, и мы все обсудим.

 

UPD:
1. Добавил по просьбе join2us XML, который выдавал SoapUI
2. Исправил ошибки найденные пользователем VasilVtoroy

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. unichkin 1264 28.12.17 19:03 Сейчас в теме
Через Altova XML spy еще удобно тестить, она и поживее чем Soap UI. Интерфейс такой не дает конечно) Но на практике обычно надо было посылать готовый запрос, а не вбивать его вручную.
2. CSiER 29 29.12.17 16:37 Сейчас в теме
2. Если вы обмениваете с сервисом по незащищенному каналу http и возникает вопрос в том что именно отправляет 1с в своих сообщениях, то можно воспользоваться сниферами трафика такими как Wireshark, Fiddler, и другие. Проблема возникнет только если используете ssl-соединение.
, fiddler - очень удобно, можно работать и с ssl/tls (Tools-Options-HTTPS), а вот Wireshark для этой задачи не так удобен.
spectre1978; +1 Ответить
3. baton_pk 399 30.12.17 17:20 Сейчас в теме
(0)
Например 1с не ладит с префиксацией определенных тэгов внутри xml, когда пространство имен корнеового тэга отличается от пространства дочерних.


вот на этом месте можно подробнее? И желательно с примерами, если вдруг остались под рукой.
4. 987ww765 256 09.01.18 09:10 Сейчас в теме
(3) Да. Веб-сервис ждет на входе xml следующего вида:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://SomeSite.org/customer">
	<soapenv:Header/>
	<soapenv:Body>
		<cus:CustomerCore>
 			<ID>357</ID>
 			<CUSTOMER>
  				<CLIENT_ID>222</CLIENT_ID>
    				<SEX>M</SEX>
  				<CLIENT_TYPE>P</CLIENT_TYPE>
  				<CLIENT_BIRTHDAY>19800101</CLIENT_BIRTHDAY>
				...
 			</CUSTOMER>
		</cus:CustomerCore>
	</soapenv:Body>
</soapenv:Envelope>
Показать


Обратите внимание на префикс cus в версии от SoapUI

И теперь вариант от 1с:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<CustomerCore xmlns="http://SomeSite.org/customer" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
			<ID>357</ID>
 			<CUSTOMER>
 				<CLIENT_ID>222</CLIENT_ID>
  				<SEX>M</SEX>
 				<CLIENT_TYPE>P</CLIENT_TYPE>
				<CLIENT_BIRTHDAY>19800101</CLIENT_BIRTHDAY>
				...
 			</CUSTOMER>
		</CustomerCore>
	</soapenv:Body>
</soapenv:Envelope>
Показать


т.е. Пространство имен "http://SomeSite.org/customer" должно распространяться только на элемент CustomerCore, а не на всю ветку.
5. baton_pk 399 09.01.18 10:45 Сейчас в теме
(4) Ну, это вообще косяк принимающей стороны, ибо эти два XML равнозначны по своей сути. И 1С тут нисколько не лукавит, создавая такой запрос.
6. 987ww765 256 09.01.18 11:38 Сейчас в теме
(5) Согласен, но изменить принимающую сторону бывает невозможно и приходится подстраиваться. К тому же SoapUI интерпретировал WSDL ровно так, как того ждал принимающий веб-сервис
N!ghtmare; +1 Ответить
7. baton_pk 399 09.01.18 11:53 Сейчас в теме
(6)
и приходится подстраиваться

с этим не поспоришь.

Но лучше обойтись штатными способами:
вместо
СтрокаSOAP = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns=""http://Somesite.ru"">
| <soapenv:Header/>
| <soapenv:Body>
|"
+СтрокаXML+
"
| </soapenv:Body>
|</soapenv:Envelope>   "; // 3 пробела в конце обязательно!!!!
Показать


сделать честные ЗаписатьНачалоЭлемента("Envelope"); Потом ЗаписатьСоответствиеПространствИмен("cus", "http://SomeSite.org/customer");

и уже потом в эту же запись XML записать фабрикой необходимый объект. Потом закрыть запись и добавить три пробела, если уж принимающая сторона настолько упорота.

Всё же, пилить XML текстом - неблагодарное дело.
VasilVtoroy; +1 Ответить
8. 987ww765 256 09.01.18 12:18 Сейчас в теме
(7) Но это же тоже самое. Строку xml я формирую не сам, а получаю из фабрики. Опять же, не претендую на правду в последней инстанции.
9. baton_pk 399 09.01.18 12:21 Сейчас в теме
(8) я про разделы Envelope и Body. Если их записать штатными средствами платформы и в них же туда прописать соответствие пространств имён с нужным префиксом, то фабрика при записи объекта уже не будет совать xmlns, так как он уже будет не нужен.
10. 987ww765 256 09.01.18 15:06 Сейчас в теме
(9) Видимо я не понял суть решения. То есть создаем объект ЗаписьXML, прописываем Envelope, Body. Отлично. Как потом дружим их с фабрикой?
11. baton_pk 399 09.01.18 15:45 Сейчас в теме
(10) точно так же:

СвояФабрикаXDTO.ЗаписатьXML(МойXML, КорневойОбъект);


где перед этим кодом запись начал элементов Envelope и Body с указанием пространств имён, а после этого конца, соответственно, закрытие элементов Body и Envelope.
20. nikolayvg 20 13.07.18 10:41 Сейчас в теме
(4)Здравствуйте. Вопрос не по теме, но относительно вашего комментария.
Я создаю WSПрокси, заполняю параметры и вызываю метод GetReferenceData.

СервисЭП = WSСсылки.cse.СоздатьWSПрокси("http://www.cargo3.ru", "WebService", "WebServiceSoap");
	
	
	ТипWSПараметра1 = СервисЭП.ФабрикаXDTO.Пакеты.Получить("http://www.cargo3.ru").Получить("Element");//GetReferenceData");
	WSПараметр1 = СервисЭП.ФабрикаXDTO.Создать(ТипWSПараметра1);
	WSПараметр1.Key	= "Reference";
	WSПараметр1.ValueType	= "string";
	WSПараметр1.Value	= "Currencies";
	
	
	ТипWSПараметра = СервисЭП.ФабрикаXDTO.Пакеты.Получить("http://www.cargo3.ru").Получить("Element");//GetReferenceData");
	WSПараметр	   = СервисЭП.ФабрикаXDTO.Создать(ТипWSПараметра);
	WSПараметр.Key	= "parameters";
	WSПараметр.List.Добавить(WSПараметр1);
	
	Данные = СервисЭП.GetReferenceData(Логин, Пароль, WSПараметр);
Показать


Каким образом я могу сначала посмотреть xml запрос, который отправляется? Просто возникает ошибка, а отладить не получается.
21. 987ww765 256 17.07.18 10:00 Сейчас в теме
(20) Можно преобразовать обратно из фабрики в XML

	
	МойXML = Новый ЗаписьXML;
	МойXML.УстановитьСтроку(Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина));
	МойXML.ЗаписатьОбъявлениеXML();
	
	СервисЭП.ФабрикаXDTO.ЗаписатьXML(МойXML, WSПараметр); 
	
	СтрокаXML = МойXML.Закрыть();
Показать


Но лучше всего воспользоваться сниферами типа Fiddler, Wireshark и т.д. Такой метод будет более точным.
nikolayvg; +1 Ответить
22. nikolayvg 20 18.07.18 06:10 Сейчас в теме
(21) Спасибо. Fiddler помог. Нашел единственное отличие. Почему-то 1С не формирует тег <soap:Header/>.
Должно быть
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<m:GetReferenceData xmlns:m="http://www.cargo3.ru">
а у меня
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:GetReferenceData xmlns:m="http://www.cargo3.ru">
где искать причины?
23. 987ww765 256 20.07.18 15:00 Сейчас в теме
(22) Это заголовки. Я не знаю как насильно прописать заголовок в XML при работе с фабрикой. Вообще по идее он никак не должен влиять на поведение системы. Уверены, что наличие <soap:Header/> изменит ситуацию?
12. jaroslav.h 27.01.18 22:01 Сейчас в теме
Есть веб сервис который на вход принимает ID, KEY (string)

Смотрю через SoapUI структура

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:api2="http:/name/Api20" xmlns:int="http://name/integration20">
<soap:Header/>
<soap:Body>
<api2:AllCatalog>
<api2:AllCatalogRequest>
<int:Auth>
<int:ID></int:ID>
<int:KEY></int:KEY>
</int:Auth>
</api2:AllCatalogRequest>
</api2:AllCatalog>
</soap:Body>
</soap:Envelope>
Показать


как данную структуру описать из 1С?
13. 987ww765 256 30.01.18 08:10 Сейчас в теме
(12) Сейчас 1с неправильно формирует? Раз через SoapUI работаете, то описание веб сервиса (wsdl) у вас есть. Попробуйте так как описано в статье (Вступление и рецепт 1). У вас соответственно будет вот так:

// Создаем объект и наполняем его данными

СвояФабрикаXDTO = WSОпределение.ФабрикаXDTO;

КорневойТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "AllCatalog");
КорневойОбъект = СвояФабрикаXDTO.Создать(КорневойТип);

ЗапросСправочниковТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "AllCatalogRequest");
ЗапросСправочниковОбъект = СвояФабрикаXDTO.Создать(ЗапросСправочниковТип );

АвторизацияТип = СвояФабрикаXDTO.Тип(URLПространстваИменСервиса, "Auth");
АвторизацияОбъект = СвояФабрикаXDTO.Создать(АвторизацияТип );

АвторизацияОбъект.ID = "121212";
АвторизацияОбъект.KEY= "**********";

ЗапросСправочниковОбъект.Auth = АвторизацияОбъект;
КорневойОбъект.AllCatalogRequest = ЗапросСправочниковОбъект;

Показать
jaroslav.h; +1 Ответить
14. jaroslav.h 30.01.18 08:54 Сейчас в теме
15. VasilVtoroy 30.01.18 18:52 Сейчас в теме
1) Content-Length устанавливать не надо.
Платформа сама его правильно посчитает (в отличие от приведенного кода)


2) Fiddler тоже позволяет перехватывать защищенные http-соединения

3) Заголовок Host тоже не надо устанавливать

4) Basic-авторизацию можно делать не вручную, а задав в HTTPСоединения свойства логин и пароль.
Таким образом вы и Windows аутентификацию можете делать.

5) Accept-Encoding устанавливать просто нельзя, платформа не поддерживает сжатие HTTP!
16. 987ww765 256 31.01.18 07:59 Сейчас в теме
(15) Заголовки я не сам придумал. Это было одним из требованием принимающей стороны. По поводу Fiddler`а согласен, но я поздно узнал, что он умеет перехватывать https.
17. VasilVtoroy 31.01.18 15:11 Сейчас в теме
(16) Я же не говорю, что он не нужны.
Но пункты (1) и (3) платформа формирует сама, и более правильно

По пункту (4) - тоже самое можно сделать проще

По пункту (5) - такого требования точно быть не могло. Если бы на другой стороне был сервер с поддержкой сжатия, то вы бы получили чушь вместо ответа
18. almas 198 16.03.18 09:50 Сейчас в теме
Спасибо, за информацию. Статья очень помогла для настройки подключения к SilverDat.
19. 987ww765 256 21.03.18 09:54 Сейчас в теме
(18) Это здорово. Были какие-то особенности при настройке обмена?
24. join2us 8 21.12.18 23:37 Сейчас в теме
Отлично! Мы подключились к web-сервису! По идее это основа любого варианта обмена, так как позволяет создавать объект структуры данных на основании wsdl, а работать с таким объектом одно удовольствие.

// Создаем объект и наполняем его данными


Вот честное слово! Автор, если бы Вы перед созданием объекта в 1С привели пример хмл из SoapUI - нубам было бы в разы проще усвоить корректный синтаксис...

ЗЫ: в любом случае, спасибо за инфо
25. 987ww765 256 26.12.18 07:49 Сейчас в теме
(24) Вы правы. Мое упущение. Сомневаюсь, что найду эту xml, но попробую сделать аналог, чтобы было понятнее.
26. Dorosh 139 28.12.18 17:29 Сейчас в теме
SoapUI хорошая тулза, но с неприятным для нашей работы недостатком. Она не переваривает кириллицу, ни в запросах ни в ответах ни в авторизации.
27. 987ww765 256 29.12.18 07:31 Сейчас в теме
(26) Может вы пробовали старую версию? Сейчас она прекрасно переваривает в любых направлениях
Оставьте свое сообщение

См. также

Получение html-кода страницы. JS из 1С

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования WEB

Получение исходника страницы, выполнение произвольного js-кода. Теперь с WebKit от 1С.

сегодня в 08:30    177    Yashazz    0       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Отладка конфигурации в режиме веб-клиента

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

После очередного обновления платформы при попытке запуска отладки в веб-клиенте стало появляться сообщение. Собственно, до этого момента никогда веб-клиентом особо не пользовался и необходимости в отладке как-то не возникало. Данное сообщение заставило задуматься, что не так с отладкой в веб-клиенте и как ее собственно включить? Тот самый неловкий момент, когда программа просит обратиться к администратору, а администратор - это вы.

12.02.2020    1191    gamletspb    0       

Анализ работы внешней обработки сервиса МодульКасса применительно к задаче фискализации чеков при доставке

Статья Программист Нет файла v8 УТ11 Россия Бесплатно (free) Кассовые операции WEB

В статье разберу работу внешней обработки для работы с МодульКасса, опишу недочеты и применимость для организации доставки, предложу собственный вариант реализации.

11.02.2020    360    malikov_pro    0       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Вариант реализации REST API для 1С-Битрикс Управление сайтом

Статья Программист Нет файла v8 Россия Бесплатно (free) WEB

В статье опишу вариант обмена 1С УТ 11.4 и 1С-Битрикс УС 18.5 с иcпользованием компонентов Symfony, в качестве примера обмен данными по складам.

28.01.2020    971    malikov_pro    2       

Вариант реализации работы с сервисом Dadata применительно к конфигурации УТ 11.4 и подобным

Статья Программист Нет файла v8 УТ11 Россия Бесплатно (free) WEB

В статье описывается реализация получения данных с сервиса DaData при работе с формами справочников в конфигурации УТ 11 для дополнения информации по ФИО, ИНН, Адресу.

22.01.2020    817    malikov_pro    0       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Двусторонний обмен с поставщиком через интернет-магазин для реализации товаров с ответственного хранения (с 01.02.2020 "Партии" не используются)

Статья Программист Нет файла v8 УНФ Оптовая торговля, дистрибуция, логистика Россия УУ Windows Бесплатно (free) Файловые протоколы обмена, FTP WEB

Рассмотрены реализация двустороннего обмена данными с использованием API-сервиса сайта поставщика при продаже товаров со склада ответственного хранения, алгоритм движения товаров и обмена документами на примере конфигурации 1С: УНФ у партнера, который взаимодействует с поставщиком "ООО Пауэр-Интернэшнл-шины" - одним из крупнейших в России поставщиков автомобильных шин и дисков.

16.01.2020    1215    chkurs    0       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Немного о интеграции с CRM AMO

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Немного информации о том, как настроить интеграцию с CRM AMO. Пример функций для подключения к АМО и обновления заказа. Пример на основе API авторизации.

15.11.2019    1620    xxxAndricxxx    6       

Ещё немного о ИНН и сервисе DaData

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Об использовании сервиса dadata и немного информации о возможностях получать данные по ИНН. Возможно, кому-то будет полезным.

14.11.2019    3736    xxxAndricxxx    21       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Вариант реализации клиента SOAP на примере получения остатков из MERLION

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB

В статье приведу пример клиента к сервису SOAP, функции которого принимают несколько значений типа строка или массив строк.

14.11.2019    1501    malikov_pro    0       

Разбор любого JSON-объекта в соответствующую структуру

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Инструментарий разработчика WEB

Данная публикация предназначена разработчикам 1С, которым приходиться разбирать данные формата JSON. Выложенный пример кода создает объект типа Структура, полностью повторяющий структуру данных формата JSON.

13.11.2019    3309    user665435_al.windstorm    14       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

Проверка reCAPTCHA от Google на стороне HTTP-Сервиса

Статья Программист Нет файла v8 Россия Бесплатно (free) WEB

Код проверяет переданный токен reCAPTCHA от Google при вызове HTTP-Сервиса. Таким образом проверяем, отправил ли данные на наш HTTP-Сервис робот или реальный пользователь.

06.11.2019    2486    AVR    0       

Простой способ опубликовать базу 1C из дома в интернет, когда Ваш провайдер этого не обеспечивает (3G, 4G модем и т.п.)

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB Облачные сервисы, хостинг

Если у Вас возникла потребность опубликовать из дома во всемирную паутину базу 1С (например, для тестирования), в т.ч. интерфейс OData, HTTP или Web-сервисы, а интернет-провайдер (например, 3G Мегафон) не предоставляет возможности инициировать соединения извне, то в конце статьи Вы найдете простой, быстрый и условно-бесплатный способ это сделать.

14.10.2019    6478    uno-c    25       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Самый примитивный HTTP-сервис в мире

Статья Программист Нет файла v8 Бесплатно (free) WEB

Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

12.09.2019    11783    YPermitin    26       

Свой веб интерфейс к 1С: побеждаем CORS на IIS, сохраняя авторизацию

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB Администрирование данных 1С

Если "веб морда" расположена не по тому же адресу, что и публикация 1С (что часто бывает, например, при разработке, публикация 1С на http://localhost/1c, а разрабатываемое веб-приложение на http://localhost:8080) или, например, мы заходим на веб приложение то по ip адресу, то по имени сервера, или просто веб сервер и сервер, на котором опубликована 1С - это разные сервера, то для большинства запросов от браузера к 1С срабатывает политика CORS, которая заключается в том, что браузер сначала посылает запрос OPTIONS, на который сервер должен ответить определенным образом, заголовками, содержащими разрешения, а потом уже (если разрешение есть), браузер посылает основной запрос. В случае, когда в публикации 1С (default.vrd) жестко прописан логин и пароль, разрулить ситуацию можно средствами 1С. В случае же, когда нужно сохранить авторизацию (или используется стандартный интерфейс odata), начинаются проблемы.

20.08.2019    6569    Fragster    9       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

Вывод отчетов из Штрих-М Торговое предприятие 5 на кассовое ПО Кассир 5 через веб-сервис

Статья Системный администратор Программист Нет файла v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Windows Розничная торговля Бесплатно (free) WEB

Универсальный механизм вывода отчетов товароучетной системы Штрих-М Торговое предприятие в кассовое ПО Кассир 5 посредством веб-сервиса.

14.08.2019    2968    Van2507    1       

Совсем простой обмен HTTP, 2 функции

Статья Программист Нет файла v8 Бесплатно (free) WEB

Функция для вызова рест-сервиса и функция для разбора результата. Быстро, просто, универсально.

12.08.2019    5827    Yashazz    15       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery. Продолжение

Статья Программист Расширение (cfe) v8 1cv8.cf Бесплатно (free) WEB

Получение изображений из информационной базы и отправка файлов через "фронт" на HTML/CSS/JS.

08.08.2019    5227    Sedaiko    1       

1Script.Web. Интернет-приложения на языке 1С

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    15329    Evil Beaver    32       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

Неверные остатки на сайте битрикс

Статья Программист Нет файла v8 УТ11 Бесплатно (free) WEB

Исправление процедуры выгрузки остатков на сайт битрикс из УТ 11

25.04.2019    3476    distorshion    4       

Отправка файлов через SOAP. SOAP with attachments, MTOM

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB

В продолжение «своеобразной» поддержки 1С протокола SOAP, описанной в https://infostart.ru/public/965259/, опишу еще одну особенность. 1С не поддерживает возможность отправки файлов-вложений. Для решения этой проблемы пришлось самостоятельно писать формирование пакетов SOAP и разбор ответов сервера.

18.04.2019    5143    mysm    2       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

HTML-клиент у конфигурации 1С

Статья Программист Нет файла v8 Бесплатно (free) WEB

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    13667    Smaylukk    119       

Парсинг сайтов из 1С на примере ломбарды.рф с помощью XPATH для ДокументDOM

Статья Программист Нет файла v8 Бесплатно (free) WEB

На всякую хитрую гайку всегда найдется болт с резьбой (с)

01.04.2019    10835    starik-2005    33       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

Логируй больше! 1С + UPD + GELF + Graylog

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Администрирование данных 1С WEB Разработка

Наличие производительной платформы управления логами - это жизненно важный элемент в ландшафте систем с высокой активностью. Рассмотрим один из подходов логирования активности систем на платформе 1С в Graylog.

26.02.2019    7950    Lars Ulrich    15