Web Services

Validar Correos Electrónicos de nuestros usuarios y/o clientes.

Hola Colegas!

Muchas veces cuando desarrollamos sistemas de información entre las funcionalidades primordiales del sistema es levantar un formulario de inscripción “el famoso proceso de registro” y el correo electrónico se convierte en el primer canal de comunicación entre nuestro sistema y el cliente, es importantísimo validar si el dato “email” brindado por el cliente verdaderamente existe.

Supongamos que nuestro sistema es un sistema de CRM ( Customer Relationship Management) y usualmente lo usamos para enviar notificaciones a nuestros prospectos y/o clientes, promociones, entre otros. Previo a este proceso de gestión podríamos aplicar un procedimiento de “aseguramiento de calidad”, es decir, que antes de registrar a nuestro cliente, persona contacto y/o usuario; dentro del proceso de registrar los datos podríamos validar si verdaderamente el buzón existe, pues bien! aquí les comparto una excelente herramienta que pueden incorporar a sus sistemas para que su comunicación sea más efectiva y no se dé cuenta que el correo registrado no existe o está malo en un proceso POST, y si no más bien en paso previo para aumentar la efectividad de comunicación.

Herramienta: http://verify-email.org/

API:http://verify-email.org/using-api.html

Buena Suerte!.

Ejemplo de como enviar arreglo Multidimensional Para NuSOAP

Hola Colegas!

Gracias a la consulta de una de mis visitantes, les comparto el ejemplo de como enviar un vector ó arreglo multidimensional con nusoap y que nuestro servicio (webService) lo pueda procesar, es muy similar al ejemplo que compartí anteriormente, únicamente con pequeñas variaciones.

Le vamos a enviar lo siguiente ( arreglo multidimensional):

	
$personas = array();
$personas[1] =  array('cedula' => '123A', 'nombre' => 'Juan',	'FechaNacimiento'	=> 1965);
$personas[2] =  array('cedula' => '123B', 'nombre' => 'Marcos',	'FechaNacimiento' 	=> 1980);
$personas[3] =  array('cedula' => '123C', 'nombre' => 'Pedro',	'FechaNacimiento' 	=> 1990);
$personas[4] =  array('cedula' => '123D', 'nombre' => 'Ana',	'FechaNacimiento'	=> 1995);
$personas[5] =  array('cedula' => '123F', 'nombre' => 'Maria',	'FechaNacimiento'	=> 1972);


Del lado del server nuestro código seria el siguiente:

<?php

// incluimos la libreria ó toolkit nusoap que descargamos previamente
require_once('lib/nusoap.php');

$server = new nusoap_server();

$server->configureWSDL('Mi Web Service', 'urn:mi_ws1');

// Parametros de entrada
$server->wsdl->addComplexType(  'datos_persona_entrada', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('cedula'  		 	=> array('name' => 'cedula','type' => 'xsd:string'),
                                      'nombre'    			=> array('name' => 'nombre','type' => 'xsd:string'),
                                      'FechaNacimiento' 	=> array('name' => 'FechaNacimiento','type' => 'xsd:string'))
);
// Parametros de Salida
$server->wsdl->addComplexType(  'datos_persona_salida', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('mensaje'   => array('name' => 'mensaje','type' => 'xsd:string'))
);


$server->register(	'calculo_edades', // nombre del metodo o funcion
					array('datos_persona_entrada' => 'tns:datos_persona_entrada'), // parametros de entrada
					array('return' => 'tns:datos_persona_salida'), // parametros de salida
					'urn:mi_ws1', // namespace
					'urn:hellowsdl2#calculo_edades', // soapaction debe ir asociado al nombre del metodo
					'rpc', // style
					'encoded', // use
					'La siguiente funcion recibe un arreglo multidimensional de personas y calcula las Edades respectivas segun la fecha de nacimiento indicada' // documentation,
					 //$encodingStyle
);


