Python Zeep-клиент для использования веб-службы Ontario Health EBS MCEDT WSDL (SOAP) - PullRequest
0 голосов
/ 18 марта 2020

Я пытался использовать Zeep для генерации SOAP конверта для вызова метода в следующем WSDL:

https://ws.conf.ebs.health.gov.on.ca: 1443 / EDTService / EDTService? Wsdl

До сих пор я придумал следующее:

from zeep import Client, xsd
from zeep.transports import Transport
from requests import Session
import urllib3
from zeep.plugins import HistoryPlugin

urllib3.disable_warnings()

session = Session()
session.verify = False
transport = Transport(session=session)

history = HistoryPlugin()
client = Client(wsdl='https://ws.conf.ebs.health.gov.on.ca:1443/EDTService/EDTService?wsdl', 
transport=transport, plugins=[history])

# client.wsdl.dump()

ebsheader = xsd.Element(
    '{http://ebs.health.ontario.ca/}EBS',
    xsd.ComplexType([
       xsd.Attribute(
          'Id',xsd.String()
       ),
       xsd.Element(
           'SoftwareConformanceKey', xsd.String()
       ),
       xsd.Element(
           'AuditId', xsd.String()
       ),
   ])
)
headers = []
headers.append(ebsheader('id-1','software-key-here','unique-id'))

response = client.service.getTypeList(_soapheaders=headers)

Я не близок к созданию конверта, который выглядит как образцы, представленные в API spe c.

Будучи новичком в SOAP / WSDL, мне трудно разобраться с супер сложным API-интерфейсом c http://www.health.gov.on.ca/en/pro/publications/ohip/docs/techspec_ebs.pdf

Кто-нибудь мог использовать это? API использует Zeep?

1 Ответ

0 голосов
/ 19 марта 2020

Если вы посмотрите документацию zeep, вы увидите, что это очень упрощает вызов сервисных методов soap.

1-й из всех, что вам нужно проверить wsdl: python -mzeep https://ws.conf.ebs.health.gov.on.ca:1443/EDTService/EDTService?wsdl

тогда вы можете увидеть определение getTypelist там (с учетом первой привязки):

getTypeList(_soapheaders={ebsrequest_header: ns0:ebs_header, msarequest_header: 
ns3:msa_header, idprequest_header: ns2:idp_header}) -> return: ns1:typeListResult

, поэтому вам нужно создать ebs_header, msa_header & idp_header. создайте фабрику для каждого:

factory0 = client.type_factory('ns0')
factory2 = client.type_factory('ns2')
factory3 = client.type_factory('ns3')

, затем создайте каждый из этих элементов:

ebs_header = factory0.ebs_header(SoftwareConformanceKey="key", AuditId="id")
print(ebs_header)

msa_header = factory3.msa_header(ServiceUserMUID="muid", UserID="uid")
print(msa_header)

idp_header = factory2.idp_header(ServiceUserMUID="muid")
print(idp_header)

# then create the _soapheaders
headers = {
    'ebsrequest_header' : ebs_header,
    'msarequest_header' : msa_header,
    'idprequest_header' : idp_header
    }

#finally call the method
response = client.service.getTypeList(_soapheaders=headers)

# you can see the sent request from plugin:
print(history.last_sent)

обратите внимание, что я пытался запустить код, но я получаю ошибку соединения.

Надеюсь, это поможет.

...