El envío de emails es una de las funciones principales de cualquier sistema en internet, ya sea un sitio de usuarios, carros de compras, facturación, membresías etc.
Podemos enviar emails utilizando PHP de dos formas principalmente. Utilizando el servidor donde se ejecuta nuestro sitio, o bien utilizando un servidor externo SMTP.
La función “mail()” de php nos permite enviar emails tal como lo hacemos con nuestra aplicación de escritorio o web, como puede ser Outlook, Hotmail, Gmail y otras.
La sintaxis básica de a función es la siguiente
mail($para, $asunto, $mensaje, $header);
Destinatario: es el primer parámetro de la función y debe ser una dirección de correo electrónico. Puedes especificar más de uno separados por comas, ejemplo: email@dominio.com, email2@dominio.com, email2@dominio.com
Asunto, segundo parámetro.
Mensaje: tercer parámetro, es en si lo que leerá el destinatario de tu email, puede ser texto plano o bien texto enriquecido HTML.
Header, este es un parámetro importante, es necesario que este parámetro este bien configurado, muchas veces, de no estarlo nuestros emails serán filtradas y enviados directamente a la bandeja de spam de nuestros usuarios.
Teniendo estos conceptos claro, podemos realizar nuestra prueba utilizando el siguiente código.
$nombre = $_POST['nombre']; $empresa = $_POST['empresa']; $envia_desde_nombre = “”; $envia_desde_email= “”; $mensaje_tipo= “text/html”; //o puedes usar text/plain $header ="MIME-Version: 1.0\n"; $header .= "Content-type: ".$mensaje_tipo."; charset=iso-8859-1\n"; $header .= "From: ".$envia_desde_nombre." <".$envia_desde_email.">\n"; $header .= "Organization: “.$empresa.” \n"; $header .=" X-Mailer: PHP/". phpversion()."\n"; $mensaje = "Este mensaje fue enviado por " . $nombre . ", de la empresa " . $empresa . " \r\n"; $mensaje .= "Su e-mail es: " . $mail . " \r\n"; $mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n"; $mensaje .= "Enviado el " . date('d/m/Y', time()); $para = 'info@tusitio.com'; $asunto = 'Contacto desde Tu sitio web'; mail($para, $asunto, $mensaje, $header);
El procedimiento es básicamente el mismo. Solo tenemos que tener en cuenta que el tipo este configurado como “text/html”.
$mensaje = "<h1>Probando con html</h1> <p>esta es una prueba de texto con html</p>";
Incluso podemos enviar una página completa HTML, con los tags de body, header etc. Esto ayuda a que tus emails se visualicen correctamente en la bandeja de entrada del que recibe el email.
$mensaje = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <h1>Probando con html</h1> <p>esta es una prueba de texto con html</p> </body> </html>';
Utilizaremos la librería “phpmailer” la cual la podemos bajar de sourceforge.net . Esta librería para el envio de correos electrónicos utilizando SMTP con php ha sido probada y es muy conocida en la comunidad de programadores.
Podemos enviar emails ajustando algunos parámetros, como por ejemplo, servidor de salida, puerto, usuario, contraseña etc.
En nuestra PHP de ejemplo agregamos lo siguiente:
include("phpmailer/class.phpmailer.php"); $mail = new phpmailer(); //Definimos las propiedades y llamamos a los métodos //correspondientes del objeto mail //este ejemplo va a estar en el subdirectorio includes $mail->PluginDir = "/phpmailer/"; //Con la propiedad Mailer le indicamos que vamos a usar un //servidor smtp $mail->Mailer = "smtp"; //Asignamos a Host el nombre de nuestro servidor smtp $mail->Host = "ssl://smtp.gmail.com"; $mail->Port =465; //Le indicamos que el servidor smtp requiere autenticación $mail->SMTPAuth = true; $mail->IsHTML(true); //Le decimos cual es nuestro nombre de usuario y password $mail->Username = "usuario smtp" ; $mail->Password = "contraseña"; //Indicamos cual es nuestra dirección de correo y el nombre que //queremos que vea el usuario que lee nuestro correo $mail->From = "email que ve el usuario"; $mail->FromName = "Nombre de envio"; //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar //una cuenta gratuita, por tanto lo pongo a 30 $mail->Timeout=30; //Indicamos cual es la dirección de destino del correo $email_to_sent = "email donde va dirigido el email"; $mail->AddAddress("$email_to_sent"); //Asignamos asunto y cuerpo del mensaje //El cuerpo del mensaje lo ponemos en formato html, haciendo //que se vea en negrita $mail->Subject = "texto subject aqui"; $mail->Body = "aca asignamos el texto, el mensaje que ve la persona a la que enviamos el email"; //Definimos AltBody por si el destinatario del correo no admite email con formato html $mail->AltBody = ""; //se envia el mensaje, si no ha habido problemas //la variable $exito tendra el valor true $exito = $mail->Send(); $intentos=1; while ((!$exito) && ($intentos < 5)) { sleep(5); //echo $mail->ErrorInfo; $exito = $mail->Send(); $intentos=$intentos+1; } if(!$exito) { echo "Problema enviando email ".$valor; echo "<br/>".$mail->ErrorInfo; } else { echo "Email enviado!"; }
Espero que este tutorial de como enviar emails con PHP haya sido útil.
Popularidad: 25%
Mediante este tutorial pretendemos explicar, que es, como se usa y para qué sirve una de las librerías para Javascript más populares.
jQuery nos da la posibilidad de realizar tareas complejas en JavaScript de una manera muy sencilla. A través de esta maravillosa Librería de JavaScript podemos ocular, mostrar, arrastrar y hacer prácticamente lo que deseemos con los elementos DOM de nuestra página web.
También, otra de las características fundamentales es que nos permite manipular CSS como así también utilizar AJAX de una manera sencilla.
jQuery es considerado un Framework de Javascript, o ambiente de desarrollo. Lo que no es más que un conjunto de utilidades las cuales no necesitan ser programadas, de hecho ya fueron programadas, probadas y podemos utilizarlas de una manera muy simplificada.
En otras palabras, podremos lograr los mismos resultados, en menos tiempo sin necesidad de programar una funcionalidad completamente.
La palabra Framework se podría traducir al español como “Marco de desarrollo”. En nuestro caso, el marco seria en Javascript. Por lo tanto, se podría decir que jQuery es un marco de desarrollo el cual contiene funcionalidades, librerías pre-desarrolladas.
jQuery nos permite agregar efectos y funcionalidades complejas a nuestro sitio web, como por ejemplo: galerías de fotos dinámicas y elegantes, validación de formularios, calendarios, hacer aparecer y desaparecer elementos en nuestra página y muchas otras poderosas opciones. Otra ventaja sin duda es la posibilidad que nos brinda de trabajar con AJAX, sin preocuparnos de los detalles complejos de la programación.
Muchas veces nos planteamos si es mejor utilizar cosas ya hechas o desarrollarlas por nuestra propia cuanta. Bueno… este es totalmente relativo dado que cuando programamos, muchos de los lenguajes utilizados no son de bajo nivel, es decir estamos utilizando funciones pre-desarrolladas y simplificadas.
Con jQuery ocurre lo mismo, por ejemplo: el detectar que tipo de explorador utiliza un visitante tendríamos que escribir una cuentas líneas de código en Javascript. Dado que jQuery es totalmente compactible con la mayoría de los exploradores, Internet Explorer, Firefox, Opera, Apple Safari etc. En definitiva, nosotros no necesitamos preocuparnos por los asuntos de compactibilidad, jQuery lo hace automáticamente.
El soporte es otra de las razones por la cual la utilización de jQuery en nuestros sitios es totalmente recomendada. Esta fantástica librería ha tenido una aceptación muy grande por los programadores, lo que ha generado que muchos desarrolladores se dediquen a la creación de plugins o complementos que utilizan jQuery. Esto nos permite agregar galerías dinámicas, calendarios, sistemas de votación, formularios dinámicos y muchas otras cosas tan solo agregando los plugins.
Otra razón, que es muy importante es que es gratis, y el código fuente puede ser modificada y adaptado a nuestras necesidades siguiendo las políticas de las licencias (MIT y GPL2)
Un plugin es un sub-sistema o componente que se “agrega” a jQuery para que podamos utilizarla. Por ejemplo, jQuery no incluye en su código fuente una funcionalidad para “crear” un calendario, pero, podemos agregarle un calendario ya desarrollado el cual necesita jQuery para funcionar.
Llevando la explicación a un plano más cotidiano. La computadora tiene un sistema operativo, habitualmente es Windows, pero, para chatear con tus amigos y familiares utilizas Windows Live Messenger. En este ejemplo esta aplicación para chatear sería un “plugin” para el sistema operativo de Windows.
¿Confundido?
Si la explicación no es muy clara, para comprender lo que es un plugin piensa que es un complemento de jQuery, es como una nueva funcionalidad que le agregamos a todo el conjunto que ya vienen incorporadas en el código fuente básico.
Para hacer uso de esta fabulosa Librería tienes que bajarla directamente desde el sitio oficial. Haz clic aquí para bajar jQuery.
Conceptos Básicos:
En tu página HTML agrega lo siguiente dentro del tag HEAD.
<script type="text/javascript" src="jquery.js"></script>
Podemos adjuntar la librería en dos modos, el reducido que es ideal para agilizar y acelerar la carga de las páginas o la versión extendida, la cual tiene más tamaño y es ideal para los desarrolladores.
jQuery lo hace más fácil, para demostrarlo vamos a tomar como ejemplo una de las acciones más utilizadas cuando trabajamos con Javascript, que es la de seleccionar un elemento con “getElementById()”
El seleccionar un elemento con esta función requiere que el elemento tenga el atributo “id”
JavaScript
Seleccionar un elemento con Javascript de forma tradicional se hace de la siguiente manera:
// Seleccionar un elemento document.getElementById("miElemento"); ///
jQuery
Mediante la utilización de la función “$()” de jQuery podemos seleccionar cualquier elemento de la página.
// Seleccionar un elemento $("#miParrafo");
Es fácil darse cuenta a simple vista cual es más sencilla. Desde el punto de vista de la longitud de la sentencia, en jQuery se requiere mucho menos código para lograr lo mismo.
Este evento se utiliza para realizar tareas o bien modificar el contenido de tu página una vez que se haya cargado la página por completo o también antes que se termine la carga.
JavaScript
window.onload = function() { ... }
jQuery
$(document).ready( function() { ... } );
La gran ventaja de utilizar jQuery es que se puede manipular todo el contenido HTML antes que se cargue totalmente la página.
Esta posibilidad nos permite acelerar nuestras páginas aun cuando no se haya cargado todo el árbol DOM. Es muy útil cuando trabajamos con galerías de fotos. jQuery puede maniuplar imágenes antes que se cargue toda la página en cambio JavaScript espera a que se carguen las imágenes.
Una de las funciones más útiles y sorprendentemente fáciles de jQuery son los selectores, la cual nos permite olvidarnos totalmente de “document.getElementById()”.
Es muy común para los programadores tener que saber por ejemplo cuales son los checkbox seleccionados de un formulario para validar una subscripción
En JavaScript nos tomaría varias líneas de código obtener todos los checkbox seleccionados, afortunadamente con jQuery podemos hacerlo con una sola línea de código.
// Seleccionar todos los checkbox que han sido seleccionados $("input[@type=checkbox][@checked]"); ///
Espero que el tutorial les sea útil.
Pueden bajarse la versión estable desde el sitio oficial de jQuery en http://jquery.com/
Saludos
Popularidad: 33%
A través de este tutorial veremos cómo podemos crear un Carro de Compra para permitir a nuestros clientes comprar uno o múltiples productos en nuestro sitio.
La creación del sistema la haremos utilizando PHP y MySQL. Necesitaremos la base de datos para almacenar la información de los productos, los datos de la compra como así también información del cliente que realizo la compra.
Antes de comenzar a programar, necesitamos hacer una estudio o análisis del sistema para tener claro con cuantos modules contara nuestro carro de compras online. Es muy cierto que como programadores muchas veces queremos ir directamente a la codificación, pero es muy importante que adoptemos una metodología a la hora de comenzar a construir nuestros sistemas.
Habitualmente un carrito de compras se programa teniendo en cuenta los módulos: productos, clientes, categorías y compras.
Como ya hemos visto en el tutorial de Programación Orientada a Objetos en PHP, podemos decir que los modules se pueden interpretar como clases, lo que implica que vamos a tener cuatro clases primarias: Producto, Cliente, Categoria y Venta.
Modulo Productos:
Este módulo es el encargado de controla todo lo relacionado a un producto, usualmente un producto tienen un nombre, una descripción, un costo y está asociado a una categoría.
Modulo Clientes:
Por definición lógica una compra está asociada a un cliente, por lo tanto vamos a necesitar una clase que se encargue de administrar a los clientes, sus datos y sus compras.
Modulo Ventas:
La venta es el resultado final de todo el proceso y está relacionada a un cliente, como así también a uno o varios artículos.
Módulo Categorías:
Las categorías son una forma de clasificar y ordenar los productos en nuestro sitio. Por ejemplo: en un sitio de ventas de electrodomésticos un monitor estaría asociado a la categoría “Computación”, un televisor estaría en “electrodomésticos”.
Para nuestro tutorial usaremos como ejemplo una librería, para lo cual podemos decir que los productos serían los libros y las categorías los géneros: por ejemplo: terror, historia, drama etc.
En la Programación Orientada a Objetos la estructura de la base de datos puede ser deducida mayoritariamente del diagrama de clases o lo que se conoce como UML. Por lo tanto, basándonos en las clases que tendrá el sistema podemos decir que tendremos 5 tablas primarias en nuestro sistema.
Las tablas de nuestro carrito de compra serán las siguientes: Productos, Categorias, Ventas y Clientes.
Para el desarrollo de nuestro carrito de compras utilizaremos variables de sesión las cuales nos permiten almacenar los artículos seleccionas por el cliente a través de todas las paginas mientras este en nuestro sitio.
En una variable de sesión almacenaremos nuestra clase “Cart” la cual tienen los métodos básicos de un carrito de compra, estos son: agregar producto, borrar producto del carrito, obtener total de la compra.
Clase Cart.php
class Cart { var $colProducts; function calcTotal(){ $sTotal=0; for ($i=1; $i <= count($this->colProducts); $i++){ $sTotal=$sTotal + $this->colProducts[$i]->mCost; } $sTotal = number_format($sTotal,2,".",",") ; return $sTotal; } function borrarProduct($linea){ $pos = 0; $colAux; for ($i=1; $i <= count($this->colProducts); $i++){ if ($i != $linea){ $pos++; $colAux[$pos] = $this->colProducts[$i]; } } $this->colProducts = $colAux; } function agregarProduct($unProducto){ $this->colProducts[count($this->colProducts)+1]=$unProducto; } function mostrarProduct($line){ return $this->colProducts[$line]; } }
Como ya hemos visto PHP soporta encapsulamiento, de esta manera la clase Cart tendrá dentro una colección de productos. Lo que se traduce en una colección de objetos “Producto”. De no comprender estos conceptos te recomiendo veas el curso de Programación Orientada a Objetos en PHP. Lo vas a encontrar en la sección cursos.
Clase Producto.php
require("ProductoPersistent.php"); class Producto { var $mPer; var $mIdOrden; var $mId; var $mQty; var $mCost; var $mStatus; function Producto() //constructor { $this->mPer = new ProductoPersistent(); } function guardarProdOrder() //guardar el producto en la tabla de ordenes { return $this->mPer->guardarProdOrder($this); } function darTodosDeCategoria($cod) //me da todos los productos dependiendo de la categoria { return $this->mPer->darTodosDeCategoria($cod); } function darNombreProd($name) //optimiza el nombre del producto { $name = ucwords($name); return $name; } function darUno($cod) //me da una producto con el ID { return $this->mPer->darUno($cod); } }
En la primera línea incluimos la clase “ProductoPersistent” que es la encargada de interactuar con la base de datos, es ahí donde se encontraran todas las sentencias SQL.
Recuerda siempre mantener el orden y la prolijidad en tu código fuente, te va a pasar muchas veces que tenga que reutilizar el código y cuanto más claro este más rápido lo comprenderás.
La metodología recomendada es la llamada en tres capas, UI o interface del usuario, el dominio que sería la capa intermediaria y la capa persistente, la encargada de comunicarse con la base de datos. Pero, para no entreverarnos, prosigamos con el carro de compras.
Clase ProductoPersistent.php:
Esta clase controla todas las sentencias SQL, realiza consultas, actualiza registros y borra. Las tareas básicas de cualquier carrito de compras.
require_once("Persistent.php"); class ProductoPersistent extends Persistent { function guardarProdOrder($unPerm) { $result = ""; $sql = "INSERT INTO orden_detalles(detalle_orden_id , detalle_producto_id , detalle_cant , detalle_precio ) VALUES("; $sql.= "'".$unPerm->mIdOrden."', "; $sql.= "'".$unPerm->mId."', "; $sql.= "'".$unPerm->mQty."', "; $sql.= "'".$unPerm->mCost."') "; $this->setSql($sql); $result = $this->save(); return $result; } function darUno($cod) { $sql = " SELECT pro.*, cat.cat_id , cat.cat_name "; $sql .= " FROM productos pro"; $sql .= " RIGHT JOIN categorias cat ON (cat.cat_id = pro.prod_cat_id)"; $sql .= " WHERE cat.cat_id = pro.prod_cat_id AND pro.id = '$cod'"; //echo $sql; $this->setSql($sql); return $this->obtain(); } function darTodosDeCategoria($cat) { $sql = " SELECT pro.*, cat.cat_id , cat.cat_name "; $sql .= " FROM productos pro"; $sql .= " RIGHT JOIN categorias cat ON (cat.cat_id = pro.prod_cat_id)"; $sql .= " WHERE cat.cat_id = pro.prod_cat_id AND pro.prod_cat_id = '$cat'"; $this->setSql($sql); return $this->obtain(); } }
Clase Orden:
Esta clase es una de las más importantes, pero, en este tutorial solo agregaremos un método, el encargado de crear la orden en la tabla correspondiente.
require("OrdenPersistent.php"); class Orden { var $mPer; var $m_orden_cliente_id; var $m_orden_total; function Orden() //constructor { $this->mPer = new OrdenPersistent(); } function guardar() { return $this->mPer->guardar($this); } }
require_once("Persistent.php"); class OrdenPersistent extends Persistent { function guardar($Obj) { $result = ""; $sql = "INSERT INTO ordenes (orden_cliente_id, orden_total , orden_fecha ) VALUES("; $sql.= "'".$Obj->m_orden_cliente_id."', "; $sql.= "'".$Obj->m_orden_total."', "; $sql.= "'".date("Y-m-d")."') "; $this->setSql($sql); $result = $this->save(); return $result; } }
Una clase secundaria es la que administra las categorías. Solo necesitamos dos métodos, uno para recuperar todas las categorías de la base de datos y otro para recuperar solo una teniendo en cuenta el ID de la misma.
require("CategoriaPersistent.php"); class Categoria { function Categoria() { $this->mPer = new CategoriaPersistent(); } function giveAll($catid) { return $this->mPer->giveAll($catid); } function getOne($cod) { return $this->mPer->getOne($cod); } }
Básicamente, ya tenemos programado lo que será el corazón de nuestro carro de compras en PHP. Ahora solo tenemos que empezar a integrar las clases con la interface gráfica del usuario.
Para comenzar necesitamos una página donde mostrar todos los productos, los cuales podrán ser elegidos para comprar.
Usualmente, una lista de artículos son desplegados en la primera página de un sitio de compras online la cual puede ser filtrada seleccionado criterios que son mostrados en la columna izquierda.
También, cada producto debe tener la opción de “agregar”, la cual, al ser clickeada agrega el producto a la cesta. Una foto en miniatura tiene que ser mostrada también al igual que el precio.
Para la demostración de todo lo que hemos aprendido he creado una demo la cual puede ser vista haciendo clic aquí:
1) Descarga el archivo comprimido aquí.
2) Descomprímelo.
3) Edita el archivo de conexión a la base de datos “db_conection.php” que está en la carpeta “classesfra”
4) Abre el documento “db_estructura.txt” para crear las tablas en tu servidor.
5) Sube todo los archivos a tu servidor.
6) Listo
El carrito de compras de ejemplos esta tan solo eso, un ejemplo. Con el cual se pretenden mostrar las funcionalidades básicas. La intención de este tutorial es darte las herramientas y guiarte para que tú puedas construir tu propio sistema.
Buena suerte amigos.
Popularidad: 59%
Muchas veces nos encontramos en la necesidad de cobrar de forma repetitiva un determinado monto cada determinado periodo.
PayPal nos ofrece una solución muy flexible la cual puede adaptarse prácticamente a cualquier sitio las cual nos permite crear botones de subscripciones y pagos recurrentes.
Si bien puedes generar botones de subscriciones a través de tu cuenta automáticamente, muchas veces vas a necesitar generar el código de la subscripción dinámicamente.
Pueden utilizar pagos recurrentes sitios que manejen: subscriciones, hospedajes de páginas web, ventas de dominios. Es muy útil para administrar membresías también.
Principalmente contar con una cuenta de PayPal y un servidor con PHP.
1) Ingresa a tu cuenta de PayPal.
2) Servicios al comerciante.
3) Suscripciones y pagos periódicos. (Opción en la columna derecha.)
Veras un generador de botones, una vez que hayas especificado, los montos y la periodicidad PayPal te dará un código el cual debes copiar y pegar en tu HTML:
Si estas programando un sistema en el cual los costos y los periodos de las subscripciones no son siempre las mismas, entonces la mejor opción es crear de forma dinámica el botón de PayPal.
$m_email_paypal = "tucuentadepaypal-aca-"; $m_desc_sub = "Pago Recurrente de Prueba";//opcional $m_cod = "DI-123"; //opcional $m_moneda = "USD"; $m_monto= "5.00"; Ejemplo Pago Recurrente Paypal <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input name="cmd" type="hidden" value="_xclick-subscriptions" /> <input name="business" type="hidden" value="<?= $m_email_paypal?>" /> <input name="item_name" type="hidden" value="<?= $m_desc_sub?>" /> <input name="item_number" type="hidden" value="<?= $m_cod ?>" /> <input name="currency_code" type="hidden" value="<?= $m_moneda?>" /> <input name="no_shipping" type="hidden" value="1" /> <input alt="Realice pagos con PayPal: es rápido, sin costo y seguro." name="submit" src="http://www.paypal.com/es_XC/i/btn/btn_subscribe_LG.gif" type="image" /> <input name="no_shipping" type="hidden" value="1" /> <input name="a3" type="hidden" value="<?= $m_monto?>" /> <input name="p3" type="hidden" value="1" /> <input name="t3" type="hidden" value="M" /> <input name="src" type="hidden" value="1" /> <input name="sra" type="hidden" value="1" /> </form>
Los parámetros que definen la periodicidad de los pagos son los siguientes:
•a3: importe que se facturará en cada repetición
•p3: número de períodos de tiempo entre cada repetición
•t3: período de tiempo (D=días, W=semanas, M=meses, Y=años)
Popularidad: 25%
Esto es un problema muy común, si bien es simple de solucionar provoca muchos dolores de cabeza a los usuarios de Facebook.
Cuando intentamos mostrar las fotos de nuestros seguidores en Facebook con la imagen de “Me gusta” en nuestro sitio, muchas veces podemos ver la siguiente imagen.
Lo que se resuelve ingresando a nuestra cuenta de Facebook, volvemos a la página y ahora si vemos las fotos de nuestros fans.
Si queremos que nuestro perfile sea visible sin la necesidad de iniciar sesión en Facebook tenemos que seguir los siguientes pasos:
1) Ingresa a tu cuenta de Facebook.
2) Clic en Editar Página.
3) Gestionar Permisos.
4) En Restricción de edad. Selecciona “cualquiera (personas mayores de 13 años)”
5) Guardar Cambios.
Todo tendría que estar solucionado y tu perfile tiene que ser publico ahora, o que implica que las fotos de tus fans serán públicas y los visitantes no tendrán que estar logueados para verlas.
Popularidad: 31%
En sus inicios, PHP no era un lenguaje de programación Orientado a Objetos o bien OOP que son sus siglas en inglés, con el avance de las tecnologías y con las nuevas versiones PHP fue agregando varias funcionalidades propias de la metodología OOP.
Dividiremos este tutorial en las siguientes secciones, que son las que definen si un lenguaje es orientado a objetos o no:
· Clases y Objetos
· Métodos y atributos
· Herencia de clases
· Constructores y destructores
· Encapsulamiento
A diferencia de la programación tradicional, la programación orientada a objetos se base en clases y objetos.
Una clase contiene atributos o propiedades y métodos que son las funciones. Esto es muy importante tenerlo claro. Método es sinónimo de Función. Atributo es sinónimo de Propiedad.
La Clase sería algo así como un molde y a partir de ese molde se crean objetos.
En PHP definimos una clase de la siguiente manera:
class Cliente { // Aquí va el código de nuestra clase }
Mediante las líneas de código de arriba se define la clase “Cliente” la cual utilizaremos para nuestro tutorial.
Si bien este tutorial no está enfocado a definir los conceptos de la Programación Orientada a Objetos, es bueno aclarar que el nombre de la clase no debe ser en plural, por este motivo nombramos “Cliente” en lugar de “Clientes”.
Los métodos y los atributos se definen “codifican” dentro de la clase. El atributo de una clase es una propiedad.
Atributos:
El orden y la prolijidad en programación son muy importantes. Por lo tanto, comenzaremos analizar nuestra clase de “arriba” hacia “abajo”. Lo primero que se define en una clase son los atributos.
Por ejemplo: en nuestra clase de ejemplo “Cliente” un atributo seria “Nombre”, “Apellido”, “Edad” etc.
Si nuestro ejemplo fuera una clase “Automovil”, los atributos serian: “rueda”,”marca”,”modelo” etc. ¿Más claro ahora?
Muy bien, sigamos adelante definiendo los atributos de nuestra clase, para lo cual utilizaremos la palabra reservada “private” o si trabajas con versiones de PHP inferiores a 5.0 deberás usar “var”, por lo tango nuestra clase se vera de la siguiente manera:
class Cliente { // estos valores de abajo son los atributos o propiedades de nuestra clase private $mNombre; private $mApellido; private $mDireccion; private $mPais; private $mTelefono; private $mEdad; private $mFechaNacimiento; }
En otras palabras, los atributos son visibles o accesibles dentro la propia clase.
Si seguimos los estándares de Programación Orientada a Objetos debemos definir los atributos como privados. Es decir, que sean accesibles solamente desde dentro de la clase misma, por lo tango utilizamos “private”. En otras palabras, ninguna otra clase y en ninguna otra parte de código se podrá cambiar un atributo perteneciente a
Métodos o Funciones:
Un método es lo mismo que una función, es una porción de código dentro de la clase que realiza una tarea y puede devolver un valor o no.
Los primeros métodos que definiremos en nuestra clase serán los que asignan valores a nuestros atributos. En este punto siempre hay discrepancia en la comunidad de programadores. La discusión está en si es mejor crear un método para cada atributo o bien crear atributos públicos y de esa manera evitamos la definición de métodos individuales. Esto puede sonar confuso, lo veremos con un ejemplo:
Para que puedas ver la diferencia es necesario ver primero la forma que insume más código para que luego las puedas comparar. Entonces, volviendo a los métodos, definiremos dos que se encargaran de asignar y retornar un valor a la propiedad nombre.
Métodos que controlan nuestros atributos.
Agregamos el siguiente código inmediatamente después de nuestras propiedades.
function setNombre($val) { $this->mNombre = $val; } function getNombre() { return $this->mNombre ; }
La clase “Cliente” con los métodos quedaría de la siguiente manera:
class Cliente { // esto de abajo son los atributos o propiedades de nuestra clase private $mNombre; private $mApellido; private $mDireccion; private $mPais; private $mTelefono; private $mEdad; private $mFechaNacimiento; function setNombre($val) //método que asigna una valor a la propiedad nombre { $this->mNombre = $val; } function getNombre() //método que retorna el valor asignado a la propiedad nombre { return $this->mNombre ; } }
El método “setNombre” recibe un valor por parámetro y mediante la utilización de “$this” lo asignamos. Recuerda, “$this” se usa solo dentro de las clases.
El método “getNombre” funciona de forma inversa y retorna el valor de la propiedad, utilizamos “return” para devolverlo.
El ejemplo de arriba es el más recomendado, pero requiere más líneas de código, lo que se traduce en más tiempo.
Recién ahora estaríamos en condiciones de realizar pruebas con nuestra clase. Luego, veremos la segunda manera de asignar valores a los atributos de la clase.
Para probar lo que hemos venido aprendiendo hasta ahora créate una página php llamada prueba.php y agrega el código siguiente:
require("classes/Cliente.php"); //creamos objeto para nuestro primer cliente $auxCliente = new Cliente(); //asignamos un nombre a nuestro objeto Cliente $auxCliente->setNombre("Ariel") ; //creamos objeto para nuestro segundo cliente $auxCliente2 = new Cliente(); //asignamos un nombre a nuestro segundo objeto Cliente $auxCliente2->setNombre("Pedro") ; //recuperamos el nombre que asignamos mediante el metodo getNombre echo "El nombre del primer cliente es: ".$auxCliente->getNombre()."<br>"; echo "El nombre del segundo cliente es: ".$auxCliente2->getNombre()."<br>";
Analizando un poco el código, la primera línea lo que hace es incluir el archivo que tiene la clase “Cliente”, una vez incluida en “prueba.php” ya podemos utilizarla.
Lo primero que hay que hacer para usar la clase es “crear una instancia” de la misma. Lo que nos da un objeto o modelo de esa clase, por lo tanto: “$auxCliente = new Cliente();” nos crea un objeto llamado ““$auxCliente” de la clase “Cliente”. Recuerden que es un objeto y esta “vacío” en lenguaje cotidiano. Es un molde.
Usando un término más humano, el cliente no tiene nombre, apellido, teléfono etc por el momento.
Al tener ya nuestro objeto podemos asignarle un nombre al cliente, lo hacemos utilizando el método correspondiente de la siguiente manera:
//asignamos un nombre a nuestro objeto Cliente $auxCliente->setNombre("Ariel") ;
Ya tenemos un cliente, ahora creamos otro de la siguiente manera.
//creamos objeto para nuestro segundo cliente $auxCliente2 = new Cliente(); //asignamos un nombre a nuestro segundo objeto Cliente $auxCliente2->setNombre("Pedro") ;
La forma en al creamos nuestro segundo cliente es similar al primero, solo que ahora utilizaremos un nuevo objeto “$auxCliente2”. Recuerda, siempre que quieras obtener un nuevo objeto tienes que utilizar “new Objeto()” en nuestro ejemplo “new Cliente()”.
Una vez asignado el nombre a los dos clientes comprobamos que realmente cada cliente tenga su nombre y que cada cliente es un objeto distinto.
Lo verificamos de la siguiente forma:
//recuperamos el nombre que asignamos mediante el método getNombre echo "El nombre del primer cliente es: ".$auxCliente->getNombre()."<br>"; echo "El nombre del segundo cliente es: ".$auxCliente2->getNombre()."<br>";
El resultado será:
//El nombre del primer cliente es: Ariel //El nombre del segundo cliente es: Pedro
Retomando el asunto relacionado a si debemos usar métodos para controlar las propiedades de nuestra clase o no, debemos recurrir algunas modificaciones en nuestra clase.
Como habrás observado la forma de asignar un valor a la propiedad “mNombre” fue utilizando el método “setNombre” y para recuperar el valor utilizamos el método “getNombre” que no son otra cosas que funciones públicas definidas dentro de la clase.
Existe una forma no siempre recomendada de controlar los atributos sin utilizar métodos, esto es definiendo las propiedades como públicas, para lo cual podemos utilizar “var” o “public” en vez de “private”.
La definición de las propiedades quedaría así:
class Cliente { // esto de abajo son los atributos o propiedades de nuestra clase public $mNombre; public $mApellido; public $mDireccion; public $mPais; public $mTelefono; public $mEdad; public $mFechaNacimiento; }
Como habrás podido observar nuestra clase ya no tiene los métodos “set” y “get” que se encargaban de las propiedades.
¿Cómo controlamos las propiedades sin los métodos?
Dado que las propiedades se definieron como públicas es posible acceder a ellas desde cualquier parte del código. Es decir, desde dentro de la clase mediante la utilización de “$this” y desde afuera.
Probaremos nuestro segundo ejemplo con las siguientes líneas de código:
require("classes2/Cliente.php"); //creamos objeto para nuestro primer cliente $auxCliente = new Cliente(); //asignamos un nombre a nuestro objeto Cliente $auxCliente->mNombre = "Ariel" ; //creamos objeto para nuestro segundo cliente $auxCliente2 = new Cliente(); //asignamos un nombre a nuestro segundo objeto Cliente $auxCliente2->mNombre = "Pedro" ; //recuperamos el nombre que asignamos mediante el metodo getNombre echo "El nombre del primer cliente es: ".$auxCliente->mNombre."<br>"; echo "El nombre del segundo cliente es: ".$auxCliente2->mNombre."<br>";
Dado que las propiedades son públicas asignamos un nombre de la misma manera que asignamos un valor a una variable común en PHP.
$auxCliente->mNombre = "Ariel" ;
Lo mismo para recuperar el valor de la propiedad, accedemos directamente así “$auxCliente->mNombre”
Todo muy bien. Ahora, ¿cuál es la mejor forma?
Esto es muy relativo y depende de la aplicación que estés desarrollando. Lo que si es cierto es que si utilizas el método más sencillo te estarías saliendo de los estándares de desarrollo de aplicaciones orientadas a objetos. Existen empresas que son muy rigurosas en estas metodologías y exigen a sus programadores la aplicación de estas reglas para que el código fuente final sea uniforme.
Este tutorial pretende ser lo más profesional posible, por lo tanto mostramos las dos formas. Depende del programador cual usar.
Los métodos no son solo útiles para manejar las propiedades. De hecho esta es una de las tareas menos importante que realizan los métodos.
Podemos utilizar un método para calcular la edad de la persona basada en la fecha de nacimiento.
Agregamos lo siguiente a nuestra clase:
function setFechaNacimiento($val) //método que asigna una valor a la propiedad Fecha de Nacimiento { $this->mFechaNacimiento = $val; } function getEdad() //método que retorna el valor asignado a la propiedad edad { return $this->mEdad ; } function calcularEdad() { $fecha_nacimiento = $this->mFechaNacimiento; list($y, $m, $d) = explode("-", $fecha_nacimiento); $y_dif = date("Y") - $y; $m_dif = date("m") - $m; $d_dif = date("d") - $d; if ((($d_dif < 0) && ($m_dif == 0)) || ($m_dif < 0)) $y_dif--; $this->mEdad = $y_dif; return $y_dif; }
La función “calcularEdad” tiene el cometido de darnos la edad de un cliente basado en la fecha de nacimiento. Es sin duda un claro ejemplo de cómo podemos utilizar los métodos.
Vamos a probar el método agregando el siguiente código en una página PHP en blanco:
require("classes/Cliente.php"); //creamos objeto para nuestro primer cliente $auxCliente = new Cliente(); //asignamos un nombre a nuestro objeto Cliente $auxCliente->setNombre("Ariel") ; //asignamos fecha de nacimiento $auxCliente->setFechaNacimiento("1979-11-19") ; //calculamos edad $auxCliente->calcularEdad() ; //recuperamos el nombre que asignamos mediante el metodo getNombre echo "El Cliente: ".$auxCliente->getNombre().", tiene ".$auxCliente->getEdad()." años<br>";
Con esto último terminamos el capítulo relacionado a Métodos y Propiedades.
Sin duda es una de las características más destacadas en los lenguajes orientados a objetos, y PHP cuenta con esta característica.
Cuando hablamos de herencia nos referimos a métodos y propiedades que se “importan” de otra clase. Como la palabra lo dice, heredamos funciones que ya están hechas.
La herencia nos sirve para ahorrarnos trabajo y reutilizar cosas que ya están hechas.
Por ejemplo: si en nuestra empresa tenemos clientes, proveedores y empleados. Todos tienen cosas en común, todos tienen nombre, apellidos, teléfonos, país etc.
Llevándolo al plano analítico, todos son personas. Por lo tanto, podemos definir una clase “Persona”, la cual contenga todos los atributos y métodos comunes al cliente, proveedor y empleado.
Podemos decir que estas clases heredaran de Persona los atributos en común.
Para comenzar definimos la clase Persona:
class Persona { // esto de abajo son los atributos o propiedades de nuestra clase private $mNombre; private $mApellido; private $mDireccion; private $mPais; private $mTelefono; private $mEdad; private $mFechaNacimiento; function setNombre($val) //método que asigna una valor a la propiedad nombre { $this->mNombre = $val; } function getNombre() //método que retorna el valor asignado a la propiedad nombre { return $this->mNombre ; } }
Y nuestra clase “Cliente” quedara así:
require("Persona.php"); class Cliente extends Persona { }
A primera vista parece vacía, sin métodos ni propiedades. Pero, si prestamos atención, vemos la palabra usada para heredar “extends” y a continuación “Persona”. Esto, en otras palabras quiere decir que la clase Cliente hereda todas las propiedades y métodos de Persona.
Para demostrar la utilidad de la herencia utilizaremos otra clase llamada “”Empleado”.
require("Persona.php"); class Empleado extends Persona { }
Al heredar nos evitamos tener que definir los métodos y propiedades para cada una de las clases por separado, evitando así el código duplicado y aprovechamos al máximo la reutilización, uno de los principios básicos de esta metodología.
Para probar que Cliente y Empleado heredaron utiliza los ejemplos de la sección anterior.
Siempre que ejecutamos “$auxCliente = new Cliente();” decimos que construimos el objeto Cliente. Se puede dar el caso que podríamos querer ejecutar determinadas acciones en el mismo momento de creación o construcción del objeto. Para esto usamos el constructor, que no es más que un función que se ejecuta automáticamente.
En PHP5 el constructor se define con “__construct” en versiones anteriores el constructor se define con una función con el mismo nombre de la clase. Por ejemplo en nuestra clase “Cliente” el constructor se definiría de la siguiente manera:
//constructor de la clase function __construct($val) { $this->mFechaNacimiento = $val; $this->calcularEdad(); }
En el ejemplo utilizamos el constructor para calcular la edad automáticamente después de instanciar el objeto.
//creamos objeto para nuestro primer cliente $auxCliente = new Cliente("1979-11-19"); echo "Edad del cliente:”.$auxCliente->getEdad()." años<br>";
El destructor de una clase se utiliza para realizar operaciones cuando se destruye el objeto, es decir cuando se elimina de la memoria. Esta funcionalidad es muy utilizada en sistemas de chat. Donde necesitamos actualizar la base de datos ni bien el visitante cierra la página.
Es la capacidad de los objetos de tener otros objetos dentro de sí mismo. Un buen ejemplo podría ser que una empresa tiene clientes. Por lo tanto, un objeto cliente podría estar dentro del objeto empresa.
Creamos nuestra clase “Empresa”
class Empresa { private $mCliente; function agregarCliente($unCliente) //método que agrega el cliente { $this->mCliente = $unCliente; } function getCliente() //método que retorna el cliente { return $this->mCliente ; } }
En un archivo de prueba agregamos el siguiente código:
require("classes/Cliente.php"); require("classes/Empresa.php"); $auxEmpresa = new Empresa(); //creamos objeto para nuestro primer cliente $auxCliente = new Cliente(); //asignamos un nombre a nuestro objeto Cliente $auxCliente->setNombre("Ariel") ; //asignamos fecha de nacimiento $auxCliente->setFechaNacimiento("1979-11-19") ; //calculamos edad $auxCliente->calcularEdad() ; //agregamos el cliente dentro de la empresa $auxEmpresa->agregarCliente($auxCliente) ; //recuperamos el nombre que asignamos mediante el metodo getNombre echo "El Cliente: ".$auxEmpresa->getCliente()->getNombre().", tiene ".$auxEmpresa->getCliente()->getEdad()." años<br>";
El método “agregarCliente” introduce el objeto Cliente dentro del objeto Empresa y “getCliente” nos lo devuelve.
Por lo tanto lo siguiente:
$auxEmpresa->getCliente()->getNombre()
Sería algo así en pseudocódigo: Empresa->Cliente->Nombre.
Saludos para todos y espero que el tutorial les sea útil.
Popularidad: 100%
Antes que nada haremos una breve introducción acerca de que es WordPress y para qué sirve. Sin duda es el CMS o administrador de contenidos para blogueros más popular.
Un Blog es un sistema online que funciona como una bitácora donde las personas publican las actividades de su día a día, noticias, experiencias, fotos, videos entre otras cosas. A diferencia de un foro en el blog solo se puede comentar acerca de lo que el dueño del blog ha publicado, un blog es algo más privado que el foro.
En un foro participan muchas personas y pueden crear preguntas y responderse entre ellos. Muchos artistas tienen su propio blog donde comentan acerca de sus giras, discos, recitales. De esta manera los seguidores o fans están informados cronológicamente de las últimas novedades.
Ahora que ya tenemos una idea clara de lo que es un blog podemos decir que WordPress es un sistema administrador de contenidos que nos permite tener nuestro propio Blog prácticamente sin conocimientos de programación y diseño. En los últimos años se ha convertido en el sistema de blog más utilizados por los blogueros y cuenta con una red de programadores y diseñadores dedicados al soporte de este popular sistema realmente muy grande alrededor de todo el mundo.
Lo primero que tienes que tener para la una instalación básica de WordPress es una cuenta de email y un hosting con una base de datos MySQL . Una vez que estamos seguros que disponemos de esto seguimos los siguientes pasos:
Una de las principales características de WordPress , es que es un sistema totalmente gratis y lo podemos descargar en español directamente sin registrarse desde el sitio oficial de WordPress. Puedes utilizar la siguiente URL para descárgalo http://es.wordpress.org/
Una vez que bajamos la aplicación en nuestra PC, descomprimimos el archivo.
Para especificar el nombre de usuario, contraseña, nombre y servidor de la base de datos renombramos el archivo “wp-config-sample.php” con “wp-config.php”. Luego lo abrimos con un editor HTML o bien puedes usar el bloc de notas.
Remplaza con tus datos el usuario, contraseña y el nombre de la Base de Datos. Con respecto al servidor o “host” por lo general es “localhost” y no vas a tener que cambiarlo en la mayoría de los casos.
// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** // /** El nombre de tu base de datos de WordPress */ define('DB_NAME', 'nombredetubasededatos'); /** Tu nombre de usuario de MySQL */ define('DB_USER', 'nombredeusuario'); /** Tu contraseña de MySQL */ define('DB_PASSWORD', 'contraseña'); /** Host de MySQL (es muy probable que no necesites cambiarlo) */ define('DB_HOST', 'localhost');
Una vez que hayamos configurado el archivo de conexión a la base de datos subimos todos los archivos utilizando un cliente de FTP.
Cuando todos los archivos y carpetas estén arriba dale permisos de escritura “0777” la carpeta “wp-content”.
WordPress se instala prácticamente solo, en un simple paso. por ejemplo si subiste los archivo a la raíz de tu cuenta de hosting, solo tienes que escribir el nombre de tu dominio y la aplicación de instalación se ejecutar automáticamente, ejemplo: “www.midominio.com”. O bien, si subiste los archivos a una carpeta, ejemplo “blog” tendrás que escribir “www.midominio.com/blog/” en tu explorador de internet.
Si todo fue configurado correctamente en el paso 5 automáticamente veras la pantalla para que puedas acceder a tu Panel de Control para administrar tus Artículos o “Posts”, categorías, fotos, videos etc.
EL Panel de Control es muy intuitivo y solo tenemos que hacer clic en la sección de “Entradas”, como podrás ver ya hay un Post que fue creado por WP a modo de ejemplo. Haz clic en “Nueva entrada” y veras lo que comúnmente se llama un editor HTML el cual podrás utilizar para redactar tus artículos.
Todo articulo tiene que estar asociado a una o varias categorías. Por ejemplo, si tu foro habla de tecnología, las categorías podrían ser: Computadoras, celulares, palms, monitores etc etc.
Por lo tanto si por ejemplo escribes un artículo relacionado a los monitores más modernos no olvide hacer clic en la categoría “Monitores”.
Puedes acceder al administrador de categorías haciendo clic en la opción de la izquierda “Entradas” donde veras el link de “categorías”. Existen categorías padres y categorías hijas, las padres son las categorías principales, por ejemplo “Computadoras” y una categoría hija seria “Memorias RAM”.
Usualmente, el menú con opciones esta siempre visible, pero, a veces podemos ocultarlo. El menú principal está a la izquierda y es como se muestra en la siguiente imagen.
Un borrador se utiliza para preparar el post, muchas veces un artículo no está listo para publicarse, o bien lo estamos escribiendo aun. WordPress nos da una opción para que podamos guardar lo que tenemos hecho y terminarlo en otro momento.
Básicamente son la misma cosa. Una página tiene asociado una plantilla o “template” el cual podemos modificar en nuestra computadora mediante la utilización de un editor de HTML. Otra diferencia es que las páginas no están asociadas a categorías.
En el menú de la izquierda vas a ver una opción “Comentarios”. Haz clic y veras todos los comentarios que has recibido. Estas son las opciones que veras si mueves el mouse encima de uno de los comentarios: “Rechazar | Responder | Edición rápida | Editar | Spam | Enviar a la Papelera”
Espero que este tutorial de como Instalar tu Blog en WordPress les sea útil.
Popularidad: 23%
PayPal ofrece una funcionalidad muy útil llamada IPN con la cual podemos interactuar con nuestra propia aplicación. Básicamente, nos da la posibilidad de tomar decisiones en el caso que el pago haya sido confirmado o bien ejecutar determinadas rutinas en nuestro programa si el pago no fue aceptado.
Esto es muy relativo, pero podemos citar algunos ejemplos. Digamos que tenemos un sitio en internet donde vendemos productos. Habitualmente este tipo de sistemas cuentan con un módulo que nos permite administrar las facturas o comprobantes de compras. PayPal IPN nos sirve para actuar de intermediario entre nuestro propio sistema de facturas y el sistema de PayPal.
Entonces, si el pago del cliente fue satisfactorio o rechazado podemos decirle a PayPal que haga una llamada a nuestra aplicación “haciéndole saber” lo que ha ocurrido, esto se conoce como “callback”. Mediante esta llamada PayPal envía una serie de parámetros a través del POST o el GET con los resultados de la operación.
Nuestra aplicación recibirá esos parámetros y basados en lo que recibimos generamos una factura, actualizamos un stock, notificamos al cliente que el pago fue satisfactorio entre otras acciones. La notificación de Pago Instantánea se sumamente útil, si no fuera por esta funcionalidad no podríamos sincronizar nuestra aplicación y tendríamos datos desactualizados en nuestra base de datos. Por ejemplo, podría presentarse el caso que un cliente aparece con una factura “pendiente” de pago cuando en realidad el cliente pago.
Otro buen ejemplo de donde el uso de IPN es vital sería un sitio donde el cliente necesita de “créditos” para realizar o acceder a determinadas funciones. Por ejemplo: si hablamos de un sitio que nos permite enviar SMS online seguramente tendremos que comprar créditos para enviarlos, por lo tanto, es sumamente importante acreditarle instantáneamente los créditos al cliente una vez que haya realizado el pago.
Lo primero que tienes que hacer es ingresar a tu cuenta de PayPal para activar la función de Notificaciones Instantáneas IPN.
Para ello vamos a “Perfil/Mis Herramientas de Venta”.
Y veras una pantalla donde podrás configurar muchas opciones, nosotros haremos clic en “Notificaciones de pago instantáneas”:
Marca donde dice “Recibir mensajes de IPN”. En el cuadro de texto de URL conviene dejarlo en blanco si usamos la misma cuenta para múltiples sitios.
Una vez que esta función está habilitada estamos listos para ir a la parte de codificación. El ejemplo que utilizaremos será en PHP utilizando la librería CURL.
Primer Paso:
Creamos un archivo php “escucha” o “listener” el cual recibirá las notificaciones desde el servidor de Paypal.
Vamos a ponerle paypalipn.php, el cual contendrá el siguiente código:
$payaltest = true; //cambialo a false para realizar transacciones reales, de lo contrario utiliza sandbox. $req = 'cmd=_notify-validate'; $fullipnA = array(); foreach ($_POST as $key => $value) { $fullipnA[$key] = $value; $encodedvalue = urlencode(stripslashes($value)); $req .= "&$key=$encodedvalue"; } $fullipn = Array2Str(" : ", "\n", $fullipnA); if (!$payaltest) { $url ='https://www.paypal.com/cgi-bin/webscr'; }else{ $url ='https://www.sandbox.paypal.com/cgi-bin/webscr'; } $curl_result=$curl_err=''; $fp = curl_init(); curl_setopt($fp, CURLOPT_URL,$url); curl_setopt($fp, CURLOPT_RETURNTRANSFER,1); curl_setopt($fp, CURLOPT_POST, 1); curl_setopt($fp, CURLOPT_POSTFIELDS, $req); curl_setopt($fp, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req))); curl_setopt($fp, CURLOPT_HEADER , 0); curl_setopt($fp, CURLOPT_VERBOSE, 1); curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($fp, CURLOPT_TIMEOUT, 30); $response = curl_exec($fp); $curl_err = curl_error($fp); curl_close($fp); // Variables enviadas por Paypal $item_name = $_POST['item_name']; $item_number = $_POST['item_number']; $payment_status = $_POST['payment_status']; $payment_amount = $_POST['mc_gross']; $payment_currency = $_POST['mc_currency']; $txn_id = $_POST['txn_id']; $receiver_email = $_POST['receiver_email']; $payer_email = $_POST['payer_email']; $txn_type = $_POST['txn_type']; $pending_reason = $_POST['pending_reason']; $payment_type = $_POST['payment_type']; $custom_key = $_POST['custom']; if (strcmp ($response, "VERIFIED") == 0) { // Verifico el estado de la orden if ($payment_status != "Completed") { TransLog("El pago no fue aceptado por paypal - Estado del Pago: $payment_status"); StopProcess(); } //todo bien hasta ahora, la transacción ha sido confirmada por lo tanto puedo realizar mis tareas, //actualizar DB, stock, acreditar cómputos, activar cuentas etc etc TransLog("Pago Correcto - $fullipn"); //notifico al webmaster }else{ //la transacción es invalida NO se puedo cobrarle al cliente. TransLog("Pago Inválido - $fullipn"); } //función básica para las notificaciones function notify_webmaster($message) { $subject="Nuevo Pago"; $remite="tu-email"; $remitente="Tu remitente"; $header .="MIME-Version: 1.0\n"; $header .= "Content-type: text/html; charset=iso-8859-1\n"; $header .="From: ".$remitente."<".$remite.">\n"; $header .="Return-path: ". $remite."\n"; $header .="X-Mailer: PHP/". phpversion()."\n"; mail("email-aqui-de-quiren-recibe", $subject, $message,$header); } //esta funcion puede utilizarse como almacenar en una variable global todas las acciones del script, de esta manera podremos rastrear errors facilmente. function TransLog($message) { notify_webmaster($message); } //examina todo el IPN y lo convierte en una cadena de texto function Array2Str($kvsep, $entrysep, $a) { $str = ""; foreach ($a as $k=>$v) { $str .= "{$k}{$kvsep}{$v}{$entrysep}"; } return $str; } //para toda la ejecución del programa function StopProcess() { exit; }
PayPal necesita realizar ciertas comprobaciones antes de enviarnos todos los datos de la transacción. El método de comprobación consiste en enviarle todos los datos nuevamente a PayPal tal cual fue recibido. Esto se puede observar en las primeras líneas del IPN.
Mediante al utilización en bucle ForEach recorremos todas las variables que se encuentran en el POST y las ponemos en una variable llamada “$req”. Recuerda, estas variables fueron enviadas por el servidor de PayPal. Es muy importante no alterar el orden, tenemos que enviarlas tal cual las recibimos.
$req = 'cmd=_notify-validate'; $fullipnA = array(); foreach ($_POST as $key => $value) { $fullipnA[$key] = $value; $encodedvalue = urlencode(stripslashes($value)); $req .= "&$key=$encodedvalue"; } $fullipn = Array2Str(" : ", "\n", $fullipnA);
Una vez que tenemos listo lo de las variables es hora de enviarlas al servidor de Paypal, para lo cual usaremos CURL.
La URL que utilizamos para comprobar transacciones reales va a ser “’https://www.paypal.com/cgi-bin/webscr”, mientras que para transacciones de prueba utilizaremos SANDBOX ‘https://www.sandbox.paypal.com/cgi-bin/webscr’.
Les prometo un artículo exclusivo de SANBOX en pocos días.
Capturamos la respuesta que nos da el servidor de PayPal en la variable “$response”.
if (!$payaltest) { $url ='https://www.paypal.com/cgi-bin/webscr'; }else{ $url ='https://www.sandbox.paypal.com/cgi-bin/webscr'; } $curl_result=$curl_err=''; $fp = curl_init(); curl_setopt($fp, CURLOPT_URL,$url); curl_setopt($fp, CURLOPT_RETURNTRANSFER,1); curl_setopt($fp, CURLOPT_POST, 1); curl_setopt($fp, CURLOPT_POSTFIELDS, $req); curl_setopt($fp, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req))); curl_setopt($fp, CURLOPT_HEADER , 0); curl_setopt($fp, CURLOPT_VERBOSE, 1); curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($fp, CURLOPT_TIMEOUT, 30); $response = curl_exec($fp); $curl_err = curl_error($fp); curl_close($fp);
PayPal nos responderá con una simple palabra, “VERIFIED” o “INVALID”. Que el resultado sea inválido NO significa que el pago no fue realizado por parte del cliente. Esto solo significa que por algún motivo los valores que enviamos no concuerdan con los originales.
Si PayPal nos devuelve “VERIFIED”. Esto significa que los valores fueron enviados de forma correcta, por lo tanto recibiremos la información de la transacción a través de variables POST.
Las siguientes líneas de código controlan que solo se siga ejecutando el IPN si el estado del pago es “”Completed””:
if ($payment_status != "Completed") { TransLog("El pago no fue aceptado por paypal - Estado del Pago: $payment_status"); StopProcess(); }
Ahora que hemos confirmado el pago entonces realizamos nuestras operaciones, actualizamos la base de datos, stock, acreditamos dinero, créditos en la cuenta del cliente etc etc.
Ten presente que este es un simple tutorial de cómo usar IPN.
• No realices acciones que tomen mucho tiempo o que consuman muchos recursos de tu sitio web.
• Algunas veces PayPal demora en llamar al IPN, puede tardar algunos minutos.
Espero que este tutorial de cómo implementar PayPal IPN en tu sitio les sea útil.
Popularidad: 65%
Mediante la utilización de PHP y la librería CURL es posible actualizar el estado de Facebook sin la necesidad de estar logueado ni utilizar la API. En este tutorial enseñaremos cómo es posible crear un programa en PHP que puede ser implementado en tu sitio web o cualquier aplicación web.
Dado que es un técnica no convencional tenemos que tener varias cosas en cuenta, como por ejemplo: Facebook implementa varios controles para evitar que aplicaciones remotas utilicen las funcionalidades que solo tiene que funcionar si el usuario esta “logueado” en su cuenta de Facebook. Por lo tanto, nuestro desafío será simular el comportamiento humano a través de un script mediante la utilización de PHP y CURL.
Al igual que otras redes sociales Facebook nos da la posibilidad de mantener informados mediante mensajes cortos a nuestros fans, familiares, amigos o seguidores. Entonces, llamamos “cambiar el estado” “actualizar mi estado” a la acción de publicar un mensaje el cual será visto por determinadas personas que forman tu comunidad.
Aclarado estos términos y lenguaje propio de las redes sociales pongamos manos a la obra:
Primero creamos un archivo de texto llamado” fb_cookies.txt” y lo guardamos en la misma ruta donde va a correr nuestro script. Muy Importante: tienes que darle permisos de lectura y escritura cuando lo subas al servidor “0777”. Si no lo haces el script no funcionara dado que Facebook pondrá los datos de la cookie dentro.
En segundo lugar creamos un archivo de prueba, index.php, el cual incluirá lo siguiente:
include("classes/FacebookLib.php"); /*linea con los datos de acceso*/ $mFacebookLogin = $_POST['logins']; $act = $_POST['act']; if($act=="post_message") { $auxFacebook = new FacebookLib(); $arrayLogin = explode("\n",$mFacebookLogin); $_SESSION['arrayLogin'] = $arrayLogin; $auxFacebook->send_message(); }
Lo primero que tenemos que hacer es incluir la clase “FacebookLib” en nuestra página de prueba, luego creamos una instancia.
include("classes/FacebookLib.php"); $auxFacebook = new FacebookLib();
A continuación ponemos el nombre de usuario y contraseña de Facebook en un Array y lo guardamos en una variable de sesión, también guardamos el mensaje en una variable:
$arrayLogin = explode("\n",$mFacebookLogin); $_SESSION['arrayLogin'] = $arrayLogin; $_SESSION['message'] = $_POST['uids'];
La siguiente sentencia realiza dos tareas, la primera es ingresar a tu cuenta de Facebook, la segunda es postear el mensaje y actualizar el status de tu cuenta.
$auxFacebook->send_message();
Esta clase contiene funciones útiles para agilizar la conexión con Facebook. De las funciones solo analizaremos dos de ellas.
Función para ingresar en Facebook remotamente.
function fb_login($login_email, $login_pass) { /*archivo para las cookies*/ $facebook_cokie = "fb_cookies.txt"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?login_attempt=1'); curl_setopt($ch, CURLOPT_POSTFIELDS,'charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&locale=en_US&email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&pass_placeholder=&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, $facebook_cokie ); curl_setopt($ch, CURLOPT_COOKIEFILE, $facebook_cokie ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_ENCODING, ""); $html = curl_exec($ch); $err = 0; $err = curl_errno($ch); curl_close($ch); if ($err != 0){ echo 'error='.$err."\n"; return(false); } else { echo 'logueado correctamente..'; $_SESSION['FACEBOOKSESSION']=$_SESSION['arrayLogin'][0]; return(true); } }
La función de logueo en Facebook utiliza CURL para enviar tus datos he ingresar a Facebook remotamente, si los datos son correctos y se autorizó el ingreso entonces se generan los datos de la cookie los cuales se guardan en el archivo de texto “fb_cookies.txt”. La cookie es algo muy importante y tiene que tener permisos de escritura cuando este en tu servidor.
Función que envía el mensaje a Facebook una vez que estamos logueados:
La función “send_message” es tal vez la más compleja, se encarga de extraer todas las variables necesarias que Facebook genera.
Acá pueden encontrar el ejemplo online: http://programacionya.com/examples/facebook_status/
El ejemplo con el código completo lo descargan haciendo clic aqui
Popularidad: 75%
PayPal es una empresa de Procesamiento de Pagos Online Norteamericana fundada en 1998. Sin duda es el procesador de pagos más popular y en los últimos años y se ha convertido en la herramienta más utilizada para el envío y recepción de dinero entre personas.
PayPal ofrece la posibilidad de recibir y enviar dinero a través de internet de una manera confiable, segura y rápida. Cualquier persona con un email puede abrir una cuenta totalmente gratis y comenzar a recibir pagos con tarjeta de crédito de forma inmediata. También es sumamente útil y fácil de implementar en cualquier sitio de comercio electrónico, como por ejemplo sitios que ofrecen membresías, subastas, tiendas virtuales y todo tipo de sitios que venda artículos en Internet.
Abrir una cuenta de Paypal es sencillo, tan solo tienes que ir a la página principal, https://www.paypal.com/, una vez ahí tienes que hacer clic en el link “Registrarse” que está en la parte superior de la pantalla.
Enseguida veremos una pantalla donde tenemos que indicar el lugar donde residimos. Esta información es Muy importante, PayPal comprueba estos datos y solo enviara el cheque con tus pagos a la localidad que indiques, tienes que ser cuidadoso y no cometer errores porque luego es complicado cambiar esa información.
Si bien no te piden por una cuenta de email en esta pantalla PayPal te lo pedirá en el siguiente paso. Recuerda utilizar una cuenta de email valida ya que será utilizada para las comunicaciones entre tú y PayPal habitualmente.
Como abras notado esta pantalla nos ofrece también tres alternativas, o tipos de cuentas que podemos optar por abrir.
Cuenta Personal:
El tipo de cuenta “Personal” solo sirve para realizar compras en internet. Pero no puedes vender artículos ni recibir pagos. Esta solución es ideal para aquellas personas que solo compran en Internet.
Cuenta Premier:
Es ideal para personas que compran y venden en Internet. Básicamente, tiene las mismas funcionalidades que el tipo Personal y la gran diferencia es que te permite recibir pagos y vender tus servicios o productos.
Cuenta Empresa:
Esta tipo lo utilizan empresas registradas y que necesitan facturar a través de una empresa establecida en vez de una persona. Para abrir esta cuenta necesitas comprobar tu identidad mediante una Tarjeta de Crédito internacional y toma unas 72 horas para que quede activa completamente.
Al dar de alta tu tarjeta de crédito Paypal facturar un monto mínimo en tu tarjeta, alrededor de 2 dólares y en el detalle de la compra pondrán un código, el cual debes ingresar para confirmar tu cuenta.
Dependiendo del tipo de cuenta que quieras abrir serán los datos que se te solicitaran para crear la nueva cuenta de PayPal.
En nuestro ejemplo probaremos abrir una cuenta Premier, para lo cual será necesario ingresar una cuenta de email valida, tu nombre y apellido legal, tu fecha de nacimiento, dirección y teléfono válidos. En el caso que hayamos optado por una cuenta “Empresa” entonces tendremos que indicar el nombre legal de la misma.
PayPal no da la opción Premier para todos los países, algunos regiones solo tienen la opción de Persona y Empresa.
Si todo fue bien durante el proceso de registro veras la siguiente pantalla.
PayPal enviara un email con un link para que confirmes tu cuenta de correo electrónico, si no lo haces entonces tendrás ciertas limitaciones, como por ejemplo: no podrás retirar más de $500 dólares mensuales.
Para confirmar totalmente tu cuenta PayPal requiere que confirmes tu cuenta de email y que registres una tarjeta de crédito, usualmente si los montos de dinero son muy elevados te pedirán copia de pasaporte o ID.
Tradicionalmente, para realizar un pago a través de Paypal el cliente es re direccionado al servidor de PayPal donde se toman los datos de la tarjeta de crédito. Ahora bien, existen ocasiones en las que no queremos que el cliente deje nuestro sitio. Para lograr eso y tener un mayor control sobre nuestras ventas, ahorrar en costos por transacciones y mejorar la experiencia del cliente a la hora de procesar el pago es que PayPal ofrece “PayPal Payments“ Pro.
Otra de las ventajas de este servicio es que puedes recibir todos los pagos de tus sitios en una sola cuenta y te permite tomar pagos por teléfono mediante una terminal de pagos. Es sin duda una gran opción que lamentablemente no está habilitada para todos los países.
No utilices nunca tu cuenta para enviar o recibir dinero donde estén involucrados servicios o productos prohibidos por PayPal. Si lo haces, PayPal pude bloquear tu cuenta y congelar el dinero por 180 días. Antes de comenzar a recibir pagos asegúrate que tu sitio cumple con las políticas.
Estos son algunos de los servicios que NO puedes utilizar PayPal: apuestas, casino online, narcóticos, sitios de adultos, apuestas o armas de fuego entre otros. Para más información lee la parte de “Prohibited Activities”
Espero que el artículo les haya sido útil.
Popularidad: 98%
Categorías
Últimos Comentarios
Donación
Estamos en Facebook
Noticias de Programadores
Artículos más vistos