如何在PHP中从具有相同名称的多个项目的数组正确生成SOAP WSDL请求?

时间:2018-08-28 12:36:30

标签: php xml soap wsdl soap-client

我需要在PHP中生成以下XML Soap请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/> 
    <soapenv:Body> 
        <ns1:SomeRequest enddate="01-01-2018 00:00:00" authCode="exampleexample"> 
            <ns1:status>STATUS1</ns1:status> 
            <ns1:status>STATUS2</ns1:status> 
        </ns1:SomeRequest> 
    </soapenv:Body> 
</soapenv:Envelope>

我正在这样尝试:

$this->client = new SoapClient($this->wsdlUrl, [
    'trace' => true,
    'exception' => true,
    'cache_wsdl' => WSDL_CACHE_NONE,
]);

$parameters = [
    'authCode' => 'exampleexample',
    'enddate' => '01-01-2018 00:00:00',
    'status' => ['STATUS1', 'STATUS2']
];

$response = $this->client->SomeSimpleMethod($parameters);

并收到数组到字符串转换错误。 当我尝试将状态作为字符串传递时,像这样:

$parameters = [
    'authCode' => 'exampleexample',
    'enddate' => '01-01-2018 00:00:00',
    'status' => 'STATUS1'
];

然后一切正常。

1 个答案:

答案 0 :(得分:0)

最好的方法是使用WSDL到PHP生成器,因为您不会奇怪如何正确构造请求。由于这样做并不总是那么简单,因此使用生成的类构造请求并进行发送,您将可以轻松地使用OOP方法发送请求并处理响应。

尝试最适合从任何SOAP WSDL生成PHP SDK的PackageGenerator项目。