2013-07-03 102 views
5

下面的代碼中的變量$ 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); 
+0

哪裏是$迴應? – Matheno

+2

由WSDL,在SOA p響應不正確(由服務器),所以客戶端無法解析它。我已經測試了您的代碼,並且響應XML包含HighLowValues標記,但它與'getHighLowTidePredictionsResponse'函數相關。 – Fracsi

+0

@Frasci:您的解決方案奏效。謝謝! :) – Padraig

回答

4

的原因,$result(或到的SOAPCall響應)是null確實是因爲WSDL是無效

我只是碰到了同樣的問題 - 在WSDL表示。反應應該是PackageChangeBatchResponse但實際的XML回報具有PackageChangeResponse

更改WSDL相匹配的響應/更改回應,以匹配WSDL解決問題

0

你應該給下面的選項參數:

<?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