Gracias a Pedro A. Castillo Valdivieso disponemos de este Curso de PHP:
Introducción a PHP – Programador PHP – UGR
Lo interesante, ahora que sabemos como programar servicios web complejos con Java y comunicarlos mediante SOAP es usar la clase que traen las últimas versiones de PHP (desde la 5.x), con un ejemplo sencillo, podemos probar a crear una lista de servicios como los que hay en https://www.service-repository.com/schema/namespaces …
El código sería tan sencillo como lo siguiente:
$wsdl = "https://www.currencyserver.de/webservice/currencyserverwebservice.asmx?WSDL"; echo "Servicios ofertados por <strong>$wsdl</strong>"; $client = new SoapClient($wsdl); $avail = $client->__getFunctions(); echo '<ul></ul><ul>'; foreach($avail as $func) { echo "<li>" . $func . "</li></ul>"; } echo '<hr />'; echo highlight_string( file_get_contents(__FILE__));
Que devuelve una lista de las operaciones del servicio especificadas por el WSDL.
Y para terminar ya sabéis que podéis crear vuestros propios servicios web con PHP, un ejemplo sencillo:
//Añadiendo función suma: $cliente = new SoapClient( null, array( "location"=>"https://localhost/simple/serversimple.php", "uri"=>"" ) ); $suma = $cliente->suma(2,3); print("La suma de 2 y 3 es :".$suma);
Código fuente de serversimple.php:
function suma($a,$b){ return intval($a)+intval($b); } $server = new SoapServer(null, array('uri'=>""));//Sin WSDL -> uri es obligatorio $server->addFunction("suma"); $server->handle();
Ver ejemplo funcionando: aquí
Recordar que hay que generar los ficheros WSDL con Katy u otra herramienta.
« Volver al Curso de Servicios Web
Hola, apenas estoy iniciándome en esto de servicios WEB y SOAP,xml y WSDL son terminos que aun no termino por dominar, quisiera felicitarte por la informacion y tambien hacerte una pequeña consulta, ¿Cual es el codigo de serversimple.php?, yo hize varias cosas pero ninguna me retorna el valor desde un simple function suma($a,$b) hasta una clase llamada suma, y nada hace que me retorne el valor de la funcion de SUMA, podrias proporcionar esa parte del codigo?, PD excelente BLOG.
Ahí lo tienes, de nada.
Muchas Muchas Muchas gracias ^^.
Gracias por la explicacion, tengo una duda en cuanto a eso, como ejecuto la funcion suma?
$client->suma(numero1, numero2); ?
gracias
Sí, así es Juan
Podrias mostrar el codigo de prueba.php ?
El código de prueba.php es el del «ejemplo sencillo», Juan
Y si lo que quiero es consumir un xml con un certificado digital?, conoces alguna forma de hacerlo ?
Pues deberías mirarte todo el tema de OpenSSL y firmas digitales, hay comandos para eso…
Gracias por la info!
Intento ejecutar ambos servicios (sin y con WSDL) y en ambos obtengo el mismo error, parece que no llega a acceder al servicio:
OPERACIONES DEL WEBSERVICE:
array(3) { [0]=> string(29) «string diHola(string $nombre)» [1]=> string(28) «string diAdios(string $otro)» [2]=> string(24) «int suma(int $a, int $b)» }
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\….
¿Qué puede pasar? ¿Puede ser por configuración? ¿Permisos?
Gracias!
La url del servicio tarda mucho, o estás haciendo algún bucle infinito,…tendrías que cambiar el tiempo máximo de ejecución o pasarlo a segundo plano (asíncrono)…
hola te felicito por la informacion ! quisiera saber si podrias compartirme por correo la presentacion vista aqui de php , ya que me seria de gran utilidad para las clases que doy en la universidad , respetando claro los derechos de autor . muchas gracias
Hola, he activado el botón para guardar el fichero. Un saludo