有人可以请解释如何通过PHP创建这个复杂的SOAP请求?
问题描述:
这是我需要发送的SOAP请求,它在SOAP UI程序中完美工作并返回有效的响应。有人可以请解释如何通过PHP创建这个复杂的SOAP请求?
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.escapia.com/EVRN/2007/02">
<soapenv:Body>
<ns:EVRN_UnitDescriptiveInfoRQ Target="Production" Version="1.0">
<ns:POS>
<ns:Source>
<ns:RequestorID ID="username" MessagePassword="password"/>
</ns:Source>
</ns:POS>
<ns:UnitDescriptiveInfos>
<ns:UnitDescriptiveInfo/>
</ns:UnitDescriptiveInfos>
</ns:EVRN_UnitDescriptiveInfoRQ>
</soapenv:Body>
</soapenv:Envelope>
以下是我在PHP已经试过......
$wsdl = 'https://api.escapia.com/EVRNContentService.svc?wsdl';
$options = array(
'trace' => false
);
$client = new \SoapClient($wsdl, $options);
$xmlr = new SimpleXMLElement('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.escapia.com/EVRN/2007/02">
<soapenv:Body>
<ns:EVRN_UnitDescriptiveInfoRQ Target="Production" Version="1.0">
<ns:POS>
<ns:Source>
<ns:RequestorID ID="username" MessagePassword="password"/>
</ns:Source>
</ns:POS>
<ns:UnitDescriptiveInfos>
<ns:UnitDescriptiveInfo/>
</ns:UnitDescriptiveInfos>
</ns:EVRN_UnitDescriptiveInfoRQ>
</soapenv:Body>
</soapenv:Envelope>');
$params = new SoapVar($xmlr, XSD_STRING);
try {
$response = $client->UnitDescriptiveInfoStream($params);
echo '<pre>';
var_dump($response);
echo '</pre>';
} catch (SoapFault $e) {
echo '<pre>';
var_dump($client);
echo '</pre>';
}
然而,这只是返回的响应..
object(stdClass)#4 (1) {
["any"]=>
string(388) "Failed to authenticate anonymous client. Source array is missing from request."
}
请如果任何人有任何想法如何通过PHP正确地提出这个请求,那将是令人愉快的。
答
我没有使用过PackageGenerator
但我已经受够了这样的成功:
$xmlr = new SimpleXMLElement(...);
$params = new stdClass();
$params->xml = $xmlr->asXML();
$response = $client->UnitDescriptiveInfoStream($params);
您是否尝试过通过卷曲这样做呢? – Rimble
如果您不使用'soapui',它可以从标签中删除。 – Rao