Pages

Thursday, November 18, 2010

Web Service con NuSOAP en PHP

Ya teníamos rato sin publicar algo por aquí, así que regresó con todo jaja. Esta vez algo relacionado con lo que estamos haciendo en la U, dejenme contarles rápidamente: Nos separamos en 6 grupos cada uno hizo su propio banco, y en cada fase nos calificaron diferentes cosas y la última fase es hacer la compensación instantanea entre bancos, por lo que tenemos que hacer web services y darlos a los otros bancos.

Entonces despues de mucho leer y rompernos la cabeza encontramos NuSOAP (el link de descarga que miran ahí esta malo, busquen en files para encontrar la verdadera libreria) para PHP. Esta librería es bastante completa. Para este ejemplo yo estoy usando XAMPP y dentro de mi carpeta "htdocs" tengo una carpeta lib que contiene todos los archivos de NuSOAP.

Ejemplo del "Servidor" de Web Service:
1
<?php
//Se añaden las librerias de NuSOAP
require_once('lib/nusoap.php');
//Defino mimetodo como una funcion php
function hello($name) { return 'Hello, ' . $name;}
// Creo una nueva instancia del servidor.
$server = new soap_server; { return 'Hello, ' . $name;}
// Se registra el método a exponer, // en este caso es "hello" junto a
// su parametro en forma de array.
// el formato es algo así register(nombre,entrada,salida)

$server->gt;register('hello',array('name'=>'xsd:string'),array('return'=>'xsd:string'));
//El $HTTP_RAW_POST_DATA es donde estan los datos a devolver
// por eso se verifican y se pasan a la variable $input

if(isset($HTTP_RAW_POST_DATA))
{ $input = $HTTP_RAW_POST_DATA; }
else { $input = implode("\r\n", file('php://input')); }
$server->service($input);

// aquí es donde se devuelven los datos
exit;
// se termina el servicio
?>
Una breve explicación, el servidor basícamente es un archivo que contiene código php, el cual cuando un cliente quiere usar nuestro web service, le damos el link del archivo, y el "consume" el servicio. Ahora vamos al lado del cliente, este lo vamos a hacer bastante sencillo.

Ejemplo del "Cliente" de Web Service:

1
<?php
// Se añaden las librerias de NuSOAP
require_once('lib/nusoap.php');
// Crea la instancia del cliente
$client = new nusoap_client('http://localhost/server.php');
//Llamada al método que cree en mi servidor.php
$result = $client->call('hello', array('name' => 'Scott'));
// Se muestra el resultado
print_r($result);?>

Además de esto no todos los grupos trabajaron con PHP, hubieron tres grupos que desarrollaron su web service en ASP.net. Para consumir estos WS desde nuestro proyecto en PHP cambia un poco la sintaxis del cliente, como veremos a continuación:

1
<?php
// Se añaden las librerias de NuSOAP
require_once('lib/nusoap.php');
// Crea la instancia del cliente
//a la dirección donde se aloja el web service que va ser consumido se le agrega "?WSDL" (sin comillas)
//Se agrega un nuevo parámetro 'wsld' (esta vez si escribimos las comitas)
$client = new nusoap_client('http://localhost/WebService.asmx?WSDL', 'wsdl');
// Llamada al método que cree en mi servidor.php
$result = $client->call('hello', array('name' => 'Scott'));
//Puede que el web service en ASP nos devuelva un array con el contenido de lo que devuelve la función
//sin embargo si lo que esperamos recibir es un simple string debemos hacer un implode
//de lo contrario al usar print_r puede que nos devuelva algo similiar a: Array([posición]=>[contenido])
$result = implode(',',$result);
// Se muestra el resultado
print_r($result);
?>

Con eso concluimos un pequeño pero conciso ejemplo de la libreria NuSOAP. Aunque esta es mucho más poderosa y con más métodos que pueden facilitarnos el trabajo con Web Service.

No comments:

Post a Comment