Consumir Web Service del SIU-Mapuche desde SIU-Toba

Hola,

Quería compartir como consumir un WebService del SIU desde el SIU-Toba.

En ente caso de ejemplo, consumiremos un WS desde el SIU-Mapuche.

Claramente lo primero que tengo que tener, es correctamente instalada la libreria WSF/PHP (¿Como? ver aquí o aquí) en el servidor del SIU-Mapuche, y también en el servidor en el cual estamos desarrollando la aplicación ya que es fundamental para el manejo de WS en SIU-Toba esta librería.
Generando el entorno (Seguridad)

Los WS service del SIU, por convención TODOS, menos los de prueba (eco y ping) deben funcionar “seguros”, esto quiere decir que deben viajar encriptados y firmados (utilizando criptografía asimétrica). Para realizar esto es necesario utilizar dos pares de certificados (unos para el cliente, otros para el servidor).

Para crear los certificados debemos tener un archivo openssl.ini el cual vamos usar para facilitar el ejemplo y al cual le podemos editar las siguientes partes:


[ req_distinguished_name ]
C                      = AR
ST                     = Buenos Aires
L                      = Buenos Aires
O                      = SIU
OU                     = Sistemas
CN                     = Sistemas
emailAddress           = jperez@siu.edu.ar

y la parte:


[dir_sect]
C=AR
O=SIU
OU=Sistemas
CN=Juan Perez

con la información particular de la institución donde trabajan.

Para generar los certificados debemos ejecutar:


# openssl req -x509 -nodes -days 20000 -newkey rsa:1024 -keyout cliente.key.sign -config {ruta_al_archivo}/openssl.ini -out cliente.crt
# openssl rsa -in cliente.key.sign -out cliente.key
# rm cliente.key.sign

Y repetir la operación para generar los certificados para el servidor:


# openssl req -x509 -nodes -days 20000 -newkey rsa:1024 -keyout server.key.sign -config {ruta_al_archivo}/openssl.ini -out server.crt
# openssl rsa -in server.key.sign -out server.key
# rm server.key.sign

Configuración del servidor (SIU-Mapuche)

Primero que nada, hay que saber que los WS del SIU-Mapuche, tienen un sistema de seguridad por el cual se permite la activación y desactivación de los mismos

El sistema SIU-Mapuche por default trae desactivados todos los WS exepto 2 que son de prueba (echo y ping). Para activar los WS se debe ir a Configuración, una vez que estamos dentro de la operación Configuración se debe ingresar a Servicios Web → General, ahí tildar los servicios que necesitamos, y guardar los cambios.

Una vez habilitados los WS, debemos configurar los certificados (3 de los 4 que creamos antes).

Debemos subir 3 certificados al servidor donde se encuentra el SIU-Mapuche

  • server.crt (Certificado servidor)
  • server.key (Clave servidor)
  • cliente.crt (Certificado cliente)

Cuando se tengan estros tres archivos subidos al servidor, vamos a Configuración → Servicios Web → Seguridad, y llenamos con las 3 rutas completas a los archivos que acabamos de subir según corresponda y guardamos.
Configuración del cliente (nuestro proyecto en SIU-Toba)

Dentro de nuestro proyecto, debemos crear un nuevo “servicio web accesible”, esto lo podemos realizar desde el toba_editor en la pestaña “Datos” → “Servicios Web Accesibles”, aquí hacemos click en el botón agregar.

En el ejemplo que voy a mostrar, vamos a trabajar con los WS de agentes.


Identificador: mapuche_agentes
URL: http://{ruta_al_mapuche}/servicios.php/ServicioWebAgentes

Y guardamos los cambios.

