Отправка soap запроса из 1С на soap-сервер

1. olenka-ul 3 27.09.18 16:18 Сейчас в теме
Ребята, всем привет!
Прошу помощи.
Отправляю soap-запрос из 1С на сервер, в результате получаю ответ от сервера с кодом состояния 301. Самостоятельно разобраться, что я делаю не так, не получается.

Хост = "ekonika-test.verme.ru";
Логин = "..."; 
Пароль = "...";
	
HTTPСоединение = Новый HTTPСоединение(Хост, , Логин, Пароль, , 100, Новый ЗащищенноеСоединениеOpenSSL());	
	
ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/xml; charset=utf-8");

HTTPЗапрос = Новый HTTPЗапрос("/api/soap", ЗаголовокЗапросаHTTP);
 
Результат = HTTPСоединение.Получить(HTTPЗапрос);   //уже здесь код возврата результата 301
	
	employeeId = СтрСотрудник.employeeId;		
	name = СтрСотрудник.name; 
	scheduleMode=СтрСотрудник.scheduleMode; 
	dismissialDate = СтрСотрудник.dismissialDate; 
	recieptDate=СтрСотрудник.recieptDate; 			
	jobcode=СтрСотрудник.jobcode; 
	depcode=СтрСотрудник.depcode; 
	DepIsPrimary=СтрСотрудник.DepIsPrimary;
	disableHrDoc=СтрСотрудник.disableHrDoc; 			
	disableRuleHistory=СтрСотрудник.disableRuleHistory; 
	disableSkillHistory=СтрСотрудник.disableSkillHistory; 
	timestamp=СтрСотрудник.timestamp;
	
	СтрокаXML =  "
	|<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:soap=""http://ekonika-test.verme.ru/wfmportal/api/soap"">
	|  <soapenv:Header>
	|     <soap:authData>
	|        <soap:login>"+Логин+"</soap:login>
	|        <soap:password>"+Пароль+"</soap:password>
	|     </soap:authData>
	|  </soapenv:Header>
	|  <soapenv:Body>
	|     <soap:setEmployee>
	|       <soap:employeeId>"+employeeId+"</soap:employeeId>
	|<soap:employee>
	|  <soap:name>"+name+"</soap:name>
	|  <soap:scheduleMode>"+scheduleMode+"</soap:scheduleMode>
	|  <soap:recieptDate>"+recieptDate+"</soap:recieptDate>
	|  <soap:sendSms>false</soap:sendSms>
	|  <soap:sendEmail>false</soap:sendEmail>
	|</soap:employee>
	|<soap:jobList>
	|  <soap:jobHistory>
	| <soap:job>
	|<soap:code>"+jobcode+"</soap:code>
	| </soap:job>
	| <soap:isPrimary>true</soap:isPrimary>
	| <soap:start>2018-08-01</soap:start>
	|  </soap:jobHistory>
	|</soap:jobList>
	|<soap:depList>
	|  <soap:depHistory>
	| <soap:dep>
	|<soap:code>"+depcode+"</soap:code>
	| </soap:dep>
	| <soap:isPrimary>true</soap:isPrimary>
	| <soap:start>"+recieptDate+"</soap:start>
	|  </soap:depHistory>
	|</soap:depList>
	|     <soap:disableHrDoc>true</soap:disableHrDoc>
	|            <soap:disableRuleHistory>true</soap:disableRuleHistory>
	|     <soap:disableSkillHistory>true</soap:disableSkillHistory>
	|       <soap:timestamp>"+timestamp+"</soap:timestamp>
	|     </soap:setEmployee>
	|  </soapenv:Body>";
	//|</soapenv:Envelope>";
	
	HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаXML);
	
	Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	
	Ответ = Результат.ПолучитьТелоКакСтроку();
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. mrcamomile 84 27.09.18 16:50 Сейчас в теме
(1) только код ошибки 301 возвращается? или еще какие-нить параметры?
4. olenka-ul 3 27.09.18 16:51 Сейчас в теме
(3) Только код ошибки 301, причем в описании ошибки пустая строка.
5. mrcamomile 84 27.09.18 17:02 Сейчас в теме
(4) У меня вот так возвращается с логином/паролем по умолчанию - написал в личку
HTTP/1.1 500 Internal Server Error
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 27 Sep 2018 13:57:19 GMT
Content-Type: text/xml; charset=utf-8
Content-Length: 327
Connection: keep-alive
Vary: Accept-Encoding
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
X-Frame-Options: DENY
Показать
7. Sashares 33 27.09.18 17:08 Сейчас в теме
6. Sashares 33 27.09.18 17:07 Сейчас в теме
(1) А зачем вы вообще делаете такой запрос?
Результат = HTTPСоединение.Получить(HTTPЗапрос); //уже здесь код возврата результата 301


