SOAP-пространство PolyApiIDE принимает WSDL, собирает конверт запроса и показывает Fault так, чтобы было понятно, где именно разошлись схема и тело.
SOAP жив там, где живут корпоративные и государственные интеграции: обмен с ведомствами, банковские шлюзы, унаследованные ESB. Формат придирчив к деталям — один неверный Content-Type или пустой SOAPAction, и сервис отвечает Fault вместо данных.
Поэтому SOAP в PolyApiIDE сделан как отдельный тип пространства: WSDL импортируется, операции видны списком, а окружения хранят адреса контуров и реквизиты доступа.
Это HTTP POST с XML-телом. В теле — конверт Envelope, внутри него необязательный Header и обязательный Body с вызовом операции. Версия SOAP определяет и пространство имён конверта, и транспортные заголовки.
В SOAP 1.1 используется namespace http://schemas.xmlsoap.org/soap/envelope/, Content-Type: text/xml; charset=utf-8 и отдельный заголовок SOAPAction — его значение берётся из soapAction в binding-секции WSDL и в кавычках. В SOAP 1.2 namespace другой — http://www.w3.org/2003/05/soap-envelope, тип application/soap+xml; charset=utf-8, а действие передаётся параметром action внутри Content-Type, а не отдельным заголовком. Половина загадочных отказов объясняется именно путаницей между этими двумя наборами.
Импорт WSDL входит в бесплатный тариф. Из описания берутся адрес сервиса, список операций и значения SOAPAction — это снимает львиную долю ручной работы и опечаток.
Тело строится по схеме из WSDL. Следите за префиксами пространств имён и порядком элементов: в XML Schema порядок внутри sequence значим, и перестановка полей — такая же ошибка, как пропуск обязательного элемента.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns:GetBalance xmlns:ns="urn:example:billing">
<ns:account>{{account}}</ns:account>
</ns:GetBalance>
</soap:Body>
</soap:Envelope>
Для SOAP 1.1 нужны Content-Type: text/xml; charset=utf-8 и непустой SOAPAction. Для SOAP 1.2 — application/soap+xml; charset=utf-8 с параметром action. Версию берите из WSDL, а не угадывайте.
Адрес контура, логин, номера счетов и идентификаторы запроса держите в окружении и подставляйте через {{var}} — подстановка работает и в XML-теле. Так один запрос ходит и в тест, и в прод без правки конверта.
Ошибка SOAP приходит конвертом с элементом Fault, обычно при HTTP-коде 500. В версии 1.1 смотрите faultcode и faultstring, в 1.2 — Code/Value и Reason/Text. Значение soap:Client (в 1.2 — soap:Sender) означает, что виноват запрос, soap:Server — что сломалось на стороне сервиса.
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| HTTP 415 | Сервер ждёт другой Content-Type | text/xml для SOAP 1.1, application/soap+xml для 1.2 |
| Fault про SOAPAction | Заголовок пустой или не тот | Взять значение soapAction из binding в WSDL, в 1.1 — в кавычках |
| Fault с faultcode soap:Client | Тело не прошло проверку по схеме | Обязательные элементы, порядок внутри sequence, типы значений |
| Fault про unexpected element | Неверный namespace или префикс | Сверить targetNamespace операции с конвертом |
| HTTP 200 с пустым Body | Односторонняя операция | Проверить, что по WSDL ответ вообще предусмотрен |
| HTTP 401 или 403 | Отказ на шлюзе, до сервиса не дошло | Реквизиты доступа, сертификат канала, белый список адресов |
Значительная часть наших пользователей работает с ведомственными API, и там SOAP по-прежнему основной формат. Расширение помогает с транспортной частью: импорт WSDL, конверт, заголовки, окружения под контуры, повторяемые проверки операций и история ответов.
Чего оно не делает — и это важно сказать до установки: расширение не формирует электронную подпись и не собирает MTOM-вложения. Если регламент требует подписанный XML, конверт подписывается внешним средством, а в клиент попадает уже готовое тело. Для задач интеграции с ведомственными сервисами у нас есть отдельная страница.
Нет. Импорт WSDL и отправка SOAP-запросов доступны на Free, регистрация на сайте для этого не нужна. Платные тарифы нужны для сценариев, нагрузки, PDF-отчётов и патчей коллекций.
Нет. Подпись формируется вашим криптосредством, а в PolyApiIDE отправляется уже подписанный конверт. Обещать обратное было бы нечестно.
По WSDL: в binding-секции указан транспорт и версия, а namespace конверта отличается. Если видите http://schemas.xmlsoap.org/soap/envelope/ — это 1.1, если http://www.w3.org/2003/05/soap-envelope — 1.2.
После импорта операции раскладываются по коллекции, её можно разбить на папки и оставить в работе только нужные вызовы. Готовые файлы для тренировки лежат на странице примеров.
Нет, multipart-вложения по MTOM расширение не собирает. Операции без вложений работают штатно.