Sobre PHP

Códigos y Scripts de php

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

Ejemplo de como Consumir un Web Service utilizando NuSOAP y PHP ( Parte II)

Gracias a un comentario recibido en mi blog con respecto al ejemplo anterior (http://www.mauricioalpizar.com/ejemplo-de-como-programar-un-web-service-utilizando-nusoap-y-php/) de como programar un WebService del lado del servidor, no puse el ejemplo de como consumirlo.

Aquí les dejo el ejemplo de como consumir el WebService utilizando NuSOAP y PHP

Copias el siguiente código y lo colocas en un archivo .php, recuerda el include de la libreria nusoap.php

<pre>
<?php

	require_once('lib/nusoap.php');
	
	$cliente = new nusoap_client('http://www.mauricioalpizar.com/ejemplos/nusoap/mi_ws1.php');
	//print_r($cliente);
	
	$datos_persona_entrada = array( "datos_persona_entrada" => array(	
																	'nombre'  	=> "Mauricio A.",
																	'email'		=> "ealpizar@ticosoftweb.com",
																	'telefono'	=> "8700-5455",
																	'ano_nac'	=> 1980)
																	);

	$resultado = $cliente->call('calculo_edad',$datos_persona_entrada);
	
	print_r($resultado);
	
?>
</pre>

El resultado deberia ser algo asi:

Array
(
    [mensaje] => Hola, Mauricio A.. Hemos procesado la siguiente información ealpizar@ticosoftweb.com, telefono8700-5455 y su Edad actual es: 34.
)

Url del Ejemplo: http://www.mauricioalpizar.com/ejemplos/nusoap/consumo-ws.php

Espero les ayude!.

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

 

Ejemplo de phpmailer

PHPMailer es una clase elaborada en PHP que proporciona un conjunto de funciones para enviar correo electrónico. Las dos características principales es enviar correo electrónico en formato HTML y mensajes de correo electrónico con archivos adjuntos, entre otras funcionalidades adicionales. PHPMailer soporta casi todas posibilidades para enviar correo electrónico: mail (), Sendmail, qmail y directa con el servidor SMTP, también soporta el envio de correo autenticado con una configuracion básica en sus atributos  y/o métodos que proporciona la clase.Usted puede utilizar alguna de las funciones de correo electrónico basado en SMTP, múltiples recepients vía para, CC, BCC, etc

En resumen: PHPMailer es una forma eficiente para enviar e-mail dentro de PHP.

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp1.example.com";
$mail->SMTPAuth = true;
$mail->Username = 'usuario-smtp';
$mail->Password = 'clave-usuario-smtp';

$mail->From="correo-origen@midominio.com";
$mail->FromName="nombre del Origen";
$mail->Sender="correo-origen@midominio.com";
$mail->AddReplyTo("replies@midominio.com", "Responder a....");

$mail->AddAddress("email@example.com"); ### Destinatario....
$mail->AddAddress("email2@example.com"); ### Mas Destinatarios....
$mail->AddAddress("email3@example.com"); ### Mas Destinatarios....

$mail->Subject = "Titulo del Correo";

$mail->IsHTML(true);
$mail->AddEmbeddedImage('logo.jpg', 'logoimg', 'logo.jpg'); // Adjuntar imagenes, recuerda colocar la ruta absoluta de la imagen donde esta almacenada en su servidor.
$mail->Body = "<h1>CONTENIDO HTML DE MI CORREO</h1>
    <p>Esto es una imagen: <img src=\"cid:logoimg\" /></p>";
$mail->AltBody="CONTENIDO ALTERNATIVO EN Texto Plano";

if(!$mail->Send()){
   echo "Error sending: " . $mail->ErrorInfo;;
}else{
   echo "Letter is sent";
}
?>