SOAP es un protocolo de intercambio de datos entre diferentes procesos basado en XML. Una definición bastante completa la podéis encontrar en wikipedia. Una vez dicho esto vamos a empezar a ver cómo creamos un web service básico en PHP y que use dicho protocolo.
Lo primero que necesitaremos será descargar NuSOAP a nuestro proyecto. Se trata de un pequeño toolkit que nos facilitará la vida con varias clases para trabajar con este protocolo en PHP. Una vez descargado y descomprimido dentro de una carpeta de nuestro proyecto, simplemente la deberemos incluir en el archivo PHP que va a funcionar de web service.
A continuación veremos un ejemplo básico. A nuestro fichero le llamaremos test.php y lo que hará será recibir dos números enteros, multiplicarlos y devolver el resultado.
require_once("nusoap.php"); $server = new soap_server(); $server->register('multiplicarNumeros'); function multiplicarNumeros($valor1, $valor2){ $res = $valor1 * $valor2; return $res; } $server->service($HTTP_RAW_POST_DATA);
A continuación nos hará falta un cliente del web service al que llamaremos cliente.php. Lo que haremos será en el constructor llamar a la url del servidor y mediante la función call() llamar al método que nos multiplicarla los números. Los parámetros de la función los pasaremos en forma de array.
require_once("nusoap.php"); $cliente = new nusoap_client("http://localhost/test.php"); $error = $cliente->getError(); if ($error){ echo "Error: $error"; } $res = $cliente->call("multiplicarNumeros", array("valor1" => "10", "valor2" => "15")); $error = $cliente->getError(); if ($error){ echo "Error: $error"; } else { echo "Resultado: $res"; }
Hasta aquí tendríamos un cliente y servidor básico pero para que sea un web service más correcto nos haría falta definir el WSDL en la parte del servidor y así tener una definición de los métodos y parámetros que contiene. Para que NuSoap nos lo genere deberemos cambiar un poco la parte del servidor y nos quedaría de la siguiente forma.
require_once("nusoap.php"); $server = new soap_server(); // Configuramos el namespace y el WSDL $ns = "test"; $server->configureWSDL('test', $ns); $server->wsdl->schemaTargetNamespace = $ns; // Cambiamos la llamada para añadirle los parámetros de entrada y salida y el namespace $server->register('multiplicarNumeros', array('valor1' => 'xsd:integer', 'valor2' => 'xsd:integer'), array('return' => 'xsd:integer'), $ns); function multiplicarNumeros($valor1, $valor2){ $res = $valor1 * $valor2; return $res; } $server->service($HTTP_RAW_POST_DATA);
Ahora simplemente debes acceder a tu navegador y llamar a la URL http://localhost/test.php?wsdl y verás el WSDL que se ha generado.