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!.

 

Pruebas automatizadas de Software Web con IMACROS.

Hola!, comparto el siguiente aporte que estoy seguro que será de mucha utilidad para aquellos desarrolladores de software que cuando se encuentran en la etapa de “probar” o “testear” sus propias aplicaciones dicen: pufff! que cansado!, “ahora tengo que probar mi aplicación una y otra vez”, y nos encontramos en una esta etapa repititiva de hacer ciclos de ciclos para verificar si los datos son ingresados correctamente a mi motor de base de datos, o bien el software realiza el proceso correcto entre pantallas o flujo de procesos, o el peor de los casos tengo mi aplicación terminada y me piden un “pequeñito” ajuste/cambio que me afecta gran parte de mi proceso.

Pues bien!, para esto existen herramientas automatizadas ( para los que no sabían), anteriormente utilizada selenium para mis ciclos de prueba, pero me di a la tarea de investigar alguna otra herramienta o plugin para mi navegador FireFox y me encontré con iMACROS para firefox, aunque tiene varios años de haber sido liberado me di a la tarea de probarlo.

iMacros es una herramienta automatizada que le permite grabar y reproducir aquellas tareas repetitivas que usted realiza constantemente en el navegador, como por ejemplo llenar formularios, realizar procesos de login/autenticación. Además que contiene un librería de ejemplos que le pueden guiar para probar su proyecto.

En conclusión me fue de gran utilidad y les comparto el link de cómo usarlo.

Buena Suerte!

 

Script para habilitar un intervalo de Fechas para sistema de Reserva de Citas.

Hola!, comparto el siguiente script de un pequeño algoritmo que puede ser útil para su sistema de citas. Lo que hace en si, es crear un intervalo de fechas de hoy + x cantidad de días disponibles para que el usuario ( cliente) pueda selecciona el día, ahora lo interesante de este script es que puedes realizar bloqueos por

