Cita:
Iniciado por repara2 Se ha escrito mucho sobre SOAP, pero realmente es escasa la documentación e información de cómo imlementar el uso de esta tecnología en PHP.
Si requerimos enviar toda una solicitud en XML, resulta demasiado difícil, ya que no he podido encontrar ningún documento dónde diga cómo hacerlo.
Tengo el siguiente ejemplo:
necesito enviar este request SOAP
[XML]
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:m0="http://schemas.lodgin.com/webservices/hotelv3">
<SOAP-ENV:Header>
<m:AuthenticationHeader xmlns:m="http://schemas.lodgin.com/webservices/authentication">
<m:LoginName>username</m:LoginName>
<m:Password>xxxxx</m:Password>
<m:Culture>en_US</m:Culture>
<m:Version>8.5</m:Version>
</m:AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:SearchHotelsById xmlns:m="http://lodgin.com/webservices/hotelv3">
<m:request>
<m0:HotelIdsInfo>
<!--We are searching here for 3 rooms-->
<m0:HotelIdInfo id="4359"/>
</m0:HotelIdsInfo>
<m0:CheckIn>2012-02-13</m0:CheckIn>
<m0:CheckOut>2012-02-17</m0:CheckOut>
<m0:RoomsInformation>
<!--First room: 2 adults-->
<m0:RoomInfo>
<m0:AdultNum>2</m0:AdultNum>
<m0:ChildNum>0</m0:ChildNum>
<m0:ChildAges>
<m0:ChildAge age="0"/>
</m0:ChildAges>
</m0:RoomInfo>
<!--Second room: 3 adults and 1 Child-->
<m0:RoomInfo>
<m0:AdultNum>3</m0:AdultNum>
<m0:ChildNum>1</m0:ChildNum>
<m0:ChildAges>
<m0:ChildAge age="6"/>
</m0:ChildAges>
</m0:RoomInfo>
<!--Third room: 1 adult-->
<m0:RoomInfo>
<m0:AdultNum>1</m0:AdultNum>
<m0:ChildNum>0</m0:ChildNum>
<m0:ChildAges>
<m0:ChildAge age="0"/>
</m0:ChildAges>
</m0:RoomInfo>
</m0:RoomsInformation>
<m0:MaxPrice>0</m0:MaxPrice>
<m0:StarLevel>0</m0:StarLevel>
<!--NEW in V3! let to search for available or on request rooms-->
<m0:AvailableOnly>true</m0:AvailableOnly>
</m:request>
</m:SearchHotelsById>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
[/XML]
Esto lo tengo que enviar a
http://lodgin.com/HotelFlow.svc?WSDL
hacia dónde estoy haciendo la conexión del cliente soap:
Código PHP:
$soapClient = new SoapClient('http://lodgin.com/HotelFlow.svc?WSDL');
echo '<B>RESPUESTA DE LA CONEXIÓN</B><br>' ;
print_r($soapClient);
// para obtener las funciones disponibles en el servicio web
$functions = $soapClient->__getFunctions();
print_r($functions);
Hasta este punto todo funciona bien, la llamada me regresa las funciones/métodos disponibles
tengo una variable $xml dónde estoy cargando la cadena xml por medio de "simplexml_load_string()"
y luego ejecuto
Código PHP:
$SearchHotelsByIDResponse = $soapClient->SearchHotelsByID($xml);
donde "SearchHotelsByID" es uno de los métodos públicos
y aparece entonces el siguiente error:
Código HTML:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'CheckIn' property in /var/www/html/get_hotels_by_ID.php...
Por favor podría alguien indicarme por dónde estoy mal, o que tengo que hacer para que esto funcione?
Gracias de antemano