function calculo_edades($datos) {

	$msg = '';	
	// Recorro el arreglo de datos enviados
	foreach ($datos as $key => $value){
		
		$edad_actual = date('Y') - $value['FechaNacimiento'];
		$msg .= 'La edad de '. $value['nombre'] .' es:' . $edad_actual . ' años ==== <br />'; 
	}
	
	return array('mensaje' => $msg);
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

Para consumir el servicio en PHP el código sería el siguiente:

<?php

	require_once('lib/nusoap.php');
	
	$personas = array();
	$personas[1] =  array('cedula' => '123A', 'nombre' => 'Juan',	'FechaNacimiento'	=> 1965);
	$personas[2] =  array('cedula' => '123B', 'nombre' => 'Marcos',	'FechaNacimiento' 	=> 1980);
	$personas[3] =  array('cedula' => '123C', 'nombre' => 'Pedro',	'FechaNacimiento' 	=> 1990);
	$personas[4] =  array('cedula' => '123D', 'nombre' => 'Ana',	'FechaNacimiento'	=> 1995);
	$personas[5] =  array('cedula' => '123F', 'nombre' => 'Maria',	'FechaNacimiento'	=> 1972);
	
	
	$cliente = new nusoap_client('http://www.mauricioalpizar.com/ejemplos/nusoap/ce_server.php');
	//print_r($cliente);
	
	$datos_persona_entrada = array( "datos_persona_entrada" => $personas);

	$resultado = $cliente->call('calculo_edades',$datos_persona_entrada);
	
    print_r($resultado);
	
?>

URL para probar el resultado del código anterior:

http://www.mauricioalpizar.com/ejemplos/nusoap/ce_cliente.php

WSDL del WebService: http://www.mauricioalpizar.com/ejemplos/nusoap/ce_server.php?WSDL

Buena Suerte!!!.


					
				
	

WebService para obtener el Tipo de Cambio Banco Central Costa Rica

Hola! colegas.

Comparto un pequeño script muy sencillo sin dependencias de librerias SOAP para obtener el tipo de cambio en colones, valor de compra y venta. Emitido de la fuente del Banco Central Costa Rica

<?php
function etiqueta_final($parser, $name) {
    global $info,$datos,$contador;
    $info[$name][] = $datos;
}
function extractor_datos($parser,$data){
                global $datos;
                $datos = $data;
}
function extractor_datos_tags($parser,$data){
                global $datos;
                $datos .= $data;
}
function parser_extractor($cadena,$tags=true){
                
	// Definiendo variables 
	global $info,$datos,$contador;
	$info = array();
	$datos = "";
	$contador = 0;

	// Creando el parser
	$xml_parser = xml_parser_create();

	// Definiendo la funciones controladoras
	xml_set_character_data_handler($xml_parser,($tags?"extractor_datos":"extractor_datos_tags"));
	xml_set_element_handler($xml_parser, "", "etiqueta_final");
	
	// Procesando el archivo
	if (!xml_parse($xml_parser, $cadena)) {
					die(sprintf("XML error: %s at line %d",
																	xml_error_string(xml_get_error_code($xml_parser)),
																	xml_get_current_line_number($xml_parser)));
	}
	
	// Liberando recursos
	xml_parser_free($xml_parser); 
	return $info;
}


/*
La siguiente Funcion debe recibir por parametro la fecha en formato dd/mm/YYYY
*/
function tipo_cambio($fecha){
	// Rutas de los archivos XML con el tipo de cambio
	$file["compra"] = "http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/WebServices/wsIndicadoresEconomicos.asmx/ObtenerIndicadoresEconomicosXML?tcIndicador=317&tcFechaInicio=$fecha&tcFechaFinal=$fecha&tcNombre=dmm&tnSubNiveles=N"; // Archivo XML 
	$file["venta"] = "http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/WebServices/wsIndicadoresEconomicos.asmx/ObtenerIndicadoresEconomicosXML?tcIndicador=318&tcFechaInicio=$fecha&tcFechaFinal=$fecha&tcNombre=dmm&tnSubNiveles=N"; // Archivo XML 
	
	// Extrae el tipo cambio con el valor de COMPRA
	$data_file = file_get_contents($file["compra"]);
	$ainfo = parser_extractor($data_file,false);
	$fuente = parser_extractor($ainfo["STRING"][0]);
	$tipo["compra"] = $fuente["NUM_VALOR"][0];
	
	// Extrae el tipo cambio con el valor de VENTA
	$data_file = file_get_contents($file["venta"]);
	$ainfo = parser_extractor($data_file,false);
	$fuente = parser_extractor($ainfo["STRING"][0]);
	$tipo["venta"] = $fuente["NUM_VALOR"][0];
	
	// Retornando valor de compra y venta del dolar
	if ( $tipo["compra"] == "" or $tipo["venta"] == "" ){
		return false;
	}else{
		return $tipo;
	}

}

$fecha = date('d/m/Y');
$valor = tipo_cambio($fecha);

/* Imprime en Pantalla el Resultado de Valor de COMPRA Y VENTA*/
/* Pueden utilizar la variable llamada $valor( que es una estructura Arreglo ) con la posicion de compra y venta en sus aplicaciones como gusten. */
echo "<pre>";
print_r($valor);
echo "</pre>";
?>

Para probar el resultado del scrip aqui les dejo el URL: http://www.mauricioalpizar.com/ejemplos/tipo_cambio_costa_rica/tipocambio.php

Buena Suerte!.

 

Ejemplo de como programar un Web service utilizando NuSOAP y PHP (Parte I)

A continuación se muestra como desarrollar un Web Service del lado del proveedor / Servidor,

1.- Incluimos la librería nusoap dentro de nuestro archivo.  lo voy a llamar “mi_ws1.php”, de manera que dentro de mi archivo mi_ws1.php voy a colocar el siguiente código:

<?php

// incluimos la libreria ó toolkit nusoap que descargamos previamente
require_once('lib/nusoap.php');

?>

2.- Creamos la instancia al servidor

<?php
// Vamos a crear la instancia del servidor.
$server = new nusoap_server();

?>

3.- Inicializamos el soporte WSDL

<?php
$server->configureWSDL('Mi Web Service #1', 'urn:mi_ws1');
?>

//urn es el “Uniform Resource Name”, es el nombre del recurso con que va a ser accesado el Web Service como lo comentamos es como el manual del WSDL

4.- Registramos la estructura de datos usado por el servicio

<?php
// Parametros de entrada
$server->wsdl->addComplexType(  'datos_persona_entrada', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('nombre'   => array('name' => 'nombre','type' => 'xsd:string'),
                                      'email'    => array('name' => 'email','type' => 'xsd:string'),
                                      'telefono' => array('name' => 'telefono','type' => 'xsd:string'),
                                      'ano_nac'  => array('name' => 'ano_nac','type' => 'xsd:int'))
);
// Parametros de Salida
$server->wsdl->addComplexType(  'datos_persona_salidad', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('mensaje'   => array('name' => 'mensaje','type' => 'xsd:string'))
);
?>

5.- Registramos el método/función para que el Web Service lo reconozca y se pueda utilizar:

<?php
$server->register(  'calculo_edad', // nombre del metodo o funcion
                    array('datos_persona_entrada' => 'tns:datos_persona_entrada'), // parametros de entrada
                    array('return' => 'tns:datos_persona_salidad'), // parametros de salida
                    'urn:mi_ws1', // namespace
                    'urn:hellowsdl2#calculo_edad', // soapaction debe ir asociado al nombre del metodo
                    'rpc', // style
                    'encoded', // use
                    'La siguiente funcion recibe los parametros de la persona y calcula la Edad' // documentation
);
?>

6.- Definimos el método como una función PHP

Lo que aconsejo para que tu código sea ordenado,legible es que todas tus funciones de PHP sean construidas en una unidad aparte ( miarchivo_func_soap.php) y luego realizas el include de ese archivo en tu codigo de la declaracion del servicio SOAP.

<?php
function calculo_edad($datos) {
    $edad_actual = date('Y') - $datos['ano_nac'];
    $msg = 'Hola, ' . $datos['nombre'] . '. Hemos procesado la siguiente informacion ' . $datos['email'] . ', telefono'. $datos['telefono'].' y su Edad actual es: ' . $edad_actual . '.'; 
    return array('mensaje' => $msg);
}
?>

7.- Usamos el pedido para invocar el servicio y hasta aquí llegaría el ejemplo del lado del servidor.

<?php
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

Para probar el WS: http://www.validwsdl.com/
Escribes la dirección: http://www.mauricioalpizar.com/ejemplos/nusoap/mi_ws1.php?

Resultado:

 

Respuesta del consumo del Web Service deberia ser:

Outgoing SOAP Request

POST /ejemplos/nusoap/mi_ws1.php HTTP/1.0
Host: www.mauricioalpizar.com
Content-Type: text/xml
Content-Length: 1032
SOAPAction: "urn:hellowsdl2#calculo_edad"

<?xml version='1.0'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='urn:mi_ws1' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
   <SOAP-ENV:Body>
      <ns1:calculo_edad SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:ns1='urn:mi_ws1'>
         <datos_persona_entrada xsi:type='tns:datos_persona_entrada'>
            <nombre xsi:type='xsd:string'>
               Mauricio Alpizar
            </nombre>
            <email xsi:type='xsd:string'>
               ealpizar@cyberfuel.com
            </email>
            <telefono xsi:type='xsd:string'>
               8700-5455
            </telefono>
            <ano_nac xsi:type='xsd:int'>
               1980
            </ano_nac>
         </datos_persona_entrada>
      </ns1:calculo_edad>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Incoming SOAP Response

<?xml version='1.0' encoding='ISO-8859-1'?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='urn:mi_ws1'>
   <SOAP-ENV:Body>
      <ns1:calculo_edadResponse xmlns:ns1='urn:mi_ws1'>
         <return xsi:type='tns:datos_persona_salidad'>
            <mensaje xsi:type='xsd:string'>
               Hola, Mauricio Alpizar. Hemos procesado la siguiente informacion ealpizar@cyberfuel.com, telefono8700-5455 y su Edad actual es: 34.
            </mensaje>
         </return>
      </ns1:calculo_edadResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Si deseas ver el código para poder consumirlo aquí esta el ejemplo:

http://www.mauricioalpizar.com/ejemplo-de-como-consumir-un-web-service-utilizando-nusoap-y-php-parte-ii/

 Referencias bibliográficas:

  • http://searchsoa.techtarget.com/definition/URN

 

Crear un Web Service en PHP utilizando el Toolkit de NuSOAP

Lo primero que debes saber es que NuSOAP es una reescritura de SOAPx4, proporcionada por NuSphere y Dietrich Ayala. Se trata de un conjunto de clases PHP – no se requieren instalar  extensiones de PHP adicionales. NuSOAP permiten a los desarrolladores crear y consumir servicios web basados ​​en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1.

Algunos términos importantes que debes saber:

Web Service es un tecnología diseñada para soportar e intercambiar datos entre aplicaciones , la interoperabilidad de máquina a máquina a través de una red. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL, que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.

SOAP – Simple Object Access Protocol es un protocolo de comunicación, el cual permite la comunicación entre aplicaciones a través de mensajes por medio de Internet. Es independiente de la plataforma, y del lenguaje. Esta basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho

WSDL – Web Services Description Language es el lenguaje de la interfaz pública para los servicios Web. Es una descripción basada en XML de los requisitos funcionales necesarios para establecer una comunicación con los servicios Web. Podriamos decir que es el “manual de operación del web service“, porque nos indica cuales son las interfaces que provee el Servicio Web y los tipos de datos necesarios para la utilización del mismo.

Ejemplo de como construir el Web Service ( del lado del servidor,  como proveedor del servicio)

Referencias bibliográficas:

  • http://sourceforge.net/projects/nusoap/
  • http://nusoap.sourceforge.net/ ( para descargar el toolkit)
  • http://beeznest.wordpress.com/2009/03/16/servicios-web-con-php-utilizando-la-herramienta-nusoap/
  • http://es.wikipedia.org/wiki/Servicio_web

 

Validador de Web Service WSDL – SOAP

Aquí les dejo una excelente herramienta que me pasó un colega para probar nuestros Web Services que programamos a diario.

El validador construye el objeto y los métodos/funciones de nuestro web service y solicita los datos/parámetros de la función.

http://www.validwsdl.com

http://www.wsdl-analyzer.com/