SoapClient返回“NULL”,但__getLastResponse()返回XML
问题描述:
下面的代码中的变量$ response即使它应该是SOAP请求的值,也是NULL。 (潮汐表)。当我调用$ client - > __ getLastResponse()时,我从SOAP服务获得正确的输出。SoapClient返回“NULL”,但__getLastResponse()返回XML
有人知道这里有什么问题吗?谢谢! :)
这里是我的代码:
$options = array(
"trace" => true,
"encoding" => "utf-8"
);
$client = new SoapClient("http://opendap.co-ops.nos.noaa.gov/axis/webservices/highlowtidepred/wsdl/HighLowTidePred.wsdl", $options);
$params = array(
"stationId" => 8454000,
"beginDate" => "20060921 00:00",
"endDate" => "20060922 23:59",
"datum" => "MLLW",
"unit" => 0,
"timeZone" => 0
);
try {
$result = $client->getHLPredAndMetadata($params);
echo $client->__getLastResponse();
}
catch (Exception $e) {
$error_xml = $client->__getLastRequest();
echo $error_xml;
echo "\n\n".$e->getMessage();
}
var_dump($result);
答
的原因,$result
(或到的SOAPCall响应)是null
确实是因为WSDL是无效
我只是碰到了同样的问题 - 在WSDL表示。反应应该是PackageChangeBatchResponse
但实际的XML回报具有PackageChangeResponse
更改WSDL相匹配的响应/更改回应,以匹配WSDL解决问题
答
你应该给下面的选项参数:
<?php
// below $option=array('trace',1);
// correct one is below
$option=array('trace'=>1);
$client=new SoapClient('some.wsdl',$option);
try{
$client->aMethodAtRemote();
}catch(SoapFault $fault){
// <xmp> tag displays xml output in html
echo 'Request : <br/><xmp>',
$client->__getLastRequest(),
'</xmp><br/><br/> Error Message : <br/>',
$fault->getMessage();
}
?>
“跟踪” 参数允许请求的输出。现在,您应该看到SOAP请求。 (来源:PHP.net
哪里是$回应? – Matheno
由WSDL,在SOA p响应不正确(由服务器),所以客户端无法解析它。我已经测试了您的代码,并且响应XML包含HighLowValues标记,但它与'getHighLowTidePredictionsResponse'函数相关。 – Fracsi
@Frasci:您的解决方案奏效。谢谢! :) – Padraig