Nota: La URL siempre esta formada por el punto de acceso a los servicios web del SIU-Mapuche (http://{ruta_al_siu_mapuhce}/servicios.php) mas el nombre del WS que puede verse en el SIU-Mapuche en “Ayuda” → “Servicios Web” (ServicioWebAgentes, ServicioWebCargos, ServicioWebPruebas, etc).

Lo próximo que tenemos que hacer es configurar el “certificado del servidor” en la “instancia cliente” (nuestro proyecto). Esto lo podemos hacer con un comando de consola de toba:

# toba servicios_web cli_configurar -c {ruta_fisica_al_certificado_del_server} -s mapuche_agentes -p {nombre_de_nuestro_proyecto}

Con todo esto, ya deberíamos tener todo configurado y listo para poder trabajar (codear!).

NOTA: Tomo por sentado de que tienen conocimientos de como crear operaciones en SIU-Toba.

Para este ejemplo, creamos una operación la llamamos Legajo y le agregamos un CI, al CI le agregamos un cuadro con 3 columnas (legajo, nombre y apellido) y extendemos el CI.

agregamos el siguiente código:


function conf__cuadro_agentes(mapuche_mini_ei_cuadro $cuadro)
	{
		//--1- Arma el mensaje
		$opciones = array('action' => 'getAgentes');    //En action se detalla la operacion a invocarse
		$filtro = array();
		$filtro[] = array('campo'=>'apellido', 'operador' => 'contiene', 'valor'=> 'pilla');
		$mensaje = new toba_servicio_web_mensaje(array('parametros' => array('filtro' => $filtro )) , $opciones);

		//--2- Arma el servicio
		$opciones = array();
		$servicio = toba::servicio_web('mapuche_agentes', $opciones);

		//-- 3 - Muestra la respuesta
		try {
			$respuesta = $servicio->request($mensaje);
			$cuadro->set_datos($respuesta->get_array());
		} catch (toba_error_servicio_web $e) {
			toba::notificacion()->info($e->get_mensaje().' (codigo "'.$e->get_codigo().'")');
		}

	}

FIN!

Proximamente voy a subir como hacer para consumir los WS del SIU-Mapuche desde afuera del SIU-Toba.

Pueden bajarse el proyecto demo que realice y poder utilizarlo de ejemplo, solo tienen que cargar el proyecto en un SIU-Toba 2.3.4 y cargarlo con el siguiente comando de toba:

toba proyecto cargar -p mapuche_mini -d {ruta_a_donde_esta_el_proyecto}

Referencias:

Post original: http://www.gustavopilla.com/2012/11/12/consumir-web-service-del-siu-mapuche-desde-siu-toba/

Buenos días Gustavo! Te escribo porque quería consultarte cómo consumir un servicio web desde una aplicación web. Estamos comenzando a ver como armar el portal de los empleados para que (en principio) puedan descargar sus recibos de sueldo.
¿Tendras algun ejemplo como para mandarme?
Desde ya muchas gracias!

Andrea

Hola Andrea,

Disculpa la demora en la respuesta.

¿Tienen pensado en que tecnología van a implementar el portal?

  • Si lo piensan usar con SIU-Toba, el ejemplo anterior esta muy cerca de lo que necesitan.
  • Si lo piensan hacer con otra tecnología en PHP tengo un ejemplo en mi otra computadora (la cual no la tengo a mi alcance ahora) y del cual no estoy muy orgulloso (fue un ejemplo rápido), pero puedo dejarlo mas prolijo y compartirlo.

Buen día Gustavo! No hay problema, teniamos pensado en desarrollarlo en PHP, así que tu ejemplo nos va a venir re bien. Muchisimas gracias!

Saludos,

Andrea

Gustavo, buen dia.

Estoy intentando probar el mapuche_mini y tengo un par de dudas.

En la sentencia

toba servicios_web cli_configurar -c {ruta_fisica_al_certificado_del_server} -s mapuche_agentes -p {nombre_de_nuestro_proyecto}

En esta sentencia la {ruta_fisica_al_certificado_del_server} deberia ser directorio_mapuche/php/servicios_web/soporte/certificados???

Donde debo colocar los certificados. Tengo generados los siguientes: cliente.crt cliente.key server.crt server.key y probe dejarlos en “/dir_mapuche/php/servicios_web/soporte/certificados/” y “/home/toba/2.3.4/instalacion/i__desarrollo/p__mapuche_mini/” pero me da error en cualquier lado.

Lo adjunto.
No existe la clave privada/certificado del proyecto en ‘/home/toba/2.3.4/instalacion/i__desarrollo/p__mapuche_mini/privada.key’. Puede generarlos usando el comando generar_cert

Pregunto, es un simple error en el nombre del certificado o debo tener en cuenta algo mas?

Gracias desde ya
Saludos
Carolina

p/d: aclaro que tengo mapuche y mapuche_mini en un mismo servidor.

Hola Carolina,

La dirección debe ser completa incluyendo el nombre de los archivos. Por ejemplo:

/dir_mapuche/php/servicios_web/soporte/certificados/cliente.key

y

/dir_mapuche/php/servicios_web/soporte/certificados/cliente.crt

Al margen te comento de que a partir de la versión 2.4.0 del SIU-Toba desde la administración de usuarios (proyecto toba_usuarios) es mucho mas facil la gestión de los certificados (ver mas aquí). Por lo que si vas a desarrollar algo nuevo te recomiendo que utilices las ultimas versiones.

Saludos! y por favor comentanos si pudiste solucionar tu problema.

Si Gustavo, asi lo estaba ingresando. Completo incluido el nombre del certificado, pero me sale igual ese error que pase en el mensaje anterior :frowning:

Acabo de realizar una prueba, y lo que sucede es que toba te alerta de que se necesitan los certificados locales.

Generar los certificados locales se realiza de la siguiente manera:

toba servicios_web generar_cert

Con esto deja de tirar ese warning.

Saludos!

Gustavo, ahora si no me dio error. La pregunta ahora seria, el filtro del menu Actualización->Legajo me deberia poder mostrar algun dato si es que esta bien configurado el webservice? O simplemente es el formato del formulario y habria que modifcar la logica???’

Gracias desde ya

Hola Gustavo. Te quería preguntar como obtener el archivo wsdl correspondiente a los web services que provee el siu mapuche. Sucede que queremos consumirlos desde un sistema hecho en java con el framework spring. Saludos

Hola Jonatan, la ruta para el WSDL es

{URL_MAPUCHE}/servicios.php/{SERVICIO}?wsdl

un ejemplo puede ser:
http://localhost/mapuche/2.2/servicios.php/ServicioWebNoticias?wsdl

Teniendo instalado mapuche en [b]http://localhost/mapuche/2.2/[/b] Accedemos el WSDL del servicio ServicioWebNoticias

saludos

Observación:
No conozco los serv de Mapuche, pero por la implementación de toba, no se si los wsdl te van a servir para generar un cliente con Spring. En particular, no creo que reflejen la estrcutura correcta de parámetros. Incluso hay algunos tipos de datos de php (arreglos numericos) que dificilmente se puedan mapear a un wsdl, toba los manejaba de forma especial para hacer transparente el mapeo php<->xml, pero no se si es algo propio del estandar.