2013-07-03 11 views
5

Biến $ response trong mã bên dưới là NULL mặc dù nó phải là giá trị của yêu cầu SOAP. (danh sách thủy triều). Khi tôi gọi $ client -> __ getLastResponse() tôi nhận được kết quả chính xác từ dịch vụ SOAP.SoapClient Trả về "NULL", nhưng __getLastResponse() trả về XML

Bất kỳ ai biết điều gì sai ở đây? Cảm ơn! :)

Đây là mã của tôi:

$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

đâu là $ phản ứng? – Matheno

+2

Theo wsdl, các soa p phản ứng là không chính xác (bởi máy chủ), do đó, khách hàng không thể phân tích nó. Tôi đã thử nghiệm mã của bạn và XML phản hồi chứa thẻ HighLowValues, nhưng nó có liên quan đến hàm 'getHighLowTidePredictionsResponse'. – Fracsi

+0

@Frasci: Giải pháp của bạn đã hoạt động. Cảm ơn bạn! :) – Padraig

Trả lời

4

Lý do mà các $result (hoặc đối phó với SoapCall) là null thực sự là vì WSDL là không hợp lệ

Tôi chỉ chạy vào cùng một vấn đề - WSDL cho biết. phản ứng nên PackageChangeBatchResponse chưa trở về XML thực tế có PackageChangeResponse

thay đổi WSDL để phù hợp với phản ứng/thay đổi để đáp ứng phù hợp với WSDL giải quyết các vấn đề

0

bạn nên đưa ra một số tùy chọn như sau:

<?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(); 
} 
?> 

"dấu vết" tham số cho phép đầu ra của yêu cầu. Bây giờ, bạn sẽ thấy yêu cầu SOAP. (nguồn: PHP.net