SOAP запрос 1С 7.7

1. sofron 11.10.17 07:38 Сейчас в теме
Здравствуйте.
Есть сервис с API, необходимо получать данные через SOAP. Есть рабочий код на php, нужен аналог для 1С 7.7.

Есть WSDL https://api.treolan.ru/webservices/treolan-1c.wsdl

Есть описание метода,
Метод :GenCatalogV2

string GenCatalogV2(string login, string password, string category, string vendorid, string keywords, int criterion, bool inArticul, bool inName, bool inMark, int showNc);

login - логин пользователя системы B2B.
password - пароль пользователя системы B2B.
category - фильтр по разделу каталога. Указывается идентификатор раздела, “” - весь склад. Идентификатор раздела можно получить из полного склада в формате xml.
vendorid - идентификатор производителя. Для поиска по всем вендорам укажите "0".
keywords - ключевые слова для поиска. Если несколько, то используется "или". Если пустая строка - нет фильтра по наименованию или артикулу.
criterion - критерий поиска. 0 - начинается с, 1 – содержит, 2 - заканчивается на.
inArticul – поиск по артикулу. 0 - не искать в артикуле, 1 - искать в артикуле.
inName – поиск по наименованию. 0 - не искать в наименовании, 1 - искать в наименовании.
inMark – фильтр по участию в маркетинговых программах. 0 - нет фильтра по участию в маркетинговых программах, 1 участвует в маркетинговых программах. ShowNc – фильтр по некондиции. 0 –показывать некондицию, 1 – не показывать некондицию, 2 – показывать только некондицию.



Есть пример вызова на языке PHP
<?php
$soapClientParams = array('connection_timeout' => 300);
$soapClient = new
SoapClient("https://api.treolan.ru/webservices/treolan.wsdl",
$soapClientParams);

try {
$param = array(
'Login' => 'your_login',
'password' => 'your_password',
'category' => '',
'vendorid' => 0,
'keywords' => 'pro',
'criterion' => 1,
'inArticul' => 1,
'inName' => 0,
'inMark' => 0,
'ShowNc' => 1);
$info = $soapClient->__call("GenCatalogV2", $param);
$arResult = ($info['Result']);
var_dump($arResult);
}
catch (SoapFault $fault) {
print("Sorry, WS returned the following ERROR:
".$fault->faultcode."-".$fault->faultstring);
}
?>


Установил SoapUI, такой запрос возвращает корректный ответ.

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mes="http://tempuri.org/treolan/message/">
<soapenv:Header/>
<soapenv:Body>
<mes:GenCatalogV2 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<login xsi:type="xsd:string">XXXXXXXXXX</login>
<password xsi:type="xsd:string">XXXXXXX</password>
<category xsi:type="xsd:string"></category>
<vendorid xsi:type="xsd:string">0</vendorid>
<keywords xsi:type="xsd:string"></keywords>
<criterion xsi:type="xsd:int">1</criterion>
<inArticul xsi:type="xsd:boolean">true</inArticul>
<inName xsi:type="xsd:boolean">false</inName>
<inMark xsi:type="xsd:boolean">false</inMark>
<showNc xsi:type="xsd:int">0</showNc>
</mes:GenCatalogV2>
</soapenv:Body>
</soapenv:Envelope>

Пробую перенести в 1с:

СервисСОАП = CreateObject("MSSOAP.SoapClient30");
СервисСОАП.MSSoapInit("https://XXXXXXXXX:XXXXXX@api.treolan.ru/webservices/treolan-1c.wsdl");
СервисСОАП.ConnectorProperty("WinHTTPAuthScheme",1);
НашОтвет = СервисСОАП.GenCatalogV2();
Сообщить(НашОтвет);

Получаю ошибку:
Client: Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно.
- Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно.


Пробовал реализовать через GET запрос:

Адрес = "https://api.treolan.ru/webservices/treolan-1c.wsdl";
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2, "utf-8");
WinHttp.Open("GET", Адрес, 0);
WinHttp.Send();
ТекстXML = WinHttp.ResponseText();
Сообщить(ТекстXML);

В ответ получаю всю структуру WSDL...

Что делать с этим, как правильно передать метод и параметры запроса не могу разобраться.
Заранее благодарен за помощь.
По теме из базы знаний
Найденные решения
9. sofron 11.10.17 11:38 Сейчас в теме
(8)
WinHttp.SetRequestHeader("Accept-Encoding", "gzip,deflate");
WinHttp.SetRequestHeader("Content-Type", "text/xml;charset=UTF-8");
WinHttp.SetRequestHeader("SOAPAction", "http://tempuri.org/treolan/action/WebService.GenCatalogV2");
WinHttp.SetRequestHeader("Content-Length", "1003");
WinHttp.SetRequestHeader("Host", "api.treolan.ru");
WinHttp.SetRequestHeader("Connection", "Keep-Alive");
WinHttp.SetRequestHeader("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");

Не понимаю, к чему относится первая строка :
POST https://api.treolan.ru/webservices/treolan.ASP HTTP/1.1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ditp 92 11.10.17 09:13 Сейчас в теме
WinHttp.Open("POST", Адрес, 0); 
WinHttp.Send(ТекстЗапросаПоАналогии_c_SoapUI); 
3. sofron 11.10.17 10:39 Сейчас в теме
(2)
WinHttp.Open("POST", Адрес, 0);