Mes ( puedes bloquear un mes completo)
Dia especifico recurrente ( esto es como por ejemplo que no este disponible un dia determinado de la semana, Ej: Domingo, Lunes.
Un Fecha en especifico ( Por motivos de un feriado, o bien alguna actividad especial la fecha no debe habilitarse al usuario/cliente)

Recuerda que esto son scripts modulo muy sencillos “core” que deben trabajar en forma conjunto con otros, por ejemplo el otro script del intervalo de horas que publiqué anteriormente.

a continuación el código:

<?php
date_default_timezone_set('America/Costa_Rica');
function consulta_mes($mes){
	switch($mes){
		case '01':{ $mes_letra = 'Enero'; return $mes_letra; break;}
		case '02':{ $mes_letra = 'Febrero'; return $mes_letra; break;}
		case '03':{ $mes_letra = 'Marzo'; return $mes_letra; break;}
		case '04':{ $mes_letra = 'Abril'; return $mes_letra; break;}
		case '05':{ $mes_letra = 'Mayo'; return $mes_letra; break;}
		case '06':{ $mes_letra = 'Junio'; return $mes_letra; break;}
		case '07':{ $mes_letra = 'Julio'; return $mes_letra; break;}
		case '08':{ $mes_letra = 'Agosto'; return $mes_letra; break;}
		case '09':{ $mes_letra = 'Septiembre'; return $mes_letra; break;}
		case '10':{ $mes_letra = 'Octubre'; return $mes_letra; break;}
		case '11':{ $mes_letra = 'Noviembre'; return $mes_letra; break;}
		case '12':{ $mes_letra = 'Diciembre'; return $mes_letra; break;}
	}
}

function consulta_dia($dia){
	switch($dia){
		case 0:{ $dia_letra = 'Domingo'; return $dia_letra; break;}
		case 1:{ $dia_letra = 'Lunes'; return $dia_letra; break;}
		case 2:{ $dia_letra = 'Martes'; return $dia_letra; break;}
		case 3:{ $dia_letra = 'Miércoles'; return $dia_letra; break;}
		case 4:{ $dia_letra = 'Jueves'; return $dia_letra; break;}
		case 5:{ $dia_letra = 'Viernes'; return $dia_letra; break;}
		case 6:{ $dia_letra = 'Sábado'; return $dia_letra; break;}
	}
 }


# Para indicar el bloqueo de algun mes en especifico colocar el valor
# '01' para Enero, '02' para Febrero, etc.
# $a_meses_bloqueados = array('01','02','03'); Bloquea Enero, Febrero y Marzo
$a_meses_bloqueados = array('');


################################# 	0 = Domingo Bloquedo
# Bloqueo para dias Especificos	#	1 = Lunes	Bloquedo
# Formato date("w")			 	# 	2 = Martes	Bloquedo
#$a_dias_bloqueados=array('0');	#
							 	# 	3 = Miercoles Bloquedo
			 					# 	4 = Jueves	Bloquedo
							 	# 	5 = Viernes	Bloquedo
								# 	6 = Sabado	Bloquedo
$a_dias_bloqueados=array();
###########################################################


# Especificar una fecha especifica que debe ser bloqueada.
# $fechas_bloqueadas = array('2015-03-31');
$fechas_bloqueadas = array('');



# Fecha de Inicio,equivale al dia de hoy + 1 ( mañana) 
$int_dias_ini	= date('Y-m-d',mktime(0,0,0,date('m'),date('d')+1,date('Y')));

# Fecha de Fin del ciclo,equivale al dia de hoy + 25 dias proximos
$int_dias_fin	= date('Y-m-d',mktime(0,0,0,date('m'),date('d')+90,date('Y')));


while(strtotime($int_dias_ini)<=strtotime($int_dias_fin)) {

	#echo $int_dias_ini ." Formato Legible:";
	
	$dia_int =  date("w", strtotime($int_dias_ini));# Brinda el dia  0 = Domingos hasta 6=Sabados. Utilizado para los dias dias_bloqueados
	$mes_int =  date("m", strtotime($int_dias_ini));# Brinda el Mes en un rango de posicion del 01 al 12.
	$dia_actual =  date("d", strtotime($int_dias_ini));# Brinda el Mes en un rango de posicion del 01 al 12.	


	# Verifica que el mes , no este en el conjunto de meses bloqueados.
	if (!in_array($mes_int,$a_meses_bloqueados)){ 	
	
		# Verifica que el dia , no este en el conjunto de dias especificos bloqueados.
		if (!in_array($dia_int,$a_dias_bloqueados)){
			
			# Verifica que la fecha indicada no este en el conjunto de fechas ESPECIFICAS DE BLOQUEO
			if (!in_array($int_dias_ini,$fechas_bloqueadas)){
			
				echo "" . consulta_dia($dia_int) ." ". $dia_actual ."-". consulta_mes($mes_int)."";
			
			}
			
		} 

	}
	## Incrementa el contador de STRTOTIME en un dia.
	$int_dias_ini = date("Y-m-d", strtotime( "$int_dias_ini + 1 DAY")) ;
	
}//while(strtotime($inicio)<=strtotime($fin)) {

exit();?>

Suerte!.

Script para habilitar un intervalo de horas con minutos para tu sistema de Reserva de Citas.

Les comparto un script básico que tuve que desarrollar para un módulo de citas de un proyecto “x”. La idea que tuve fue crear un pequeño núcleo que fuera reutilizable para otros módulos y/o componentes donde se requiera un mecanismo de horarios, bloqueo de horas, intervalos en minutos con respecto a las citas que los usuarios pueden reservar.

# Domingos
# Feriados.
# Cupos por Horario.
# Horarios y 
# Horarios con BLOQUEO.
  
/* __________  _   ____________________  ______  ___   ______________  _   __
  / ____/ __ \/ | / / ____/  _/ ____/ / / / __ \/   | / ____/  _/ __ \/ | / /
 / /   / / / /  |/ / /_   / // / __/ / / / /_/ / /| |/ /    / // / / /  |/ / 
/ /___/ /_/ / /|  / __/ _/ // /_/ / /_/ / _, _/ ___ / /____/ // /_/ / /|  /  
\____/\____/_/ |_/_/   /___/\____/\____/_/ |_/_/  |_\____/___/\____/_/ |_/   
*/
 define("MINUTOS",60);
 $h_apertura = 7;  	# 7 AM.
 $h_cierre   = 17; 	# 5 PM - 1hrs. Se maneja en 24hrs
 
 # Si exiten Horas con Bloqueos especificos como Horarios de Almuerzo u otras actividades se llena el siguiente arreglo.
 $bloqueos 	 = array("05:00","05:15","05:30","05:45");

 $intervalo_citas = 4; 	# Los intervalos pueden ser:
 					# 1 = Cada Hora.
					# 2 = Cada 30 minutos 
					# 4 = Cada 15 Minutos
					# 5 = Cada 12 Minutos
					# 6 = Cada 10 minutos
					# 10 = Cada 6 minutos					
					# 12 = Cada 5 minutos										
					# 20 = Cada 3 minutos

	
	

 # Estructura JSON de Respuesta
 $a_datos = array("horas_disponibles"=>array()); // Para Estructura JSON.

					


 // Confecciona un set de horarios con el formato 07:00,07:15,07:30,07:45 ...
 $set_horarios = array();
 # Mantiene la posicion del arreglo de horarios.
 $indice = 0;
 
 while ($h_apertura <= $h_cierre){
	 
	 $inter_minutos = MINUTOS / $intervalo_citas;
	 $i = 0;
	 
	 while ($i < MINUTOS){
		 
		# Estructura JSON de Respuesta
		 $a = array();// Para Estructura JSON.


		 $set_horarios[$indice]['horario'] 			= date('H:i',mktime(date($h_apertura),date($i),date('s'),date('m'),date('d'),date('Y')));
		 $set_horarios[$indice]['horario_etiqueta'] = date('h:i A',mktime(date($h_apertura),date($i),date('s'),date('m'),date('d'),date('Y')));
									  

		 # Si existen horas especificas con bloqueos.
		 # se revisa para que ese horario no sea agregado en el nuevo arreglo de horas.
		 if (!in_array($set_horarios[$indice]['horario'],$bloqueos)){
			 	
				 //unset($set_horarios[$indice]);

				 # Validar el tema de los CUPOS para ese horario.
				 # Se debe validar contra base de datos cuantas citas hay para la fecha seleccionada y Hora seleccionada.
				 # Si la cantidad retornada por el SQL es igual al tope/limite de cupos el horario se debe deshabilitar.
				 
				 // Seudocodigo.
				 // $SQL = debes realizar la consulta a la base con fecha y hora y verificar cuantos registros tiene.
				 // if (cantidad_de_citas = cupo_permitido){
						// unset($set_horarios[$indice]);
		
				 // }
				 
		
				# Estructura JSON de Respuesta
				$a['hora_value'] = $set_horarios[$indice]['horario'];
				$a['hora_label'] = $set_horarios[$indice]['horario_etiqueta'];
				$a_datos["horas_disponibles"][] = $a;	
				# Estructura JSON de Respuesta
				 
				 # Incrementa la posicion del arreglo de horarios
				 $indice++; 		
			  
		 }//if (!in_array($set_horarios[$indice]['horario'],$bloqueos))


		 
		 # Incrementa el contador de Minutos
		 $i = $i + $inter_minutos;	
	 }
	 # Incrementa el contador de Horas
 	 $h_apertura++;	
 }





$a_datos['error']				= "200";
$a_datos['msg_error']			= "OK";
header("Content-type: application/json; charset=utf-8");
echo json_encode($a_datos);	
exit();

Cómo construir un archivo de MS-EXCEL con PHP

Comparto un código desarrollado en PHP que es muy útil en aquellos escenarios donde los programadores deben construir reportes en archivos de EXCEL, la librería utilizada es PHPExcel que deben descargar y subir la librería como parte de su proyecto.

Este código suele ser muy provechoso cuando la cantidad de información que debes sacar de la base de datos es mucha, de manera que dejas la escritura del lado del servidor y luego por una petición o link realizas la descarga del archivo construido.

<?php
# Le decimos a nuestro script que no tenga límite de memoria.
ini_set("memory_limit",-1); 

// Habilitamos la directiva de errores, recordar que cuando esta nuestro código listo como buena
// práctica es comentar la siguiente instrucción.
error_reporting(E_ALL & ~E_WARNING);
# -------------------------------

/** PHPExcel */
// Incluimos la librería de PHPExcel
include 'PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
// Le decimos que vamos a trabajar con la versión 2007 o mayor.
// También reconoce archivos .xlsx
include 'PHPExcel/Writer/Excel2007.php';


// Creamos la instancia de la clase de PHPExcel
$objPHPExcel = new PHPExcel();

// Configuramos los valores de las propiedades del archivos
// Esta información se visualiza cuando le das clic derecho a su archivo en el tab de properties/propiedades de
// la venta de Windows.
$objPHPExcel->getProperties()->setCreator("NOMBRE DEL CREADOR O PROPIEDARIO");
$objPHPExcel->getProperties()->setLastModifiedBy("Sistema Web");
$objPHPExcel->getProperties()->setTitle("Reporte de Mensajes");
$objPHPExcel->getProperties()->setSubject("TITULO DEL ARRCHIVO de EXCEL");
$objPHPExcel->getProperties()->setDescription("Puedes colocar aqui una breve descripcion del contenido del documento");
 

$rsql= mysql_query("Escribe aqui la sentencia SQL") or die(mysql_error());	
$nrs = mysql_num_rows($rsql);

// Verificamos que nuestro SQL obtenga resultados
if  ($nrs > 0 ){				

	// Indicamos un nombre para nuestro archivo 
	$filename = "Mi_Reporte.xlsx";
	
	
	// Escribimos en la primera linea de nuestro archivo EXCEL lo titulos.
	$objPHPExcel->setActiveSheetIndex(0);
	$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'NOMBRE_CLIENTE');
	$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'TELEFONO');
	$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'EMAIL');
	$objPHPExcel->getActiveSheet()->SetCellValue('D1', 'EDAD');	
	$objPHPExcel->getActiveSheet()->SetCellValue('E1', 'SALARIO');

	// Le decimos a nuestra primera fila que va a tener color desde la columna A1 hasta la E1.
	$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->
														getFill()->
														setFillType(PHPExcel_Style_Fill::FILL_SOLID)->
														getStartColor()->
														setARGB('FFE8E5E5'); // Color de nuestra fila encabezado/titulos
		
	// Inicializamos la variable $i que es la segunda linea del Excel con el valor de 2, porque es 
	// a partir de esa linea de nuestro archivo de EXCEL que contiene el contenido de nuestra base de datos.
	$i = 2; 
	
	// empezamos a recorrer nuestro recordset.
	while ($rs = mysql_fetch_array($rsql)){	

		// Le decimos al Excel que inicie el llenado de cada fila por medio de la variable {$i}
		// que es nuestro contador del ciclo.
		$objPHPExcel->getActiveSheet()->SetCellValue("A{$i}", $rs['noombre_cliente']);
		$objPHPExcel->getActiveSheet()->SetCellValue("B{$i}", $rs['telefono']);
		$objPHPExcel->getActiveSheet()->SetCellValue("C{$i}", $rs['email']);
		$objPHPExcel->getActiveSheet()->SetCellValue("D{$i}", $rs['edad']);	
		$objPHPExcel->getActiveSheet()->SetCellValue("E{$i}", $rs['salario']);	
		$i++;		
		
    }// fin de while
		
	// Le colocamos el título a nuestra hoja electrónica.
	$objPHPExcel->getActiveSheet()->setTitle('Reporte Mensajes');		



	// Le decimos a nuestro objeto de $objWriter que escriba el contenido generado.
	$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
	
	// Le decimos que guarde el archivo en la ruta llamada "cache" en nuestro servidor.
	// Recuerde que el directorio/carpeta debe tener permisos de escritura por el usuario apache.
	$objWriter->save('cache/'.$filename);	
					
}// if  ($nrs > 0 ){
		
