gifts2017

1с vs. МТС Мобильные сотрудники (SOAP запросы в 1С 8.2)

Опубликовал Valya Ili (Wilka) в раздел Программирование - Практика программирования

Пример использования SOAP запроса в 1С 8.2

Недавно передо мной стояла задача узнать: осуществимо ли получать данные в 1С из программного продукта МТС Мобильные сотрудники.


Как, оказалось, достучаться к данным МТС необходимо через soap запрос. МТС вам пришлет трактат с описаниями функций и адреса сервисов. В первую очередь предстоит авторизоваться на сервере, вот на этом примере и рассмотрим получение данных в 1С из МТС Мобильные сотрудники B2B XML API


Создаем форму с кнопкой Выполнить и прописываем следующий код. Не забываем в соап запросе продублировать кавычки.

Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = СформироватьЗапрос();
ПослатьЗапрос(Запрос);
Сообщить (ПослатьЗапрос(Запрос));
КонецПроцедуры

Функция СформироватьЗапрос()
    Запрос = "<?xml version=""1.0"" encoding=""utf-8""?> <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""> <soap:Body> <Login xmlns=""ХТТП_сервак""> <login>логин</login> <password>пароль</password> </Login> </soap:Body> </soap:Envelope>";
    Возврат Запрос;
КонецФункции 

Функция ПослатьЗапрос(ЗапросXML)
        АдресСервиса = "ХТТП_b2b";
        ИмяСервера = "ХТТП_сервак";
                              
        MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
        MSXML.open("POST", АдресСервиса, 0);
        MSXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        MSXML.setRequestHeader("Content-Length", СтрДлина(ЗапросXML));
        MSXML.setRequestHeader("SOAPAction", "ХТТП_сервак");
        MSXML.send(ЗапросXML);
        ОтветПолучен = Ложь;
        Для НомерЦикла = 1 по 100 Цикл
            Если MSXML.readyState >3 Тогда
                ОтветПолучен = Истина;
                Прервать;
            КонецЕсли;      
        КонецЦикла;  
              
        Если ОтветПолучен Тогда
            возврат MSXML.responseXML.xml;
            
        Иначе
            Возврат неопределено;
        КонецЕсли;
КонецФункции
 

Теперь открываем форму в толстом клиенте, и после нажатия кнопки на форме в ответ нам вернется примерно вот такой соап-ответ.

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><LoginResponse xmlns="ХТТП_сервак">
<LoginResult>
<Token>Ключ</Token>
<ID>ИД</ID>
<Name>Имя</Name>
<IsAdmin>ДаНет</IsAdmin>
<RegionID>Регион</RegionID>
<CustomerName>ИмяФИрмы</CustomerName>
<TimeOffset>240</TimeOffset>
</LoginResult></LoginResponse>
</soap:Body></soap:Envelope>

Теперь необходимо вычленить Ключ подключения из соап-ответа, и можно дальше веселиться с различными функциями от МТС Мобильные сотрудники.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Инженер Гарин (Гарин) 15.01.16 02:10
Для работы с soap удобнее использовать объекты WSПрокси и ФабрикаXDTO
gradi; WizaXxX; Светлый ум; +3 Ответить
2. Трактор Трактор (Трактор) 21.01.16 10:51
После слова COMОбъект перестал читать. У меня линукс.
3. Григорьев Анатолий (ToJIuK) 02.03.16 14:56
Переделал обработку под 1с 77 .
Получить Токен у меня получилось, а вот дальше не могу разобраться почему не работает.

SOAPAction: "http://locator.ru/LBS/GetSettings"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Header> 
<SecurityHeader xmlns="http://locator.ru/LBS"> 
<SessionToken>ТОКЕН</SessionToken> 
</SecurityHeader>
</soap:Header>	
<soap:Body> 
<GetSettings xmlns="http://locator.ru/LBS" />
</soap:Body>
</soap:Envelope>
...Показать Скрыть


Пишет
Bad Request
4. Valya Ili (Wilka) 02.03.16 20:58
(3) ToJIuK, У меня сейчас к сожалению нету методички которую присылал МТС, что это за функция GetSettings.?
Вот что у нас было далее для функции GetLocations

ЗапросLocations = СформироватьЗапросLocation(Токен, ИДабонента ,Формат(УбытФакт,"ДФ=""yyyy-MM-ddTЧЧ:мм:сс"""),Формат(ПрибФакт,"ДФ=""yyyy-MM-ddTЧЧ:мм:сс"""))  ;     
	ОтветLocations = ПослатьЗапрос("https://b2b.locator.ru/mts/ws/me_b2b_53/gps.asmx?wsdl","http://locator.ru/LBS/GetLocations",ЗапросLocations);

Функция СформироватьЗапросLocation(Token,subscriberID,dateStart,dateEnd)      
	Запрос = "<?xml version=""1.0"" encoding=""utf-8""?>
	|<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
	|<soap:Header>
	|<SecurityHeader xmlns=""http://locator.ru/LBS"">
	|<SessionToken>"+Token+"</SessionToken></SecurityHeader>
	|</soap:Header>
	|<soap:Body>
	|<GetLocations xmlns=""http://locator.ru/LBS"">
	|<subscriberID>"+subscriberID+"</subscriberID>
	|<dateStart>"+dateStart+"</dateStart>
	|<dateEnd>"+dateEnd+"</dateEnd>
	|</GetLocations>
	|</soap:Body>
	|</soap:Envelope>";
	Возврат Запрос;
КонецФункции


Функция ПослатьЗапрос(АдресСервиса,ИмяСервера,ЗапросXML) 
	
	MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
	MSXML.open("POST", АдресСервиса, 0);
	MSXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
	MSXML.setRequestHeader("Content-Length", СтрДлина(ЗапросXML));
	MSXML.setRequestHeader("SOAPAction", ИмяСервера);
	
	//сообщить(ЗапросXML);
	MSXML.send(ЗапросXML);
	ОтветПолучен = Ложь;
	Для НомерЦикла = 1 по 100 Цикл
		Если MSXML.readyState >3 Тогда
			ОтветПолучен = Истина;
			Прервать;
		КонецЕсли;      
	КонецЦикла;  
	
	Если ОтветПолучен Тогда
		возврат MSXML.responseXML;  
		
	иначе
		возврат неопределено;
	конецЕсли;
КонецФункции


...Показать Скрыть
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа