给定以下返回有效 Soap/XML 响应的 PHP:
$params = new StdClass();
$params->subRequest = new StdClass();
$params->subRequest->endCSN = "0212341234";
$client = new SoapClient($WSDL);
$response = $client->qualifyProduct($params);
我正在尝试在 Python 中实现与此 Web 服务的连接,但我并没有走得太远 - 遇到错误(我在 PHP 中尝试过作为健全性检查)。
到目前为止,我已经尝试了许多在我脑海中似乎有意义的可能选项,包括:
client = SoapClient(WSDL)
a = type('lambdaobject', (object,), {})()
a.endCSN = "0212341234"
response = client.qualifyProduct(subRequest = a)`
response = client.qualifyProduct({'subRequest':{'endCSN':{'0212121212'}}})
response = client.qualifyProduct(subRequest = {'endCSN':{'0212121212'}})
这些都不起作用 - 并且都给了我一个 PySimpleSoap 错误,例如:
ValueError: Invalid Args Structure. Errors: [u"Argument key subRequest not in parameter.
PySimpleSoap的答案:如何将 complexType 作为函数参数传递似乎带来了一线希望,但最终并没有在我的实例中起作用。
我确实有其他函数与给定的 WSDL 一起使用,但没有一个具有 ComplexType 的方法用于定义像这样的提取,其中 subRequest 和 anotherSubRequest 类型是在另一个 .xsd 文件中定义的:
<xsd:complexType name="QualifyProductRequest">
<xsd:sequence>
<xsd:choice>
<xsd:element name="subRequest" type="wsg:subRequest">
<xsd:annotation>
<xsd:documentation xml:lang="en">A complex type capturing required data for a qualification</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="anotherSubRequest" type="wsg:anotherSubRequest">
<xsd:annotation>
<xsd:documentation xml:lang="en">A complex type capturing required data for a different qualification</xsd:documentation>
</xsd:annotation>
</xsd:element>
<! -- SNIPPED -->
</xsd:choice>
</xsd:sequence>
</xsd:complexType>