?>

Por lo general yo ejecuto el código anterior por medio de un llamado asincrónica con jquery, y cuando el resultado es satisfactorio devuelvo la respuesta en una estructura JSON, donde cierro mi ventana de “esperando”, previa ventana que habilite cuando solicité el reporte, y luego habilito la descarga por medio de un link.

Ya esto último queda a creatividad del programador como lo desee implementar.

Buena Suerte!

Gerente de datos – Nuevo puesto tecnológico

Durante mi carrera profesional y laboral he podido percibir como los negocios deben adaptarse en función de la demanda comercial, abrir nuevos puestos, plazas y nuevas funciones ó bien adaptar procesos en general para cubrir eficazmente las necesidades de nuestros clientes. Hace algunos años desde que las redes sociales tuvieron el impulso que hoy por hoy mueve masas, conllevó a crear el “Community Manager” un puesto que las compañías que promueven sus productos, brindan servicio al cliente y lo quieren hacer bien!, lo ejecutan por medio de este colaborador, área ó departamento. Las tendencias dicen que para el 2017, 2018 existirá un puesto más, llamado “Gerente de Datos” les comparto la nota: http://www.elfinancierocr.com/m/tecnologia/Big_Data-CIO-CDO-Gartner_0_676732330.html ( interesante!)

