¿Qué es un WebService?
Ya en el artículo sobre cliente SOAP di una pequeña definición de un WebService (Una más exhaustiva está en el curso de WebServices con PHP), por si no lo leíste te lo cuento:
Un WebService es una pequeña aplicación web diseñada para interactuar con otras aplicaciones (en lugar de hacerlo con personas).
Las dos aplicaciones que se comunican toman el rol de:
- Servidor: quien expone el servicio
- Cliente: quien lo consume
¿Qué es SOAP?
SOAP es un protocolo de intercambio de información basado en XML.
¿Cómo se implementa en PHP?
Ahora que estamos claros con las definiciones veamos un ejemplo:
server.php:
<?php class MiClase { public function saludar() { return 'Hola ' . func_get_args()[0] . PHP_EOL; } } try { $server = new SoapServer( null, [ 'uri'=> 'http://localhost:8080/soap_server.php', ] ); $server->setClass('MiClase'); $server->handle(); } catch (SOAPFault $f) { print $f->faultstring; }
cliente.php
<?php $client = new SoapClient(null, array( 'location' => "http://localhost:8080/server.php", 'uri' => "http://localhost:8080/server.php", 'trace' => 1 )); try { echo $return = $client->__soapCall("saludar", ["mundo!" ] ); } catch ( SOAPFault $e ) { echo $e->getMessage().PHP_EOL; }
Para que todo esto tenga sentido, primero necesitamos tener un webserver levantado en localhost:8080
. Para hacerlo simple, usemos el servidor incorporado al intérprete de PHP:
php -S localhost:8080 &
Y entonces, al ejecutar php soap_client.php
veremos:
Hola mundo!
Si en lugar de publicar este script (server.php) en nuestro localhost lo subiéramos a un servidor accesible públicamente, cualquier aplicación conectarse a este servicio e invocar nuestro método saludar.
Puedes utilizar un archivo WSDL para darle más robustez al servicio (y hacerlo descubrible también), pero por el momento tienes todo lo necesario para permitir a otras aplicaciones interactuar con la tuya a través de un WebService SOAP.
¡Feliz integración! 🙂
- Cómo agregar una página de error 500 en un proyecto PHP - 31/10/2024
- ¿Cuántos contenedoresnecesita tu php? - 28/10/2024
- Cuál es el mejor framework PHP para hacer APIs REST - 25/10/2024
Cuando creas en el archivo de server.php y llamas este archivo http://localhost:8080/soap_server.php, a qué archivo haces referencia, a caso a un archivo externo como el WSDL?
Muchas gracias por tu aporte.
Hola Javier:
Gracias por tu pregunta 🙂
En mi caso no estoy usando ningún archivo WSDL. De hecho el WSDL no es estrictamente necesario… es más bien una buena práctica cuando se trata de Servicios Web SOAP.
Saludos!
La explicacion esta muy clara ,pero no logro traducir el call que me enviaron del servidor que tengo que consultar a parámetros php que funcionene. si coloco el codigo como está .me tira un error 500. estoy seguro de que falta al menos una variable que reciba el resultado pero no se como implementar la parte del armado del soap en php:
Este es el codigo que me pasaron:
POST /WebServices/wsclienteecxmlact.asmx HTTP/1.1
Host: wsclienteec.andesmar.com.ar
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
usuario
clave
cliente
string
string
Como sea al aplicarlo tal cual está me tira un error de procesamiento (500).
Si te da error 500 el problema está del lado del servidor. Habría que ver si te devuelve algún mensaje específico para poder analizarlo y encontrar la causa…
Salvo que el error 500 lo esté dando tu aplicación, en cuyo caso, algo debería haber en el log de tu servidor.
¿Probaste realizar la consulta con alguna otra herramienta? Por ejemplo SoapUI
Estimado, gracias por su tutorial, la verdad leo y leo en varios foros sobre esta forma de crear un servidor soap con php, pero aun no logro encontrar alguno que asocie un wsdl y que funcione.
si puedes compartir algún ejemplo, link o tutorial de como asociar, crear, ejecutar, leer en fin la funcionalidad completa de un servicio soap, te lo agradecería muchísimo.
Hola Jonathan:
Gracias por tu pregunta 🙂
¿A qué te refieres con asociar un WSDL? El archivo WSDL es una descripción de un servicio web. Para que tu servidor funcione con esa definición debe implementar todas las funciones allí declaradas, respetar los tipos de datos, parámetros, etc…
Acá podés encontrar un ejemplo que creo que es bastante ilustrativo.
Exitos!