soapclient ejemplo php soap wsdl soapui soap-client

soapclient - web service php soap ejemplo



SOAP-ERROR: Codificación: el objeto no tiene la propiedad ''FinalBookingDate'' (2)

Pruebe (y agregue) este enfoque:

$args->searchBookingCriteria->FinalBookingDate = ''2015-01-22''; $args->searchBookingCriteria->InitialServiceDate = ''2015-01-22''; $args->searchBookingCriteria->FinalServiceDate = ''2015-01-22''; $args->searchBookingCriteria->CreationUserId = ''abc''; $args->searchBookingCriteria->CityId = ''abc'';

Antes de comenzar, sé que este error significa que debería haber definido la propiedad FinalBookingDate, pero sigue leyendo y entenderás mi punto de vista.

La url es: http://bestbuyhotel1.cangooroo.net/ws/2013/ClientBackOffice_b.asmx?op=getBookingList Estaba probando primero con SoapUi, y obtuve con éxito la lista que necesito:

Y en php, solo puedo obtener esta respuesta:

El SoapClient de php es:

$params = array(''soap_version'' => SOAP_1_2, ''compression'' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, ''encoding''=>''UTF-8'', ''trace'' => 1, ''exceptions'' => true, ''cache_wsdl'' => WSDL_CACHE_NONE, ''features'' => SOAP_SINGLE_ELEMENT_ARRAYS); $client = new /SoapClient(''http://bestbuyhotel1.cangooroo.net/ws/2013/ClientBackOffice_b.asmx?wsdl'', $params);

Y luego, el código para recuperar los datos:

/* $query = array( ''InitialServiceDate'' => ''2015-01-20'', ''InitialBookingDate'' => ''2015-01-20'', ''FinalBookingDate'' => ''2015-01-20'', ''FinalServiceDate'' => ''2015-01-20'', ''CreationUserId'' => 1338, ''CityId'' => 4166, ''ServiceTypes'' => array(''eServiceType'' => ''HOTEL'') ); */ $query = array( ''InitialBookingDate'' => ''2015-01-20'', ''ServiceTypes'' => array(''eServiceType'' => ''HOTEL'') ); $args = new /stdClass; $args->credential = new /stdClass; $args->credential->UserName = $conn[''userPass''][''usr'']; $args->credential->Password = $conn[''userPass''][''pass'']; $args->searchBookingCriteria = new /stdClass; $args->searchBookingCriteria->InitialBookingDate = ''2015-01-20''; $args->searchBookingCriteria->ServiceTypes = new /stdClass; $args->searchBookingCriteria->ServiceTypes->eServiceType = ''HOTEL''; //$args = array(''credential''=>$credentials, ''searchBookingCriteria'' => $query); $data = $conn[''client'']->getBookingList($args); print_r($data); exit;

Como puede ver, probé 2 formas de enviar los $ args a getBookingList, hasta donde sé que ambos son válidos y sin embargo ambos (con matriz u objeto) devuelven el mismo error. En el código comentado al principio, puede ver que traté de definir todas las propiedades de las propiedades que solicita el servicio web, pero después de definirlas todas obtuve un resultado vacío.

Mi pregunta es, ¿hay algún parámetro adicional para definir en SoapClient que debería hacer? ¿Por qué SoapUI puede hacerlo con éxito? ¿Qué me falta aquí?

Bono: una impresión de la pantalla completa de SoapUI con la solicitud predeterminada que incluye los parámetros opcionales https://www.evernote.com/shard/s14/sh/fb5ac276-8147-4e09-95bb-afa0be66d7a6/d273441c74186bf1e600b42ab3303899/deep/0/SoapUI- 5.0.0.png


¿Puedes probar este enfoque más directo?

try { $params = array(''soap_version'' => SOAP_1_2, ''compression'' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, ''encoding''=>''UTF-8'', ''trace'' => 1, ''exceptions'' => true, ''cache_wsdl'' => WSDL_CACHE_NONE, ''features'' => SOAP_SINGLE_ELEMENT_ARRAYS); $client = new SoapClient(''http://bestbuyhotel1.cangooroo.net/ws/2013/ClientBackOffice_b.asmx?wsdl'',$params); } catch (SoapFault $E) { echo $E->faultstring; } if ($client) { $req_params = array(''credential'' => array(''userName'' => ''XXXXXXX'', ''Password'' => ''XXXXXXX''), ''searchBookingCriteria'' => array(''BookingNumber'' => array(''int'' => ''XXXXXXXXX''), ''ServiceTypes'' => array(''eServiceType'' => ''HOTEL''), ''PassengerName''=> ''XXXXXXXX'', ''InitialBookingDate''=> ''2015-01-16'', ''FinalBookingDate''=> ''2015-01-16'', ''InitialServiceDate'' => ''2015-01-18'', ''FinalServiceDate'' => ''2015-01-18'', ''BookingStatus''=> array(''eStatus'' => ''ACTIVATED''), ''PaymentStatus''=> array(''ePaymentStatus'' => ''Payed''), ''CreationUserId''=> ''XXX'', ''CityId''=> ''XXXX'', ''ExternalReference''=> '''') ); $response = $client->__soapCall(''getBookingList'',array($req_params)); var_dump($response); }