Что возвращается после POST запроса?
Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
8. olenka-ul 3 27.09.18 17:30 Сейчас в теме
(6) для проверки.
После post запроса возвращается та же ошибка 301
11. пользователь 27.09.18 17:35
Сообщение было скрыто модератором.
...
9. mrcamomile 84 27.09.18 17:34 Сейчас в теме +6 $m
(6) вот после POST
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap11env:Body>
        <soap11env:Fault>
            <faultcode>soap11env:Client.XMLSyntaxError</faultcode>
            <faultstring>None (line 0)</faultstring>
            <faultactor></faultactor>
        </soap11env:Fault>
    </soap11env:Body>
</soap11env:Envelope>
Показать
10. пользователь 27.09.18 17:34
Сообщение было скрыто модератором.
...
2. Timur.V 82 27.09.18 16:35 Сейчас в теме
Может так нужно?
HTTPЗапрос = Новый HTTPЗапрос("/api.php?action=direct&subno=" + НомерТелефонаДляПередачиВЗапрос);
    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
            Новый СертификатыУдостоверяющихЦентровWindows());
            
    HTTPСоединение = Новый HTTPСоединение("potoksms.ru", 443, , ,  ,  , ЗащищенноеСоединение);
    HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
    
    Возврат HTTPОтвет.ПолучитьТелоКакСтроку();
Показать
12. DenisCh 27.09.18 17:37 Сейчас в теме
301 - это moved permanently
В заголовки ответа глянь, там есть Location?
13. olenka-ul 3 27.09.18 17:42 Сейчас в теме
(12) Location есть - "/api/soap/". В общем то у меня так и написано в коде.
14. DenisCh 27.09.18 17:46 Сейчас в теме
(13) В ответе? Значит, нужно смотреть все остальные заголовки
15. olenka-ul 3 27.09.18 17:47 Сейчас в теме
Строку
HTTPЗапрос = Новый HTTPЗапрос("/api/soap", ЗаголовокЗапросаHTTP);

заменила на
HTTPЗапрос = Новый HTTPЗапрос("/api/soap/", ЗаголовокЗапросаHTTP);

Теперь в ответе код состояния 500, описание ошибки:

<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/"><soap11env:Body><soap11env:Fault><faultcode>soap11env:Client.SchemaValidationError</faultcode><faultstring>:10:0:ERROR:SCHEMASV:SCHEMAV_CVC_ELT_1: Element '{http://ekonika-test.verme.ru/wfmportal/api/soap}setEmployee': No matching global declaration available for the validation root.</faultstring><faultactor></faultactor></soap11env:Fault></soap11env:Body></soap11env:Envelope>
16. Sashares 33 28.09.18 10:29 Сейчас в теме
(15)Не совсем понятно, что именно вы хотите получить в рамках данного обсуждения.
Доступ к сервису у вас есть.
Что вы отправляете - не понятно, возможно уже 10 раз текст soap запроса изменен был.
Если он тот же, что в 1 сообщении, то у вас кривой xml - закомментирована строка
//|</soapenv:Envelope>";
и верхний тег получается не закрыт.
17. Ditron 189 28.09.18 13:47 Сейчас в теме
отрываю браузер, пишу адрес ресурса, выдает:
<soap11env:Envelope><soap11env:Body><soap11env:Fault><faultcode>soap11env:Client.RequestNotAllowed</faultcode><faultstring>You must issue a POST request with the Content-Type header properly set.</faultstring><faultactor/></soap11env:Fault></soap11env:Body></soap11env:Envelope>

