2012-09-10 21 views
5

¿Cómo selecciono el puerto en SOAP PHP? Estoy desarrollando un sitio web de reservas de viajes con TravelPort como GDS. Acabo de comenzar a buscar sus WSDL y estoy tratando de usarlos para llamar a su servidor con PHP. No puedo hacerlo Sé que el servidor funciona, porque si creo una solicitud y la envío a través de cURL, obtengo la respuesta que esperaba, pero usando y adaptando su propio sample code (acepto el acuerdo de confidencialidad, y luego haga clic en "Código de muestra" para ver), No voy a ninguna parte.Cómo especificar el nombre del puerto en php WSDL

Al observar la solicitud que genera el módulo SOAP PHP, creo que el problema es que utiliza la función incorrecta. Creo que no puedo revelar todo el WSDL, pero aquí es un extracto:

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

Al parecer el guión siempre genera la solicitud basado en el módulo AirReprice en lugar del módulo LowFareSearch. De hecho, si edito el WSDL y pongo "AirLowFareSearchPort" como primer elemento, la solicitud funciona.

He intentado lo siguiente:

  • especificar qué acción tomar utilizando $client->AirLowFareSearchPort($data), pero no es una función válida;

  • Tengo todas las funciones mediante el uso de $client->__getfunctions():

: “servicio”

[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)" 

Parece que la única “función” no es más que no entiendo donde pondría las cosas entre corchetes.

No tengo otras ideas. ¡Espero que puedas ayudar!

ACTUALIZACIÓN:

que he encontrado this article donde expone el problema. Sin embargo, se refiere a su propio módulo llamado PHP Web Services. Necesito hacer lo mismo con SOAP. Realmente necesito tu ayuda.

Respuesta

3

Deberías poder establecer el punto final manualmente con __setLocation una vez que hayas cargado el WSDL.

Ejemplo:

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

print_r($client->__getfunctions()); 
Cuestiones relacionadas