Если использовать POST Возвращается ошибка 405: Метод не поддерживается


ТекстЗапроса = "<?xml version=""1.0"" encoding=""UTF-8"">
|<soapenv:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:mes=""http://tempuri.org/treolan/message/"">
| <soapenv:Header/>
| <soapenv:Body>
| <mes:GenCatalogV2 soapenv:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">
| <login xsi:type=""xsd:string"">xxxxxxxxxxxx</login>
| <password xsi:type=""xsd:string"">xxxxxxxx</password>
| <category xsi:type=""xsd:string""></category>
| <vendorid xsi:type=""xsd:string"">0</vendorid>
| <keywords xsi:type=""xsd:string""></keywords>
| <criterion xsi:type=""xsd:int"">1</criterion>
| <inArticul xsi:type=""xsd:boolean"">true</inArticul>
| <inName xsi:type=""xsd:boolean"">false</inName>
| <inMark xsi:type=""xsd:boolean"">false</inMark>
| <showNc xsi:type=""xsd:int"">0</showNc>
| </mes:GenCatalogV2>
| </soapenv:Body>
|</soapenv:Envelope>";

WinHttp.Open("POST", Адрес, 0);
WinHttp.Send(ТекстЗапроса);
4. ditp 92 11.10.17 10:47 Сейчас в теме
В SoapUI выполните запрос, на вкладке raw посмотрите, что как и куда шлет.
Возможно, нужно будет что-то поменять в адресе/тексте запроса/заголовках.
5. sofron 11.10.17 11:02 Сейчас в теме
(4) HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/xml; charset="UTF-8"
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/8.5
Set-Cookie: ASPSESSIONIDQGDAARQR=OHHJCEDCLGCONDLMFJKJBKEC; secure; path=/
X-Powered-By: ASP.NET
Date: Tue, 10 Oct 2017 06:55:58 GMT
Content-Length: 1727

Скрытый текст
6. ditp 92 11.10.17 11:16 Сейчас в теме
Это ответ, я предлагал тоже самое для запроса посмотреть.
7. sofron 11.10.17 11:22 Сейчас в теме
(6)
POST https://api.treolan.ru/webservices/treolan.ASP HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://tempuri.org/treolan/action/WebService.GenCatalogV2"
Content-Length: 1003
Host: api.treolan.ru
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
8. ditp 92 11.10.17 11:30 Сейчас в теме
Ну дык попробуйте заголовки в WinHttp добавить.
9. sofron 11.10.17 11:38 Сейчас в теме
(8)
WinHttp.SetRequestHeader("Accept-Encoding", "gzip,deflate");
WinHttp.SetRequestHeader("Content-Type", "text/xml;charset=UTF-8");
WinHttp.SetRequestHeader("SOAPAction", "http://tempuri.org/treolan/action/WebService.GenCatalogV2");
WinHttp.SetRequestHeader("Content-Length", "1003");
WinHttp.SetRequestHeader("Host", "api.treolan.ru");
WinHttp.SetRequestHeader("Connection", "Keep-Alive");
WinHttp.SetRequestHeader("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");

Не понимаю, к чему относится первая строка :
POST https://api.treolan.ru/webservices/treolan.ASP HTTP/1.1
10. brus 05.06.18 17:59 Сейчас в теме
Доброго всем.
Решили проблему с получением ответа? Или все-таки получаете всю структуру WSDL?
У меня та же проблема - получаю все структуру.
Что делаю: формирую запрос в SoapUI, сохраняю его в request.xml, устанавливаю заголовки (RAW), делаю POST запрос, в ответ - все структура.
В SoapUI - все норм, вижу тот ответ, который мне нужен.

xmlParser = СоздатьОбъект("Msxml2.DOMDocument");
xmlParser.load("d:\request.xml");

URL="https://client.grandline.ru/soap/wsdl.php";

MSXML2 = СоздатьОбъект("MSXML2.XMLHTTP");
MSXML2.open("POST", URL, 0, "_________", "_______________");

MSXML2.setRequestHeader("Accept-Encoding", "gzip,deflate");
MSXML2.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
MSXML2.setRequestHeader("SOAPAction", "https://client.grandline.ru#Api:getAgreements");
MSXML2.setRequestHeader("Host", "client.grandline.ru");
MSXML2.setRequestHeader("Connection", "Keep-Alive");
MSXML2.setRequestHeader("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");
MSXML2.send(xmlParser.xml);

Если MSXML2.Status <> 200 Тогда
Сообщить("Ответ сервера не ""Ок""!");
Возврат;
КонецЕсли;

xmlParser.loadXML(MSXML2.responseXML.xml);
xmlParser.Save("d:\gr.xml");

Файл request.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cli="https://client.grandline.ru">
<soapenv:Header/>
<soapenv:Body>
<cli:getAgreements>
<cli:api_key>___________________________</cli:api_key>
</cli:getAgreements>
</soapenv:Body>
</soapenv:Envelope>
11. EvgeniuXP 07.10.18 20:40 Сейчас в теме
Вот, рабочий вариант. AArticle2 - это параметр, который передаем в функцию, на втором скрине функция без параметров. Имя параметра в xml можно указывать любое, специально двойку к имени добавил, чтоб проверить. Возвращает xml, который содержит результат функции "Привет 1с".
Прикрепленные файлы:
Оставьте свое сообщение

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