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.