Сообщество
FAQ
Логин
Пароль
Войти при помощи
Кстати, вы можете
Установить drebedengi.ru на свой сервер.
Общение / Веб версия / Дребеденьги API WSDL + Python = NamespaceError

Дребеденьги API WSDL + Python = NamespaceError

Петр
9 декабря 2018 22:35
Добрый день,

Никак не могу заставить работать Drebedengi API SOAP сервис с разными библиотеками на Python. Ругаются на ошибки Namespace даже при выключенном StringcMode (для самой популярной библиотеки Zeep):

Самый простой пример:

from zeep import Client, Settings
from zeep import xsd

api_key = 'api_key'
login = 'login@mail.com'
password = 'password'

settings = Settings(strict=False, xml_huge_tree=True)
client = Client('https://www.drebedengi.ru/soap/dd.wsdl', settings = settings)

dd_version = client.service.getCurrentRevision(api_key, login, password)
print("DD version: {}".format(dd_version))
curr_list = client.service.getBalance(api_key, login, password, params='0')
print(curr_list)

Первая команда отрабатывает, а вот на второй вываливается с ошибкой:

zeep.exceptions.NamespaceError: No schema available for the namespace 'http://xml.apache.org/xml-soap'
During handling of the above exception, another exception occurred:
zeep.exceptions.NamespaceError: Unable to resolve type {http://xml.apache.org/xml-soap}Map. No schema available for the namespace 'http://xml.apache.org/xml-soap'.

Облазил весь гугл, проблема наблюдается на разных версиях библиотеки (2.* и 3.*)
Admin
10 декабря 2018 11:24
Добрый день.
К сожалению информации о работе сторонних библиотек нет, все они - себе на уме.

Единственный способ разобраться - рассмотреть какой они там генерят XML и сравнивая его посимвольно с примером, приведённым тут:
https://www.drebedengi.ru...t.xml

Потом уже искать способ, как заставить их генерировать нужный XML.

Из типовых проблем обнаруженных ранее, известно только, что в заголовочном элементе SOAP-ENV:Envelope должен быть обязательно атрибут xmlns:ns2=" http://xml.apache.org/xml-soap", который некоторые либы не вставляют.
Владимир Ситников
11 декабря 2018 15:26
Петр, если хотите использовать Python и работать с ДД.WSDL, то одно из решений я привёл тут: https://stackoverflow.com/a/41785546/1261287

Admin, "все они - себе на уме" нехорошо говорить, когда вы генерируете невалидные WSDL сообщения.

По факту, ваш сервер использует тэги из namespace'ов http://xml.apache.org/xml-soap и http://schemas.xmlsoap.org/soap/encoding/ , хотя в самом XML они не упоминаются. Так нехорошо.

Вот у Петра ошибка именно из-за этого. И это не из-за того, что он что-то не так делает, а из-за того, что ДД генерирует сомнительные сообщения.


Петр, по факту, API у ДД сомнительное (нет планируемых операций, нет типов данных толком тоже нет -- почти всё передаётся как строки). Мне проще оказалось работать с HTML кодом страниц, чем с API.
Чтобы отвечать на сообщения - зарегистрируйтесь и войдите в личный кабинет.