2012-09-10 17 views
5

Come selezionare la porta in SOAP PHP? Sto sviluppando un sito web di prenotazione di viaggi con TravelPort come GDS. Ho appena iniziato a guardare i loro WSDL e sto cercando di usarli per chiamare il loro server con PHP. Non sono in grado di farlo. So che il server funziona, perché se ordino una richiesta e la invio tramite cURL, ottengo la risposta che mi aspetto, ma utilizzando e adattando il proprio sample code (accetta il contratto di riservatezza, quindi fai clic su "Codice di esempio" per vedere), Non vado da nessuna parte.Come specificare il nome della porta in php WSDL

Osservando la richiesta che genera il modulo PHP SOAP, penso che il problema sia che utilizza la funzione sbagliata. Non credo che posso rivelare tutto WSDL, ma ecco un estratto:

<!-- Service --> 

<service name="AirService"> 
    <port name="AirRepriceSearchPort" 
      binding="tns:AirRepriceSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirScheduleSearchPort" 
      binding="tns:AirScheduleSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirLowFareSearchPort" 
      binding="tns:AirLowFareSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

A quanto pare lo script genera sempre la richiesta in base al modulo AirReprice posto del modulo LowFareSearch. Infatti, se modifico il WSDL e inserisco "AirLowFareSearchPort" come primo elemento, la richiesta funziona.

Ho provato la seguente:

  • specificare quale azione intraprendere utilizzando $client->AirLowFareSearchPort($data), ma non è una funzione valida;

  • ho ottenuto tutte le funzioni utilizzando $client->__getfunctions():

: “Il servizio”

[0]=> 
string(48) "AirRepriceRsp service(AirRepriceReq $parameters)" 
[1]=> 
string(56) "ScheduleSearchRsp service(ScheduleSearchReq $parameters)" 
[2]=> 
string(54) "LowFareSearchRsp service(LowFareSearchReq $parameters)" 
[3]=> 
string(66) "LowFareSearchAsynchRsp service(LowFareSearchAsynchReq $parameters)" 

Sembra che l'unico “funzione” non è che non capisco dove ho metterebbe le cose tra parentesi.

Non ho altre idee. Spero che tu possa aiutare!

UPDATE:

ho trovato this article dove si espone il problema. Tuttavia, si riferisce al proprio modulo chiamato PHP Web Services. Ho bisogno di fare la stessa cosa con SOAP. Ho davvero bisogno del tuo aiuto ..

risposta

3

Dovresti essere in grado di impostare manualmente l'endpoint con __setLocation una volta caricato il WSDL.

Esempio:

$client = new SoapClient('http://localhost/supplied_path?wsdl'); 
$client->__setLocation('http://localhost:8080/kestrel/AirService'); 

print_r($client->__getfunctions()); 
Problemi correlati