Sobre BlueStacks app Player

Hace algunos días tenia la tarea de revisar el funcionamiento de una aplicación “en desarrollo” en Android, la revisión era sencilla pues era una revisión de inspección, tambien le podriamos llamar una “prueba de caja negra” para ver el comportamiento de la aplicación y si cumplía con algunos requerimientos establecidos.

El app contaba con ciertas características puntuales, entre ellas probar el funcionamiento del Push Notification. Cuando lo probaba con mi emulador AVD ( Android Virtual Device) el push no funcionaba, el detalle para este tipo de ejercicios o pruebas es que los emuladores no tienen id-unico de dispositivo, o conocido como “ANDROID_ID”, y tampoco contaba con un teléfono a mano para instalar el .apk para probarlo. Luego a los días el desarrollador que estaba a cargo de la aplicación me comunico que podía probar el app con BlueStacks app Player, que viene siendo un emulador de android para tu PC, lo descargue, lo instale, e incluso reconoció algunos .apk que tenia en mi máquina y también los pude probar.

Muy buena Herramienta para este tipo de cosas, Ah! y tambien puedes jugar tus juegos de Android en tu PC. :)

Recibir contenido Encodes data with MIME base64 con nusoap y PHP

Hola!, aquí les dejo un ejemplo de un WebService con nusoap que recibe el contenido de un archivo en  base-64 encoded (enviar archivos adjuntos) al server/webservice, ojo! que cuando consumes el WebService lo que le vas a enviar es un string codificado, esto para que tu WebService “descodifique” y pueda construir el archivo con el contenido enviado y almacene tu archivo adjunto.

