Django вызывает SOAP API

Я сделал CRM и теперь компания хочет настроить свой API, но это SOAP API, который использует XML и после небольшого исследования здесь в Stack, некоторые люди сказали использовать zeep, и это не сработало. Я пытаюсь сначала сделать это из отдельного файла, чтобы потом поместить в CRM (возможно, это не лучшая идея) но мне кажется, что я делаю неправильно/больше, чем нужно. Правильно ли делать так или есть лучший способ?

from zeep import Client

client = Client('httsp://company.com/?wsdl')
element1 = client.get_element('ns0:E1')
element2 = client.get_element('ns1:E2')
element3 = client.get_element('ns2:E3')
element4 = client.get_element('ns3:E4')
element5 = client.get_element('ns4:E5')
element6 = client.get_element('ns5:E6')
element7 = client.get_element('ns6:E7')
element8 = client.get_element('ns7:E8')
element9 = client.get_element('ns8:E9')
obj1 = element1(E1 = 'A')
obj2 = element2(E2 = 'B')
...
obj9 = element9(E9 = 'I')
header_value = header(username='user', password='pass')
client.service.Companymethod(_soapheader={heaeder_value, obj1, obj2, ... obj9})

XML:

<definitions targetNamespace="http://X/soap/X">
<types>
<xsd:schema targetNamespace="http://X/soap/X">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
<xsd:complexType name="Companymethod">
<xsd:all>
<xsd:element name="YRequest" type="tns:YRequest" minOccurs="1"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="YRequest">
<xsd:all>
<xsd:element name="E1" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E2" type="xsd:nonNegativeInteger" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E3" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E4" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E5" type="xsd:nonNegativeInteger" minOccurs="1" maxOccurs="1"/>
<xsd:element name="E6" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E7" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E8" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
<xsd:element name="E9" type="xsd:nonNegativeInteger" minOccurs="0" maxOccurs="1"/>
</xsd:all>
</xsd:complexType>

P.S: Извините, что мне нужно цензурировать имена

Вернуться на верх