У меня проблемы с получением SOAP-запроса через Zeep, я получаю (клиентскую) ошибку проверки... Я также тестировал SoapUI, и это НЕ дает мне ту же ошибку проверки...
Приведенная ниже спецификация получена от сервера... В соответствии с этой спецификацией для выполнения запроса необходимы OrderStatus и SynchStatus.
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:web="WebServiceProvider">
<soapenv:Header/>
<soapenv:Body>
<web:Order_Get>
<!--Optional:-->
<web:orderOptions>
<web:FromDate>?</web:FromDate>
<web:ToDate>?</web:ToDate>
<web:OrderStatus>?</web:OrderStatus>
<web:SynchStatus>?</web:SynchStatus>
<!--Optional:-->
<web:OrderNumber>?</web:OrderNumber>
<web:FromOrderNumberToLastRecieved>?</web:FromOrderNumberToLastRecieved>
<web:PaymentStatus>?</web:PaymentStatus>
</web:orderOptions>
</web:Order_Get>
</soapenv:Body>
</soapenv:Envelope>
Однако выполнение этого из SoapUI без OrderStatus и SynchStatus даст мне список всех заказов на указанные даты:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="WebServiceProvider">
<soapenv:Header/>
<soapenv:Body>
<web:Order_Get>
<web:orderOptions>
<web:FromDate>2021-03-30</web:FromDate>
<web:ToDate>2021-03-31</web:ToDate>
</web:orderOptions>
</web:Order_Get>
</soapenv:Body>
</soapenv:Envelope>
Я хочу сделать то же самое с Zeep (https://github.com/mvantellingen/python-zeep), но проверка клиента не удалась...
Я инициирую запрос со следующим кодом:
api_url = 'https://abc.se/Webservice20/v3.0/webservice.asmx?WSDL'
session.auth = HTTPDigestAuth(username, password)
api = Client(api_url, transport=Transport(session=session))
И затем я пытаюсь выполнить следующий запрос:
order_options = {
'FromDate': '2021-03-30',
'ToDate': '2021-03-31',
}
orders = api.service.Order_Get(orderOptions=order_options)
Это приведет к следующей ошибке:
zeep.exceptions.ValidationError: Missing element OrderStatus (Order_Get.orderOptions.OrderStatus)
Если я добавлю OrderStatus в запрос, я получу ошибку проверки, говорящую об отсутствии SynchStatus. Когда это также было добавлено, запрос отправляется на сервер.
т.е. похоже, что клиент zeep более строг в отношении проверки данных в запросе, чем сервер... Есть ли способ заставить клиента пропустить эту проверку?
Спасибо заранее!