Использование suds-py3.
При загрузке следующего WSDL:
https://clientdev.inteflow.com.au/inteport/DecisionGateway.asmx?WSDL
Я получаю:
(DecisionWebGatewaySoap12)
Methods (38):
[...]
ExecuteXMLRequest(_sRequestXML _sRequestXML, )
Список типов содержит все это, но ничего не называется _sRequestXML
(который, я считаю, следует рассматривать как строку):
Types (141):
AccessGroup
Address
ns3:AddressInformation
Applicant
ns2:Array
ArrayOfAccessGroup
ArrayOfApplicant
ns3:ArrayOfAttachment
ArrayOfCriteria
ns3:ArrayOfCustomField
ns3:ArrayOfDocumentPDF
ns3:ArrayOfDocumentStatus
ns3:ArrayOfFormDataXfdfField
ArrayOfMerchantCommission
ArrayOfMerchantOperator
ArrayOfMerchantParameter
ArrayOfMerchantProductGroup
ArrayOfMerchantProductv2
ArrayOfOperatorAccessGroup
ArrayOfOperatorMerchant
ArrayOfOperatorProductGroup
ns3:ArrayOfRecipientStatus
ArrayOfString
ns3:ArrayOfString
ns3:ArrayOfTabStatus
ArrayOfURL
ns3:Attachment
Authentication
ns3:AuthenticationStatus
BasicInsuranceProduct
BasicMerchant
BasicMerchantOperator
BasicOperator
CompanyDetails
Contact
CreateInsuranceProductResponseData
CreateMerchantResponseData
Criteria
ns3:CustomField
ns3:CustomFieldType
ns3:CustomTabType
ns3:DOBInformation
DateFormat
DefaultValue
ns3:DeliveryMethod
ns3:DocuSignEnvelopeInformation
ns3:DocumentPDF
ns3:DocumentStatus
ns3:DocumentType
ns2:ENTITIES
ns2:ENTITY
ns3:EnvelopeStatus
ns3:EnvelopeStatusCode
ns3:EventResult
ns3:EventStatusCode
ExecuteResponse
FinanceRequest
Financial
ns3:FormData
ns3:FormDataXfdf
ns3:FormDataXfdfField
ns2:ID
ns3:IDCheckInformation
ns2:IDREF
ns2:IDREFS
IndividualDetails
LimitedLoginResponseData
Merchant
MerchantCommission
MerchantDetails
MerchantOperator
MerchantParameter
MerchantProductGroup
MerchantProductv2
ns2:NCName
ns2:NMTOKEN
ns2:NMTOKENS
ns2:NOTATION
ns2:Name
Operator
OperatorAccessGroup
OperatorDetails
OperatorFlag
OperatorMerchant
OperatorProductGroup
Options
Payload
PayloadSubmit
ns2:QName
ns3:RecipientStatus
ns3:RecipientStatusCode
ns3:RecipientStatusEsignAgreementInformation
ns3:RecipientTypeCode
RequestData
RequestResponseData
ResponseData
ns3:SSN4Information
SecondaryLogin
ns3:SigningLocationCode
StatusCheck
ns1:StringArray
ns2:Struct
ns3:TabStatus
ns3:TabTypeCode
URL
ns3:VaultingDetails
ns2:anyURI
ns2:arrayCoordinate
ns2:base64
ns2:base64Binary
ns2:boolean
ns2:byte
ns2:date
ns2:dateTime
ns2:decimal
ns2:double
ns2:duration
ns2:float
ns2:gDay
ns2:gMonth
ns2:gMonthDay
ns2:gYear
ns2:gYearMonth
ns2:hexBinary
ns2:int
ns2:integer
ns2:language
ns2:long
ns2:negativeInteger
ns2:nonNegativeInteger
ns2:nonPositiveInteger
ns2:normalizedString
ns2:positiveInteger
ns2:short
ns2:string
ns2:time
ns2:token
ns2:unsignedByte
ns2:unsignedInt
ns2:unsignedLong
ns2:unsignedShort
Затем, когда я сделаю:
v = client.service.ExecuteXMLRequest("<inteflow><something>value</something></inteflow>")
Строка SOAP, которую я передал ExecuteXMLRequest
, не установлена как значение ns1:ExecuteXMLRequest
. Вместо этого элемент пуст:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://decisionintellect.com/inteport/">
<SOAP-ENV:Header/>
<ns0:Body>
<ns1:ExecuteXMLRequest/>
</ns0:Body>
</SOAP-ENV:Envelope>
Мне нужно, чтобы юзеры производили конверт, подобный этому:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://decisionintellect.com/inteport/">
<SOAP-ENV:Header/>
<ns0:Body>
<ns1:ExecuteXMLRequest>
<ns1:_sRequestXML>
<inteflow><something>value</something></inteflow>
</ns1:_sRequestXML>
</ns1:ExecuteXMLRequest>
</ns0:Body>
</SOAP-ENV:Envelope>
Есть ли проблема с WSDL? Должен ли я передать параметр другим способом?
Полный пример:
import ssl
from suds.client import Client
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
url = 'https://clientdev.inteflow.com.au/inteport/DecisionGateway.asmx?WSDL'
client = Client(url)
client.set_options(port='DecisionWebGatewaySoap12')
print(client)
v = client.service.ExecuteXMLRequest("<inteflow><something>value</something></inteflow>")
print(client.last_sent())
print(v)