WebService en PHP con NuSOAP
May 09
Aunque en PHP5 existe una extension para crear servicios web basados en SOAP, algunos servidores donde posiblemente alojemos nuestra aplicacion no tienen habilitada la extension y por tal motivo debemos buscar alternativas para la creacion de los webservices.
En el 2002 Dietrich Ayala escribio una libreria llamada NuSOAP que permite implementar webservices en PHP incluyendo la version 4 y 5, esta libreria es una de las mas populares en la costruccion de servicios web en PHP pues tiene soporte para diferentes versiones de SOAP, como tambien es posible crear servicios web que generen los descriptores de los webservices (WSDL) y soporte de tipos de datos, aunque la implementacion suele complicarse cuando se utilizan estas caracteristicas.
Implementaremos un webservice basado en una funcion llamada sumar de la cual crearemos el webservice y su cliente utilizando NuSOAP, a continuacion se describen los pasos :
- Abrir una terminal
- Ir al directorio web donde se creara el servicio
- Descargar la libreria NuSOAP del repositorio en SourceForge
http://nusoap.cvs.sourceforge.net/viewvc/nusoap/lib/ - En este caso descargaremos la version 1.121
wget http://nusoap.cvs.sourceforge.net/viewvc/*checkout*/nusoap/lib/nusoap.php?revision=1.121
Implementar la Funcion a Utilizar :
- Utilizando su editor favorito crear un archivo donde se implemente la funcion :
(utilizaremos una funcion sumar que recibe dos numero y retorna su suma) - Crear el archivo sumar.php
<?php function sumar($x, $y) { return $x + $y; } ?>
Implementar el Servicio Web :
- Utilizando su editor favorito crear un archivo donde se cree el servidor
- Crear el archivo servicio.php
- Este incluye la libreria NuSOAP y la funcion creada anteriormente
- Crea un servidor soap e incluye la funcion
- Despacha el servicio con la informacion suministrada
<?php require_once('nusoap.php'); require_once('sumar.php'); $server = new nusoap_server(); $server->register('sumar'); $server->service($HTTP_RAW_POST_DATA); ?>
- Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
http://<servidor>/<ruta>/servicio.php
Implementar el Cliente :
- En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
- Utilizando su editor favorito crear un archivo cliente.php
- Para realizar el llamado se debe especificar como argumentos el nombre de la fuinciony en un arreglo asociativo, los nombres de las variables con sus respectivos valores
<?php require_once('nusoap.php'); $cliente = new nusoap_client('http://<ipServidor>/<ruta>/servicio.php'); ?>
- Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
http://<servidor>/<ruta>/cliente.php
Enlaces :
- Introduction to NuSOAP
http://www.scottnichol.com/nusoapintro.htm


Buen dia, gracias por explicar el tema de ws en php, estoy comenznado con el, copie los codigo sugeridos y no me muestra en la pagina, podria poner los codigos o enviarmelos
gracias por sua tencion y/o ayuda
hola soy novato en estos de nusoap y quiero si me pueden ayudar en hacer una suma,resta y multiplicacion,divicio del lado tanto del servidor como del cliente…
gracias……
o darme la idea…… gracias…
se los agradesco
Estoy intentando hacer este ejercicio y me genera este error al correr servicio.php
SOAP-ENV:Clientmethod ” not defined in service
Gracias por el artículo, funcionó perfecto todo el codigo. Gracias!
No funciona el servidor no tengo idea de lo q sucede, me muestra este error al implementar el servicio
“This service does not provide a Web description”
espero me puedas ayudar de antemano muchas gracias
El ejemplo está muy bien, pero:
¿cómo podemos llamar a servicio.php desde otro cliente, como Visual Basic, .Net o cualquier lenguaje de escritorio? Es lo que falta para que tenga sentido…
Gracias.
tengo el mismo error que Rene
“This service does not provide a Web description” se produce al momento de publicar el servidor. Por favor Ayuda…
engo el mismo error que Rene
“This service does not provide a Web description” se produce al momento de publicar el servidor. Por favor Ayuda…
no sirve esto mano
chau
Con respecto a este error:
“This service does not provide a Web description”, solo el cliente es que se ejecuta el server NO, si sale esto para mi realmente no importa igual el server debe funcionar, pero si aun sale algunos errores es mejor asegurarse de tener las siguientes configuraciones, yo utilizo xampp y allí necesitamos hacer algo, tenemos que ir a la carpeta donde esta instalado xammp y buscar el archivo php.ini –> c:/xammp/php.ini
en ese archivo debemos buscar ;extension=php_soap.dll y de estar deshabilitado anteponiendo un ;
y dentro del mismo archivo (php.ini) debemos buscar lo siguiente
allow_call_time_pass_reference = On si esta en off debemos cambiar ese estado a On.
después de hacer esto se debe reiniciar los servicios de xammp.
Ya debe de funcionar.. Buena suerte, espero les halla servido de algo.
Excelente post, compacto pero completo! gracias.
Muy buen post!
Hace 2 horas que empecé con Servicios Web y este es el primer post que me da resultados…
Te cuento que ejecuto el código en PHP 5.3.5 y me salían errores como: “Deprecated, nusoap.php on line 7381″, y muchos maas…
Lo que hice fue poner tanto en el servicio como en el cliente: error_reporting(0);
Y me funcionó perfecto!
excelente con una modificaciones corrió de maravilla
Para los que les salió el error “This service does not provide a Web description”. Yo lo resolví de manera sencilla; Hice la definición del namespace en el wsdl. Busquen info de $server->wsdl->schemaTargetNamespace = $namespace. Con eso!!
De hecho, si definen su namespace,cuando ingresen directo al servicio les mostrará toda la definición del webservice.
Espero sea de ayuda. Saludos.
Twitter: @Gi_Giorgio
Por favor @Gi_giorgio, soy novata en esto de los servicios web en php y php en gneral, y a mi me sale el error que tu comentas, pero no puede entender tu solucion, espero no sea de mucha molestia, pedir una explicacion mas detallada, de antemano agradezco tu respuesta..
A mí no me funcioa, en el servidor me sale este mensaje. Puedes responderme lo mas pronto posible? gracias
‘This service does not provide a Web description’
¡Funciona a la perfección!
Muy buen post!
Gracias por enseñarnos de buena manera todo lo que sabe, es excelente encontrar este tipo de sitios que nos ayuda a entender mejor alguna de las tantas cosas que no sabemos.
Que tal, alguien sabe porque me salta este error cada que quiero consumir el servicio?
array(4) { ["faultcode"]=> string(15) “SOAP-ENV:Client” ["faultactor"]=> string(0) “” ["faultstring"]=> string(50) “error in msg parsing: xml was empty, didn’t parse!” ["detail"]=> string(0) “” }
espero puedan ayudarme, gracias.
excelente post
simple y directo al grano
buenas tardes,
Yo acabo de adaptar tu ejemplo a una necesidad mia. Mi necesidad consiste en consultar en una tabla de una base de datos cierta cantidad de registros mediante el webservice, luego con un cliente webservice en otro servidor consumo dicha información(que viene en un vector arrojado por el webservice); el problema ocurre cuando en el vector que arroja el webservice hay muchos registros(aprox 15000), de ahi en adelante ya no puedo imprimir la información de dicho vector en mi pagina cliente, ademas, cuando yo disminuyo la cantidad de registros del vector (desde la tabla de BD)tampoco puedo imprimir la infomación en la página cliente, es como si se desbordara el webservice y este dejara de funcionar. Como puedo solucionar este inconveniente? Gracias..