Crear un Cliente Básico de un Web Service con PHP 5

Una vez que ya crearon:

Su Script Servidor

Su Archivo WSDL

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

Fuentes de un Servidor PHP 5 basico

This entry was posted on Thursday, April 24th, 2008 at 10:39 pm and is filed under Desarrollo Web, PHP, Soap, Web Services. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

16 Responses to “Crear un Cliente Básico de un Web Service con PHP 5”

  1. Evelyn Gutiérrez on May 24th, 2008 at 12:47 pm

    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

  2. admin on May 24th, 2008 at 11:17 pm

    Puedes decirme que error te genera??? tu servidor tiene configurado PHP 5 con SOAP ??, por favor, especifícame más.

  3. Evelyn Gutiérrez on May 25th, 2008 at 5:50 am

    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.

  4. Evelyn Gutierrez on May 26th, 2008 at 8:09 am

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

  5. walter on June 27th, 2008 at 2:53 pm

    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 ?

  6. Ruben Bocanegra on June 29th, 2008 at 12:52 pm

    Fijate si tu version de PHP es 5 y tu version de SOAP 1.2, con esas versiones estoy trabajando…

  7. walter on July 1st, 2008 at 7:13 am

    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.

  8. Ruben Bocanegra on July 1st, 2008 at 1:26 pm

    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.

  9. walter on July 1st, 2008 at 3:08 pm

    ok, voy ha ver que otro problema puede ser, por que corri un ejemplo de un libro y me funciono.

  10. walter on July 1st, 2008 at 3:27 pm

    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!

  11. vivales on July 21st, 2008 at 8:31 am

    Solo has de eliminar la segunda línea del WSDL que es un comentario, colocado en un lugar poco apropiado.

  12. Marcelo on August 13th, 2008 at 10:26 am

    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

  13. Jaume on October 23rd, 2008 at 9:30 am

    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?

  14. admin on October 23rd, 2008 at 10:00 am

    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

  15. admin on October 23rd, 2008 at 10:02 am

    El correo es: edicion@genntoo.com,

    Muchas Gracias!!!

  16. Merce on November 22nd, 2008 at 12:43 pm

    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

Leave a Reply