从PHP应用程序访问SOAP-Service时,我无法传递嵌套数组参数。 我找到了几个关于这个问题的线索,但没有一个解决了我的问题。 所以我希望有人可以帮助我...
我在xampp上使用PHP 5.4.22进行Windows安装并尝试访问Talentlink API。它的WSDL在这里定义:
https://api3.lumesse-talenthub.com/CareerPortal/SOAP/FoAdvert?WSDL
访问通常正常。 WSSE-Authentication有效,我可以从服务访问数据。 我也可以将参数传递给Soap-Methods,只要它们是扁平结构并定义为基本或简单类型:
$this->criteria = $service->getCriteria(array(
'lovOrders' => '1,2,12,13',
'langCode' => 'DE'
));
到目前为止一切顺利。
当我尝试将复杂类型参数作为数组传递时,我的问题出现了。 我正在尝试访问getCriteria函数,该函数具有以下定义:
<xs:complexType name="getCriteria">
<xs:sequence>
<xs:element form="qualified" minOccurs="0" name="langCode" type="tns:langCode"/>
<xs:element minOccurs="0" ref="tns:searchCriteriaSorting"/>
<xs:element form="qualified" minOccurs="0" name="lovOrders" type="xs:string"/>
</xs:sequence>
</xs:complexType>
[...]
<xs:complexType name="searchCriteriaSorting">
<xs:sequence>
<xs:element minOccurs="0" name="categoryListsSorting" type="tns:criteriaSortType"/>
<xs:element minOccurs="0" name="customLovsSorting" type="tns:criteriaSortType"/>
<xs:element minOccurs="0" name="standardLovsSorting" type="tns:criteriaSortType"/>
</xs:sequence>
</xs:complexType>
[...]
<xs:simpleType name="criteriaSortType">
<xs:restriction base="xs:string">
<xs:enumeration value="LABEL"/>
<xs:enumeration value="ORDER"/>
</xs:restriction>
</xs:simpleType>
我的问题是“searchCriteriaSorting” - 参数。 我试图将它传递给它的服务方法:
$this->criteria = $service->getCriteria(array(
'lovOrders' => '1,2,12,13',
'langCode' => 'DE',
'searchCriteriaSorting' => array(
'customLovsSorting' => 'LABEL'
)
));
PHP SoapClient生成以下SOAP-Request:
<SOAP-ENV:Body>
<ns1:getCriteria>
<ns1:langCode>DE</ns1:langCode>
<searchCriteriaSorting>
<customLovsSorting>LABEL</customLovsSorting>
</searchCriteriaSorting>
<ns1:lovOrders>1,2,12,13</ns1:lovOrders>
</ns1:getCriteria>
</SOAP-ENV:Body>
如您所见,参数“langCode”和“lovOrders”是使用命名空间前缀生成的,而是searchCriteriaSorting“参数生成没有它。但是没有名称空间前缀,Soap-API不会处理该参数。
我无法弄清楚为什么没有为复杂类型参数生成名称空间前缀。
我尝试了不同的方法:
但是,我无法正常工作。
任何人都可以帮助我,或者至少让我朝着正确的方向前进吗?
提前致谢!
答案 0 :(得分:0)
$client = new SoapClient('https://example.gms/test01/cims/services/1.2/travel.asmx?WSDL',array('soap_version' => SOAP_1_2));
var_dump($client);
// $date=date()
$result= $client->$youre method Or Function(array('perameter1'=>"value1", 'perameter2'=>"value2"));
print_r($result);
print_r($client->__getFunctions());