так пишет же "вы должны использовать метод POST", а у вас первым идет GET
18. Ditron 189 28.09.18 14:20 Сейчас в теме
работает же (правда 500 код ответа) но запрос то у меня без правильных данных:
HTTPСоединение = Новый HTTPСоединение("ekonika-test.verme.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL);    
	ЗаголовокЗапросаHTTP = Новый Соответствие();
	ЗаголовокЗапросаHTTP.Вставить("Content-Type", "text/xml; charset=utf-8");
	HTTPЗапрос = Новый HTTPЗапрос("/api/soap/", ЗаголовокЗапросаHTTP);
	HTTPЗапрос.УстановитьТелоИзСтроки("
	|<soap11env:Envelope xmlns:soap11env=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:soap=""http://ekonika-test.verme.ru/wfmportal/api/soap"">
    |  <soap11env:Header>
    |     <soap:authData>
    |        <soap:login>"+1111+"</soap:login>
    |        <soap:password>"+1111+"</soap:password>
    |     </soap:authData>
    |  </soap11env:Header>
    |<soap11env:Body>
    |     <soap:setEmployee>
    |       <soap:employeeId>"+1224234+"</soap:employeeId>
    |<soap:employee>
    |  <soap:name>Тфьу</soap:name>
    |  <soap:scheduleMode>1</soap:scheduleMode>
    |  <soap:recieptDate>2018-08-01</soap:recieptDate>
    |  <soap:sendSms>false</soap:sendSms>
    |  <soap:sendEmail>false</soap:sendEmail>
    |</soap:employee>
    |<soap:jobList>
    |  <soap:jobHistory>
    | <soap:job>
    |<soap:code>0</soap:code>
    | </soap:job>
    | <soap:isPrimary>true</soap:isPrimary>
    | <soap:start>2018-08-01</soap:start>
    |  </soap:jobHistory>
    |</soap:jobList>
    |<soap:depList>
    |  <soap:depHistory>
    | <soap:dep>
    |<soap:code>12</soap:code>
    | </soap:dep>
    | <soap:isPrimary>true</soap:isPrimary>
    | <soap:start>2018-08-01</soap:start>
    |  </soap:depHistory>
    |</soap:depList>
    |     <soap:disableHrDoc>true</soap:disableHrDoc>
    |            <soap:disableRuleHistory>true</soap:disableRuleHistory>
    |     <soap:disableSkillHistory>true</soap:disableSkillHistory>
    |       <soap:timestamp>2018-08-01</soap:timestamp>
    |     </soap:setEmployee>
    |  </soap11env:Body>
    |</soap11env:Envelope>");
	Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Показать

И ответ в теле ответа:
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/"><soap11env:Body><soap11env:Fault><faultcode>soap11env:Client.SchemaValidationError</faultcode><faultstring>:10:0:ERROR:SCHEMASV:SCHEMAV_CVC_ELT_1: Element '{http://ekonika-test.verme.ru/wfmportal/api/soap}setEmployee': No matching global declaration available for the validation root.</faultstring><faultactor></faultactor></soap11env:Fault></soap11env:Body></soap11env:Envelope>
19. Sashares 33 28.09.18 14:27 Сейчас в теме
в заголовки стоит добавить "soapAction" "setEmployee"
20. olenka-ul 3 28.09.18 15:59 Сейчас в теме
Всем спасибо!
Разобралась сама, были ошибки в тексте запроса и в параметрах.
21. пользователь 01.10.18 14:14
Сообщение было скрыто модератором.
...
22. Zazamuh 06.11.18 11:50 Сейчас в теме
При ошибке 301 смотрите на заголовки ответа. В Location указывается корректный url.
23. clubkazan 29.09.21 18:27 Сейчас в теме
Добрый день!

Как удалось решить проблему? Столкнулся с такой же проблемой
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот