Crear un Cliente Básico de un Web Service con PHP 5
Una vez que ya crearon:
Es hora de Crear el Cliente Básico, en este ejemplo mostraremos los pasos básicos para poder crear un programa cliente que se sirva de la operación publicada en su script Servidor y declarada por su WSDL.
Se que este Post será ayuda, asi que una forma de retribuir esa ayuda, es visitando los Sitios Recomendados que aparecen a la izquierda del post o la publicidad ya que ellos proveen información relacionada al post presente y darán mayor presencia al Blog de su servidor…
Además pueden recomendar este Blog en delicius o cualquier otra red social que encuentre, tambien seria bueno que compartan sus experiencias a través de sus comentarios.
Seguimos:
En primer lugar creen un archivo cliente, en este caso lo llamaré clientbasic.php, y lo ubicaré en mi carpeta como es de costumbre soap server, al igual que el WSDL y el escrip t Servidor, ha! eso si, los archivos antes mencionados pueden estar en cualquier sitio, solo tienen que indicar la ruta, y el Script Servidor y el WSDL puede estar en cualquier computadora que tenga PHP5 y SOAP instalados.
Mediante el siguiente código llamamos a la función declarada en el Servicio Web Basic;
Llamamos a la función Suma:
<?php
$operando1 = 30;
$operando2 = 34;
//PARA LLAMAR A UN SERVICIO WEB DEBEMOS DE PONERLO EN UN BLOQYE TRY CATCH,
//UN SERVICIO WEB ES MUY PROCLIBE A CAER EN ERRORES Y LOS BLOQUES TRY CATCH,
//NOS AYUDARAN A DEPURARLOS
try {
//INDICAMOS DONDE ESTA EL WSDL QUE VAMOS A CONSULTAR Y CREAMOS EL OBJETO CLIENT
$sClient = new SoapClient('http://localhost/soapserver/basic.wsdl');
//CREAMOS EL OBJETO REQUEST DONDE DECLARAMOS EL ARRAY QUE CONTIENE NUESTROS
//PARAMETROS A Y B QUE ESTAN DECLARADOS EN EL WSDL Y USADOS POR EL SCRIPT
//DE NUESTRO SERVIDOR
$request = new SoapVar(array( 'a'=>$operando1,
'b'=>$operando2
),SOAP_ENC_OBJECT);
//LLAMAMOS AL PROCEDIMIENTO Y CAPTURAMOS SU
//VALOR DE RETORNO EN LA VARIABLE RESPONSE
$response = $sClient->suma($request);
}catch (SoapFault $e){
//EN CASO DE QUE HUBO ALGUN ERROR EL BLOQUE CATCH LO CAPTURA
//EN EL CAPITULO DE MANEJO AVANZADO VEREMOS COMO CAPTURAR LOS SOAPFAULTS
echo 'Hubo un error';
}//catch
//MOSTRAMOS EL RESULTADO
echo 'La Suma es:'.$response;
?>
Fuentes del Ejemplo de Servicio Web Básico
Hola! Necesito crear tanto un servidor como un cliente con SOAP en php, tal cual como se explica en estos ejemplos, los cuales ya probe y me genera un error, la verdad es que es urgente, necesito realizar esto lo mas pronto posible y aun hay cosas queno entiendo, si me puedes mandar un número de telefono o alguna información para aclarar mis dudas y lograr realizar tanto el servidor como el cliente del web service se lo agradeceria, es muy importante.
Este es mi correo: eve_jd@hotmail.com
Saludos!! Gracias
Puedes decirme que error te genera??? tu servidor tiene configurado PHP 5 con SOAP ??, por favor, especifícame más.
Hola! gracias por responder, probe realizando tal cual tu ejemplo y me genera el siguiente error :
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://localhost/soapserver/basic.wsdl’ in C:\AppServ\www\soapserver\client.php:18 Stack trace: #0 C:\AppServ\www\soapserver\client.php(18): SoapClient->__construct(’http://localhos…’) #1 {main} thrown in C:\AppServ\www\soapserver\client.php on line 18
La linea 18 es esta:
18: $sClient = new SoapClient(’http://localhost/soapserver/soap.wsdl’);
Este error lo vi porque quite el try{}catch(){} para ver el problema, porque sino manda el mensaje: Hubo un error.
Cambie un poco el wsdl y logre que no genere el error de arriba pero lo hace al hacer la solicitud de suma (Este cambio que hice no me parece, solo fue una prueba)
Fatal error: Uncaught SoapFault exception: [HTTP] Client Error in C:\AppServ\www\view\soap\cliente.php:29 Stack trace: #0 [internal function]: SoapClient->__doRequest(’__call(’suma’, Array) #2 C:\AppServ\www\view\soap\cliente.php(29): SoapClient->suma(30) #3 {main} thrown in C:\AppServ\www\view\soap\cliente.php on line 29
29: $response = $sClient->suma($request);
Todos estos errores son del archivo client.php
Otra cosa porque seteas wsdl_cache_enabled a 0, ese valor debe ser 0 o 1?. Hasta donde tengo entendido debe ser 1.
ini_set(”soap.wsdl_cache_enabled”, “0″);
Yo he probado con otros wsdl y con el método getFunctions() me muestra los metodos que tiene el wsdl, este es solo para probar claro, porque necesito generar tanto mi servidor como mi cliente.
La verdad es que estoy preocupada, necesito solventar este problema lo antes posible, para entender bien el funcionamiento de esto y empezar a desarrollar.
Gracias, espero tu respuesta, si hay alguna manera que me pueda comunicar contigo de manera inmediata, cuando veas este correo dimelo por favor.
Gracias por responder, el error es el siguiente:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://localhost/soapserver/basic.wsdl’ in C:\AppServ\www\soapserver\clientbasic.php:18 Stack trace: #0 C:\AppServ\www\soapserver\clientbasic.php(18): SoapClient->__construct(’http://localhos…’) #1 {main} thrown in C:\AppServ\www\soapserver\clientbasic.php on line 18
otra cosa, por que seteas la variable wsdl_cache_enabled a cero? en el php.ini debe tener 1, segun tengo entendido.
ini_set(”soap.wsdl_cache_enabled”, “0″);
Si me puedo comunicar contigo de manera inmediaa dimelo por favor..
Saludos!!
Hola! Necesito crear tanto un servidor como un cliente con SOAP en php,como se explica en estos ejemplos, los cuales ya probe y me genera un error.
El error es “Hubo un error”, que es el texto que uno le da despues del catch,,, que puede ser ?
Fijate si tu version de PHP es 5 y tu version de SOAP 1.2, con esas versiones estoy trabajando…
la version de php es la 5 ,¿ como se la version del SOAP? , con el phpinfo() me muestra que estan abilitadas las opciones del SOAP tanto para servidor como cliente pero no la version.
Una forma de ver las version de las extensiones que estas utilizando es ir a http://php.net y revisar que tu version de PHP contenga dichas extensiones, luego cada paquete de PHP tiene una revisión donde detallan las extensiones y las versiones que viene ese paquete. Aunque la versión de SOAP en PHP 5 es la número 1 o 1.2 (corre igual) ya que la primera de edición de SOAP nativo para PHP esta en la versión 5 de PHP.
ok, voy ha ver que otro problema puede ser, por que corri un ejemplo de un libro y me funciono.
este es el error
SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://RUTA_DEL ARCHIVO.wsdl’ …..comprobe que la ruta fuera la misma tanto en archivo del Cliente como en el Servidor, pero aun me sale el error.
disculpa por melestar tanto!
Solo has de eliminar la segunda línea del WSDL que es un comentario, colocado en un lugar poco apropiado.
Hola;
una pregunta, cuando quiero ver el wsdl tipo (http://localhost/test/soap.wsdl), me descarag el archivo, y me sale el error de arriba te comentan, el php es 5.2 y el soap 1.2,
gracias
Tengo un problema similar al que comentan, usando un cliente SOAP.
El código sería el siguiente:
try
{
$soap = new soapclient(”http://URL_de_la_wsdl”);
$result = soap->servicio();
}
catch (Exception $e)
{
echo “ERROR :”.$e->getMessage();
}
Mi problema es que cuando la url es incorrecta o no contesta, me salta el error:
SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://URL de la wsdl’
Y ese error no es capturado por el CATCH, me para toda la ejecución y me escupe el error sin que pueda capturarlo.
ni poniendo “use_soap_error_handler(false)”, ni poniendo el tipo SoapFault en el catch , ni nada…
¿Alguna sugerencia?
El Blog se ha mudado ha:
http://www.genntoo.com, estas los mismos temas
por favor Jaume enviame las fuentes a mi correo para poder revisarlas y ayudarte a ver lo que pasa
El correo es: edicion@genntoo.com,
Muchas Gracias!!!
Hola yo estoy tratando de entender una aplicacion que muestra un mapa y al hacerle una peticion me manda solo el error: error en el servidor http 500 o algo asi, ya descubri que lo marca en un web service justo en la linea que tengo new soapclient ($ipservicio,nombre del servicio…)… pero no sè que pueda pasar porque si lo ejecuto en otra maquina si corre bien… solo en la mia no, que necesito revisar??? Esta en php en dreamweaver. Gracias
La solucion es deshabilitar el soap de tu server, en linux el soap.so y en windows el soap.dll
Ojo con la ruta que está definida en el archivo PHP del cliente la ruta del WSDL y la que está definida en el mismo también. Inicialmente me arrojaba el mismo error, pero luego de fijar bien las rutas como las tenía definida en mi servidor todo funcionó sin ningún problema. Tengo PHP 5 y opera sin ningún error.
Eres pésimo para tus tutoriales…
Gracias, sí me funcionó, el único problema que tuve fue un ecoding en el basic.wsdl, necesitaba que la primera línea sea
. El tuyo no tiene encoding.
AL final imprimió LA SUMA ES 64.