Del lado del cliente seria ( Consumo del WebService):
url:http://www.mauricioalpizar.com/ejemplos/nusoap/ws-client-file.php

<?php
require_once('lib/nusoap.php');

# construyo un cliente nusoap_client
$client = new nusoap_client('http://www.mauricioalpizar.com/ejemplos/nusoap/getfile1.php?wsdl');


# el servicio se llama recibir_contenido
# y recibe dos variables/parametros
# nombre_arhivo como quiero que se llame en el server.
# el string en base64

$result = $client->call('recibir_contenido', array( 'nombre_archivo' => 'archivo.txt',
													'contenido' => 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw=='));

# imprimo el resultado del servicio
print_r($result);

?>

Le mando como parametros el nombre del archivo (nombre_archivo) y el String (contenido) en base64encode previamente codificado, esto quiere decir que antes de consumir el WebService de alguna manera debes leer el archivo y codificar el contenido para poder enviarlo.

<?php
$str = 'This is an encoded string';
echo base64_encode($str);
?>

Se supone que $str debería ser el contenido de tu archivo previamente leído ejemplo con fread…. antes de consumir el WebService.

Ahora, del Lado del Server la programación con nusoap seria así, mi arhivo se llama “getfile1.php”:

<?php
	// Pull in the NuSOAP code
	require_once('lib/nusoap.php');
	
	// Create the server instance
	$server = new soap_server;
	
	// Initialize WSDL
	$server->configureWSDL('Mi WebService Receive Base64_encode', 'urn:getfile1');


	$server->register(
					 'recibir_contenido',       // method name
					 array( 'nombre_archivo' => 'xsd:string',
					 	  	'contenido' => 'xsd:string'),  // input parameters
					 array('mensaje' => 'xsd:string'), // output parameters
					 'urn:getfile1',      // namespace
					 'urn:getfile1/getFile',    // SOAPAction
					 'rpc',        // style
					 'encoded'       // use
	);	
	function recibir_contenido ($nombre_archivo,$contenido){

		//$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
		$data =  base64_decode($contenido);
		file_put_contents($nombre_archivo, $data);
		
		$msg = "Archivo Creado. <a href='{$nombre_archivo}'>Click</a>"; 
		return $msg;

		
	}//
	
	



// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : 
'';
$server->service($HTTP_RAW_POST_DATA);

?>

Cuando consumes el WS, este debería haber creado un archivo llamado “archivo.php” con el contenido “This is an encoded string”

Url de consumo del WS: http://www.mauricioalpizar.com/ejemplos/nusoap/ws-client-file.php

Url del WebService: http://www.mauricioalpizar.com/ejemplos/nusoap/getfile1.php