Estoy intentando usar un servicio web para buscar usuarios específicos desde mi aplicación PHP. He utilizado exactamente el mismo servicio web en ASP.NET con éxito.El cliente PHP 5 SOAP devuelve NULL cuando se llama a la función proporcionada por WSDL
Básicamente, hago todo lo que me dice el documento PHP, y utilizo los mismos métodos/variables que utilicé en ASP.NET (para el servicio web en sí), pero parece que no puedo obtener un resultado.
La función aparece en __getFunctions() y debe volver anyType
, que si he entendido bien es el equivalente de mixed
en PHP:
array(1) { [0]=> string(63) "anyType basicSearch(string $sharedSecret, string $searchParams)" }
Cuando yo llamo basicSearch() sin embargo, parece devuelve NULL .
basicSearch() debe devolver un documento XML con la información. En ASP.NET solía simplemente lanzar la respuesta a, creo, y a XmlDocument. ¿Debo hacer eso en PHP también? ¿Con qué representación de un documento XML (SimpleXML, DOM, etc.)?
¿Podría mostrarse como NULL simplemente porque PHP no puede entender el formato?
¿Estoy haciendo algo mal en PHP? ¿O debería buscar en el servicio web e intentar depurar de ese lado?
<?php
$client = new SoapClient($wsdl_url);
echo $client->__getFunctions();
echo "<br />\n";
echo $client->basicSearch($key, $req);
?>
PD: Estoy usando la biblioteca de PHP 5. Tal vez usar alguna otra biblioteca como nu-soap sería útil? Parece que hay más documentos en línea al respecto.
Actualización:
Uso de una matriz para pasar el parámetro no funciona, SOAP espera argumentos separados. Llamar a __getLastRequest() devuelve una cadena que concatena la tecla $ y $ req sin ningún otro XML. Llamar a __getLastResponse() devuelve una cadena vacía. No se arroja ninguna excepción. Parece que PHP no sabe qué hacer con los argumentos que le doy, a pesar de que ha analizado el archivo WSDL ya que obtengo la función que uso en la lista cuando llamo a __getFunctions().
Cualquier ayuda sería apreciada.
Actualización ': Todavía no hay solución de trabajo. Estoy desconcertado ...
Tenga en cuenta que haciendo eco de una matriz siempre le dará 'array', porque así es como una matriz se convierte en una cadena. intente usar print_r() o var_dump(). –
Sí, ahora obtengo la función correcta en la lista. Gracias, en realidad lo sabía y lo perdí. Problema actualizado –
Su ejemplo de código no verifica las excepciones que pueda lanzar el cliente. ¿Omitió esto para simplificar el ejemplo? Si no, sugeriría que agregue ese cheque a través de try/catch, ya que podría darle algunos mensajes de error útiles. –