2013-07-03 28 views
5

La variabile $ response nel seguente codice è NULL anche se dovrebbe essere il valore della richiesta SOAP. (un elenco di maree). Quando chiamo $ client -> __ getLastResponse() ottengo l'output corretto dal servizio SOAP.SoapClient Restituisce "NULL", ma __getLastResponse() restituisce XML

Qualcuno sa cosa c'è che non va qui? Grazie! :)

Ecco il mio codice:

$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

Dov'è $ risposta? – Matheno

+2

Secondo il WSDL, la soa la risposta p non è corretta (dal server), quindi il client non può analizzarla. Ho testato il tuo codice e la risposta XML contiene il tag HighLowValues, ma è correlata alla funzione 'getHighLowTidePredictionsResponse'. – Fracsi

+0

@Frasci: la soluzione ha funzionato. Grazie! :) – Padraig

risposta

4

La ragione per cui la $result (o la risposta al SOAPCall) è null è davvero perché il WSDL non è valido

Ho appena incontrato lo stesso problema - il WSDL ha detto il. risposta dovrebbe essere PackageChangeBatchResponse ancora i rendimenti effettivi XML ha PackageChangeResponse

cambiare il WSDL per abbinare la risposta/modificare la risposta in base al WSDL risolve il problema

0

si dovrebbe dare un parametro di opzione come di seguito:

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

parametro "tracciare" attiva l'uscita di richiesta. Ora dovresti vedere la richiesta SOAP. (fonte: PHP.net