1. Crear un servicio web SOAP en PHP usando la libreria NuSOAP
En este ejemplo utilizaremos NuSOAP:
NuSOAP es una librería para desarrollar Web Services bajo el lenguaje PHP. NuSOAP no es el único soporte
(hay muchas mas librerías) pero siempre me ha dado buenos resultados y existe desde hace mucho tiempo,
por lo cual está bastante avanzada. Podemos descargarla desde este enlace.
Configuración
Bastará con descomprimirla en nuestro directorio web e incluirla e nuestro archivo PHP:
Código:
?
require_once('./lib/nusoap.php');
Una vez incluida la librería, podemos inicializar/configurar el servicio.
Código:
?
$server = new soap_server();
$server->configureWSDL("HolaMundo", "urn:holamundowsdl");
$server->wsdl->schemaTargetNamespace = "urn:holamundowsdl";
Seguido de este código podemos definir las funciones y los tipos de datos que consumirá nuestro servicio (lo
veremos después).
Para finalizar, añadiremos el código para invocar el servicio.
Código:
?
$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] :
$server->service($HTTP_RAW_POST_DATA);
Definición de funciones
En este ejemplo vamos a crear 3 funciones.
Código:
?
function hola($nombre)
{
return 'Hola, ' . trim( $nombre );
}
function IniciarSorteo($persona)
{
$Saludo = 'Hola, ' . trim( $persona['Nombre'] ) . '. ';
$Saludo .= 'Usted tiene ' . $persona['Edad'] . ' ';
$Saludo .= 'años y es ' . trim( $persona['Sexo'] ) . '. ';
return array(
'saludo' => $Saludo,
'ganador' => (bool) rand(0, 1)
2. );
}
function GetPersonas()
{
$List = array();
$Sexo = array(
0 => "Hombre",
1 => "Mujer"
);
for ( $i=1; $i<11; $i++ )
{
$List[$i]['Nombre'] = "Persona " . $i;
$List[$i]['Edad'] = rand(1, 100);
$List[$i]['Sexo'] = $Sexo[rand(0, 1)];
}
return $List;
}
1. La función "hola", tiene un parámetro de tipo "string" que será para pasarle un nombre y devuelve un
"saludo" que será de tipo "string".
2. La función "IniciarSorteo", tiene un parámetro de entrada de un tipo definido: "persona".
Este tipo tendrá los siguientes campos:
1. "Nombre" de tipo "string".
2. "Edad" de tipo "integer".
3. "Sexo" de tipo "string".
La función devuelve también un dato de tipo definido: "ResultadoSorteo".
Este tipo tendrá los siguientes campos:
4. "saludo" de tipo "string".
5. "ganador" de tipo "boolean".
3. La función "GetPersonas", no tiene parámetros de entrada y devuelve un array de tipo "Persona".
Definición de tipos en nuestro servicio web
Código:
?
$server->wsdl->addComplexType(
'TWsPersona',
'complexType',
'struct',
'all',
'',
array(
'Nombre' => array('name' => 'Nombre', 'type' => 'xsd:string'),
'Edad' => array('name' => 'Edad', 'type' => 'xsd:int'),
'Sexo' => array('name' => 'Sexo', 'type' => 'xsd:string')
)
);
$server->wsdl->addComplexType(
'TWsArrayOfPersona',
'complexType',
'array',
'',
3. 'SOAP-ENC:Array',
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:TWsPersona[]')
),
'tns:TWsPersona'
);
$server->wsdl->addComplexType(
'TWsResultadoSorteo',
'complexType',
'struct',
'all',
'',
array(
'saludo' => array('name' => 'saludo', 'type' => 'xsd:string'),
'ganador' => array('name' => 'ganador', 'type' => 'xsd:boolean')
)
);
Definición de métodos en nuestro servicio web
Código:
?
$server->register(
'hola', // Nombre del método
array('nombre' => 'xsd:string'), // Parámetros de entrada
array('return' => 'xsd:string'), // Parámetros de salida
'urn:holamundowsdl', // Nombre del workspace
'urn:holamundowsdl#hola', // Acción soap
'rpc', // Estilo
'encoded', // Uso
'Saluda a la persona' // Documentación
);
$server->register(
'IniciarSorteo', // Nombre del método
array('Persona' => 'tns:TWsPersona'), // Parámetros de entrada
array('return' => 'tns:TWsResultadoSorteo'), // Parámetros de salida
'urn:holamundowsdl', // Nombre del workspace
'urn:holamundowsdl#IniciarSorteo', // Acción soap
'rpc', // style
'encoded', // Uso
'Saludar y devuelve el resultado del sorteo' // Documentación
);
$server->register(
'GetPersonas', // Nombre del método
array(), // Parámetros de entrada
array('return' => 'tns:TWsArrayOfPersona'), // Parámetros de salida
'urn:holamundowsdl', // Nombre del workspace
'urn:holamundowsdl#GetPersonas', // Acción soap
'rpc', // style
'encoded', // Uso
'Devuelve un array de personas' // Documentación
);