miércoles, 23 de diciembre de 2015

Agregar mi sitio WEB como aplicación (chrome)

Una vez creado tu sitio web interactivo (más si usaste AJAX y otras tecnologías interactivas) de seguro tu sitio web, se ha convertido en una aplicación web.

Puedes hacerlo incluso ver mas profesional, para que parezca una aplicación. En principio, seria bueno que no se ejecutará en el navegador, si no que te abriera una ventana de aplicación como tal.

¿Como puedes hacer esto?. Bueno recuerda que Chrome se ha convertido en mucho mas que un navegador, es todo una plataforma de aplicaciones. Sin duda te has dado cuenta, que Chrome permite instalar y manejar aplicaciones, que van ligadas a esta plataforma.

Incluso nos permite añadir nuevas aplicaciones, creadas directamente desde un sitio web. ¿Como? Sigue estos pasos:

1.-Posiciónate en tu sitio web.
2.-Abre el Menú de Chrome. Da click en Más Herramientas. Selecciona la opción Añadir a la barra de tareas...



3.- Aparecerá una ventana como la siguiente:



En esta ventana es muy importante poner el nombre con el que queremos que aparezca nuestra aplicación. Así como la opción Abrir como ventana, para que se abra en una ventana y no aparezca el navegador.

4.- Click en Añadir

5.- A partir de ahora nuestra aplicación aparece en la ventana de aplicaciones de Chrome. Para verla, teclea en la barra de direcciones del navegador la siguiente dirección: chrome://apps/

6.- Una vez localizada la aplicación en la lista, dar click secundario en ella y seleccionar Crear accesos directos


7.- Una vez hecho esto nos aparece una ventana con los accesos directos a crear. Seleccionar los deseados. Al final click en Crear.

8.- Busca en tu escritorio, ya debe estar instalado el acceso directo a tu aplicación web

Y así se verá mas profesional

Para mas información
https://support.google.com/chrome_webstore/answer/3060053?hl=es-419

jueves, 17 de diciembre de 2015

Requisitos para hacer una buena E-COMMERCE (tienda virtual) y que te aprueben un TPV virtual en un banco

Supongamos que quieres montar tu propia tienda virtual. O estás desarrollando una para un cliente.

¿Que necesito para que mi tienda virtual funcione?

Aquí una pequeña guía, incluso son los requisitos que espera de ti una entidad bancaria para brindarte el servicio  de TPV virtual (terminal de punto de venta virtual). Una TPV es un sistema electrónico de cobro, para que tu cliente pueda pagar vía internet con su tarjeta. Para mas información sobre TPV virtual, lee los siguientes enlaces:
http://www.eumed.net/cursecon/ecoinet/seguridad/TPVv.htm
https://www.coodex.es/tpv-virtual-que-es-que-me-cuesta-y-cual-es-el-mejor/

Guia de Requisitos de E-COMMERCE


-Contar con certificado SSL
Para tu cliente es muy importante la seguridad. SSL es un protocolo de seguridad criptográfico.
Es decir cuando usas una página SSL. la comunicación entre tu máquina y el servidor va cifrada y
es "segura", segura a ataques de intrusos que quieran robarla.  Es la base del famoso HTTPS.
Como se trata de un página de comercio, la información que vas a manejar es algo sensible,
así que necesita toda la protección.
Para obtener este certificado, por lo general tendrás que comprarlo, las empresas de hosting suelen
vender certificados. Luego lo instalas, y finalmente redireccionas tu tráfico de HTTP a HTTPS,
 esto último lo puedes hacer mediante el archivo .htaccess. No lo olvides .htaccess solo redirecciona
lo que escribe el usuario en la barra del navegador.  Probablemente escribiste en tu código varias url
con la dirección del sitio, lo mejor es usar una variable global cargada desde la base de datos para
poner la dirección del sitio. Así solo cambias esa variable, en lugar de http al inicio por https.
Para mas información:
https://es.wikipedia.org/wiki/Transport_Layer_Security
https://es.wikipedia.org/wiki/.htaccess
https://www.cristiantala.cl/redireccionar-http-a-https-con-modrewrite-y-htaccess/

A veces pasa que olvidaste, en que parte del código usas http en lugar de https para direccionar. No te
preocupes, chrome en automático detecta que tu página no es segura (¡que horror!) . Y te hace otro
buen regalo, en la consola de Javascript, te pone todos los lugares que tienen enlaces inseguros en tu página.

-Catalogo de productos
Obvio, tus productos deben estar catalogados, bien organizados. Con una descripción detallada, sus atributos definidos e identificadores únicos. Si ya tienes una tienda física esto es fácil.

-Carrito de compras
Indispensable. Toda buena tienda virtual tiene su carrito de compras. Al final no es mas que una tabla
 en tu base de datos donde guardas información de los artículos que el cliente pone en su carrito.
No olvides que el carrito debe poner llenarse, quitarle productos o vaciarlo, y en base a el se generará
una orden de compra.

-Base de datos para almacenar la información histórica de sus ventas
Todas tus ventas deben ir contenidas en una tabla. Es necesario guardar esta información.

-Orden de compra
Una  vez que pasas del carrito a la compra, se genera una orden de compra. Esta información debe ir también en una tabla de la base de datos.

-Sistema para administrar los pedidos
Tu cliente debe ser capaz de conocer el estado de su pedido y darle seguimiento. Sobre todo a nivel interno, debes poder control el flujo del proceso de venta. Por ejemplo, algunos estados del pedido
podrían ser: generado, pagado, enviado, recibido, cancelado, etc.

-El acceso a la tienda con user y password
Un principio básico de seguridad. El acceso debe ser protegido. Debes crear un sistema de Loguin.

-Descripción de la empresa
Debes describir tu empresa, a que se dedica, cuál es su misión, visión , objetivos, historia, etc. Algo que
de entender al cliente con quién esta tratando (y le de seguridad).

-Distribución de artículos por departamentos y marcas
Tus artículos deben estar ordenados por departamentos y marcas. Incluso si manejas líneas pueden
estar ordenados por línea. La finalidad es que sean fáciles de ubicar y de categorizar por el usuario.
Una página ordenada atrae al usuario.

-Descripción completa de los productos y servicios (con fotografía) según sea el caso
Es importante que detalles bien la descripción de cada producto. Color, talla, marca, modelo, todos
los datos que sean relevantes de acuerdo a la naturaleza de tus productos. Recuerda, de la vista nace
el amor (tristemente, ya se por que nadie me ama) , así que incluye muchas fotos, grandes y a todo 
color. Lo ideal es poner una foto central grande, y al lado pequeñas vistas para cambiarla y ver
de diferentes ángulos el producto. Al dar click en un vista, cambias la foto central. Las fotos 
son especialmente necesarias en artículos que por su naturaleza serán exhibidos, como la ropa. 
Por ejemplo, en la pagina de información de una bota, yo uso 7 imágenes.

-Contacto de servicio a clientes (incluyendo email y teléfonos)
Tu cliente necesita confianza (imagina que eres el cliente ¿que deseas? confianza !!!). En esta era de
timos por Internet, el no ver a la persona con la que haces el trato, siempre genera cierto estress. Por eso
tu cliente necesita como contactarte. EMAIL, teléfono, chat, carta....en realidad los medios siempre son pocos.
Dale la seguridad a tu cliente de que trata con una persona honesta y real (y a la que puede
mandar a buscar por la policía en caso necesario).

-Politicas de entrega, costos de envío, devolución y reembolso
Muy importante, tu cliente debe saber como será la entrega, el envío, si es posible devolver el producto
o si puede obtener un reembolso por su dinero, y como hacerlo.

-Indicar tipo de moneda de la transacción
Por supuesto tu cliente debe saber si va a pagar el dolares, pesos mexicanos, euros, yuanes, o rupias de
la India.

-Indicar restricciones de exportación (solo cuando aplique)
Pues si, si vas a exportar o no. Si es dificil montar una e-commerce en tu país, imagina a nivel internacional.
Pero es posible. Si lo haces tienes que detallar tus políticas.

-Indicar país de domicilio del comercio.
Obvio. Si estas en México, o donde sea. A tu cliente le gusta saber que estas en un lugar físico (para
saber a donde mandar a la policía). No es requisito, pero es mejor si pones tu estado, ciudad y una dirección física. Y si pones un enlace a un mapita de Google Maps con tu ubicación, es un plus.

-Que indique los derechos de reservación (solo cuando aplique).
Solo aplica a quienes venden reservaciones, Por ejemplo, hoteles.


Si cumples con los anteriores requisitos, tu e-commerce esta casi lista. No olvides lo mas importante es
ganar la confianza del usuario. Buena venta.

Un apunte extra, en México, y quizá en varios países, será necesario también que contemples la facturación electrónica. No es un requisito para tener un TPV, pero quiza tus clientes lo requieran.

lunes, 14 de diciembre de 2015

Proceso de ejecución y carga de una página web

Cuando empiezas en el mundo de la programación web, te das cuenta de que muchas veces las páginas son construidas con una mezcla de varios lenguajes. Si vienes del mundo de la programación estructurada o programación de aplicaciones de escritorio, suele ser confuso pues por lo general usas un solo lenguaje en todo tu proyecto.

Por lo general estos lenguajes suelen ser PHP, Javascript y HTML. Es cierto que existen otros, pero estos 3 son los de uso más común. Generalmente los otros lenguajes que se usan en el desarrollo de páginas web cubren un nicho de uno de estos 3 lenguajes.

¿Por que es necesario usar tantos lenguajes? Bueno básicamente, por la arquitectura de desarrollo web, y por que cada lenguaje cumple una función diferente muy específica. Además recuerda que la programación web es una disciplina que se ha ido desarrollando poco a poco. Las páginas que tenemos hoy en día, son totalmente diferentes de las que se tenían en el inicio del Internet, allá por inicios de los 90. Al principio todo era HTML, pero con el desarrollo de nuevas tecnologías y la aparición de nuevos estándares, se fueron agregando lenguajes. Como un castillo que se va construyendo una pieza a la vez. Todo esto con el fin de hacer las páginas más potentes y dinámicas, con nuevas funcionalidades. Sin embargo, no es tan complicado como se oye.

Al verlos todos estos lenguajes juntos nos viene a la mente una pregunta ¿en qué orden se ejecutan?
Si llevas algo de tiempo en la programación web, de seguro te has dado cuenta que la ejecución no es lineal, no se ejecutará el código en el orden en que fue escrito.

La secuencia de ejecución de estos lenguajes, está íntimamente ligada al concepto de carga y ejecución de una página Web.
Por ello en base a estos 3, explicaré como funcionan y logran que funcione una página web.

1.-Lenguaje del lado del Servidor. PHP

PHP es un lenguaje que se ejecuta en el servidor (la máquina que genera la página web). Alternativas a él son ASP o JSP. PHP es un lenguaje de propósito general, muy enfocado al desarrollo web. El servidor que genera la página, debe ser capaz de entender el lenguaje PHP.

PHP es especialmente útil para comunicarse con la base de datos del servidor, la cual suele ser mySQL. PHP es usado para crear páginas con contenido enriquecido, como por ejemplo el extraído de una base de datos.

Recuerda que cuando cargas una página web, todo comienza en el servidor que contiene dicha página. Esta máquina es la que se encarga de crear y proporcionarle a tu máquina la página web. Aquí es donde entra PHP.

Se puede decir que todo el proceso comienza con PHP. PHP toma la información que deseamos de una base de datos, o simplemente construye una página de acuerdo a ciertos parámetros y variables. Es decir, PHP genera código HTML y Javascript. Generalmente PHP es usado como un generador de código. Una vez que ha creado la página , PHP envía el resultado al navegador y su trabajo termina.

Nuestros navegadores no entienden el código PHP, este es ejecutado en el servidor. Lo que nuestros navegadores entienden son HTML y Javascript, que pueden haber sido generados con PHP.  Por eso no se entrega código PHP a tu navegador, si fuera así todo el código PHP  sería ignorado. Aparecería como código fuente. Por eso PHP debe haber producido un resultado legible para el navegador.

Para mas información léase el siguiente enlace:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=607:generar-html-usando-lenguaje-php-ejemplos-sencillos-que-estudiar-para-ser-programador-web-cu00733b&catid=69:tutorial-basico-programador-web-html-desde-cero&Itemid=192


2.- Lenguaje HTML

HTML es la base de la web. Es un lenguaje de marcado. Indica como está construida una página web, que elementos contiene, cuales son hipervínculos, imágenes, objetos, etc; y como están organizados. Si quieres construir una página web sencilla, estática, solamente necesitarás HTML.

Una página web estática es aquella que nunca cambia, no responde a las acciones que hacemos, ni su contenido es actualizado dinámicamente. Será el mismo contenido siempre. Por el contrario una página web dinámica, es aquella que cambia. No siempre se presenta la misma versión de la página al usuario. Puede cambiar de acuerdo a parámetros de entrada, o diferentes variables. Incluso puede interactuar con el usuario.

Todos los navegadores entienden HTML, aunque cada uno da soporte diferente a los estándares y características de las diversas versiones de HTML.

Aún si procesaste antes tu página con PHP, al final lo que verás siempre en el navegador es producto de HTML. El código HTML  puedes escribirlo directamente, mezclado con código PHP o generarlo con PHP. Al cargar el código HTML en tu navegador se crea la página en tu pantalla.

3.- Lenguaje de Script del Navegador. JavaScript.

Supongamos que quieres crear una web dinámica. Un primer paso es usar PHP. Cada vez que saltes entre páginas, dependiendo a parámetros que hayas dado, o información contenida en la base de datos, PHP podrá construir una versión diferente de la misma página. 

Pero supongamos que quieres algo más. Quieres que la misma página responda a eventos que tu realizas mientras estás en ella, que se comporte como un programa de propósito general. Un evento es una acción que el usuario realiza en la interfaz, puede ser la pulsación de una tecla, el oprimir un botón, el click secundario del ratón, etc. También lo son  las acciones de los objetos de la interfaz gráfica (load, close), como lo son las ventanas, Si has programado en Visual Basic, estarás muy familiarizado con el manejo de eventos

Existe un lenguaje estándar para crear páginas web dinámicas, que respondan a eventos. Es JavaScript, todo los navegadores lo entienden. Existen alternativas como Dart y TypeScript.

Con Javascript puedes manejar todos los eventos y hacer que tu página web actúe de una forma dinámica. Puedes esperar a que el usuario pulse una tecla, apriete un botón, arrastre el mouse; y actuar en consecuencia. Te permite manipular directamente los elementos HTML y modificar su estado, forma, color, posición y diversas propiedades.

El código Javascript, va embebido dentro de HTML. Actúa por lo general cuando se ejecuta cierto evento.

Por supuesto, si generaste tu página con PHP, este te permite a su vez generar código JavaScript, que es algo que el navegador entiende junto con HTML. Al final, en tiempo de ejecución, el usuario interactúa directamente solo con el código escrito en JavaScript. Digamos que una vez que HTML terminó de crear la página, le cede a JavaScript el mando; y Javascript interactuara con el usuario hasta que este cierre la página. 

Una página web puede estar escrita solo en HMTL; usando PHP y HTML; usando HTML y JavaScript, o combinando los 3.

Con estas 3 herramientas, podemos lograr crear una página web realmente poderosa. Sin embargo, hasta aquí hay un pequeño inconveniente. ¿No lo ves?

Bueno digamos que toma un tiempo entender el "orden de ejecución" de una página web. Mas por que las en webs modernas se suelen mezclar los 3 lenguajes a diestra y siniestra. Y lo primero que nunca debes olvidar, es que el código no se ejecutará en el orden en que está escrito, como si fuera programación estructurada, más bien sigue el curso descrito arriba.

Tomando en cuenta este orden de ejecución, surge un pequeño inconveniente. Si notas, la comunicación con la base de datos del servidor...esta en PHP. Se ejecuta en el servidor que contiene la BD y solo mediante código PHP, y todo eso se hace antes de cargar la página en tu navegador. Es decir JavaScript es todo lo bonito y dinámico que quieras, pero no puede comunicarse con la base de datos. Nuestra web ya no es tan dinámica ¿no es cierto?

Si yo le pido a mi web ciertos datos de mi base de datos, usando JavaScript, este no puede dármelos. De esa manera, no puedo actualizar dinámicamente los elementos de mi web, al menos mediante la Base de Datos.Una opción, sería que llamara una nueva página, de acuerdo a esos parámetros, y se haría todo el proceso de nuevo, empezando por crear la nueva página con PHP en base a la consulta. Es  un resultado que funciona, pero ya no parecería un programa de escritorio de propósito general. Fácilmente podría implementarlo con una serie de páginas. Cada que yo solicite algo a la base de datos, Javascript mandaría llamar una nueva página que mediante PHP hace el trabajo. Esto implicaría estar cargando nuevas páginas constantemente.

Pero ¿y si yo quisiera que todo el trabajo se hiciera en una sola página? Que fuera una página dinámica que me trajera resultados de la base de datos y se refrescara en consecuencia, sin necesidad de cargar una nueva página. Bueno, no puedo alterar el proceso de carga antes descrito. Pero si existe una poderosa herramienta para comunicar JavaScript y PHP, que permite realizar este truco. Se llama AJAX.

4.- AJAX

AJAX significa Asynchronus JavaScript And XML. No es un lenguaje de programación sino una herramienta para comunicar JavaScript y PHP, es decir realizar peticiones a tu servidor, sin necesidad de recargar la página. Digamos que permite a JavaScript enviar un mensaje a un script de PHP, el cual se ejecutará en el servidor, sin interferir con la ejecución de la página, y al final enviará una respuesta.

Ya sabemos que por lo general, JavaScript y PHP no viven juntos. Uno se ejecuta antes del otro, y uno vive en el servidor web, y el otro en tu navegador.

Pero usando AJAX, pueden comunicarse y convivir. Imaginemos que pides información de tu base de datos. JavaScript, mediante AJAX, invoca un script de PHP hecho para realizar dicha consulta. Mientras la página sigue con su ejecución normal, JavaScript sigue respondiendo a los eventos y te permite seguir interactuando. Digamos que el script de PHP termina, entonces te envía una bonita respuesta, en forma de string. Cuando recibes esta respuesta, el script de PHP ya ha terminado su ejecución. JavaScript, mientras seguía en ejecución, permaneció escuchando la petición AJAX, hasta que ahora recibe su respuesta.

La respuesta que recibes vía AJAX de PHP es siempre un string, pero este puede ir formateado como archivo JSON o XML, o ser un simple "hola".

JavaScript debe saber interpretar  esa respuesta, y en base a ella, presentartela en el navegador. Por ejemplo puede presentarte una bonita tabla, con el contenido de tu base de datos.
Y así ¡vuala! Una página web completamente dinámica, gracias a AJAX.
Para mas información, lee este enlace.



Finalmente te dejo un enlace que resume un poco que son páginas estáticas y dinámicas y ue lenguajes se utilizan en el desarrollo web:

https://gmake.wordpress.com/2011/12/10/que-debo-saber-para-ser-disenadorprogramador-web/


Resumiendo un poco, el proceso de carga y ejecución sería así:

1.-  Se envía la solicictud al servidor. Este la recibe y comienza el proceso de construir la página web. Si existe código PHP, se ejecuta en este momento, se hacen todas las consultas a la Base de Datos. El resultado es una página con HTML y tal vez JavaScript.

2.- Tu navegador recibe la página, interpreta y usa el HTML para construirla. La tienes en pantalla.

3.- Mientras interactúas con la página, todo es procesado por Javascript. Interactúara contigo respondiendo a tus eventos, hasta que cierres la página.

4.- Si necesitas una consulta a la BD, para no cargar otra página, se puede utilizar la tecnología AJAX que permite a JavaScript mandar peticiones a scripts de PHP. Javascript recibe como respuesta cadenas de texto, y en base a la respuesta puede dibujar nuevos elementos de la interfaz gráfica o cambiarlos. Tienes una página interactiva.






viernes, 11 de diciembre de 2015

¿Por que aparece codigo fuente PHP cuando quiero visualizar mi página web?

Quizá a todos nos ha pasado. Estás iniciandote en el mundo de la programación web. Con gran ilusión haces tus primeras páginas. Ya tienes una página lista, la subes a tu host y tecleas lleno de esperanza la dirección en el navegador, esperando ver el resultado.

Y de repente....aparece una maravillosa página llena de......código fuente de PHP. Si incluiste código HTML (lo que es usual, las páginas suelen ser una curiosa mezcla de PHP, Javascript y HTML), este código hace lo que debe, poniéndote los elementos como deben aparecer; pero la parte de PHP aparece como código fuente simplemente, como si el navegador no hubiera entendido que tenía transformarlo a resultados.

¿Que fue lo que sucedió?

Pues exactamente, eso, el servidor no supo interpretar el código PHP, y simplemente lo envió como texto. El navegador simplemente tomó ese texto y lo puso en pantalla.

Si recibiste la adecuada instrucción para desarrollar páginas web (lo cual no es usual) ya conoces como funciona PHP. Mas adelante estaré explicando a rasgos generales, como es el proceso de creación y ejecución de una página web.  Ahora te diré que PHP se ejecuta en el servidor donde esta alojada tu página web. Genera arroja resultados en HTML o Javascript, porque esto es lo que el navegador entiende. Es decir, el navegador no entiende el código PHP, para el no significa nada.

Entonces el problema es que tu servidor, no está entendiendo el código PHP y no lo ejecuta, lo manda tal cual navegador. Y el navegador, lo muestra como simples líneas de texto.

¿Cual es la razón de esto?

Pueden ser varias, aquí algunas de las mas frecuentes:

1) PHP no esta bien instalado/configurado.
Revisa a fondo tu instalación. Revisa a fondo los parámetros del php.ini . Si en necesario, y puedes hacerlo, reinstala PHP. Para saber si este es el problema, intenta ejecutar varias páginas diferentes, si todas fallan, probablemente sea tu instalación de php.

2)El archivo que subiste esta corrupto, no es reconocido como archivo PHP.
Revisa bien la extensión de tu archivo  (debe ser .PHP) y el formato. Si no es reconocido como un archivo de PHP, no se ejecutará el código. Si solo falla un archivo puntual, esta puede ser la causa.

3) El archivo .htacces esta corrupto.
El archivo .htacces es muy útil. Sin embargo es también delicado. Pon una línea donde no debes, y el archivo ya no servirá. Eso fue lo que me paso a mi. Y si tu archivo .htacces esta mal, tu servidor no va a saber reconocer los tipos de archivo, incluidos los PHP. Y si no sabe que es un archivo PHP, no lo ejecutará. Siempre es bueno tener un respaldo del archivo .htacces, para restaurarlo en caso de ser necesario. Si recientemente modificaste este archivo, y ahora solo ves código fuente de PHP en tus páginas, esa es la causa.

4)Etiquetas <?
Si,  al parecer algunas versiones de PHP requieren que uses explícitamente <?php en lugar de <? . Prueba cambiar las etiquetas, ya que puede ser que todo lo que esté encerrado con <? no sea reconocido como PHP. Si ves que solo ciertas secciones de código fallan, esta puede ser la causa.

Es frustrante cuando el servidor no te entiende, y no se da cuenta que PHP es un lenguaje de programación, pero con suerte, podrás resolver ese problema.





jueves, 10 de diciembre de 2015

Envío de archivos XML vía CURL (comunicación entre servidores)

Continuando mis trabajos con la página web, se me presenta la siguiente situación:

Tenemos una base de datos local, en el servidor de producción de la empresa, que es donde tenemos el catálogo y el inventario de productos. Esta base de datos debe estar sincronizada con la base de datos de GO DADDY, donde está alojada nuestra página web.

Para cargar los datos en nuestra página web, lanzamos un script desde la página que se conecta a nuestro servidor local, y le pide a un script un archivo XML con los datos para actualizar la base de datos que tenemos en el servidor de GO DADDY. Esto es sencillo ya que desde la página controlamos cuando queremos actualizar la base de datos lanzando este script, generalmente es una tarea automatizada que lanzamos cada cierto tiempo.

Ahora bien, se trata de una página de ventas. Al hacer una venta, es necesario que se refleje la salida del inventario de los artículos que vendimos, pero no solo de la base de datos de GO DADDY, si no también del servidor local de nuestra tienda.

No se puede aplicar el método inverso que usamos para actualizar la base de datos de la página web, ya que implicaría lanzar el script desde el servidor local, y no puede ser así, ya que las acciones se disparan en la página web por una venta en línea.



¿Entonces qué puedo hacer para actualizar mi servidor local? La respuesta es que necesito lanzar desde mi host de GO DADDY, la ejecución de un script en el servidor local de la empresa, y enviarle a este un XML para que lo procese.

El archivo XML contendrá las modificaciones que debe realizar a la base de datos, en específico las existencias de los artículos que deberá modificar.

¿Como puedo lograr esto?

Bueno es aquí donde entra CURL, una magnífica herramienta de PHP que permite la comunicación entre servidores. Específicamente lo que hace CURL, es ejecutar una URL que le indiquemos , permitiendo el envío de parámetros POST y GET, además de permitir recuperar la respuesta de la página. Un poco mas sobre CURL en los siguientes enlaces:

https://es.wikipedia.org/wiki/CURL
http://www.redinfocol.org/documentacion-curl-un-poderoso-aliado-en-la-seguridad-web/

Lo que voy a hacer, es crear 2 scripts. El primero, en mi servidor GO DADDY, que creará el archivo XML, y lo enviará al servidor local utilizando CURL. Lo llamaré actualizaInventario.php .

El segundo script estará en mi servidor local esperando a ser invocado. Cuando se le invoque, esperará recibir por medio de POST, un archivo XML. Puede ser tanto vía un script que lo redireccione,  como vía CURL. Este script leerá el XML y lo utilizará para ejecutar un query a mi base de datos local y actualizarla. Llamaré a este script ActualizaExistencias.php .


Script actualizaInventario.php

Lo primero que necesitamos, es crear nuestro XML. Así que procedo a crearlo:

$buffer= '<?xml version="1.0"?>           
  <Lista>';
while($item=$qryLista->fetch_object()){

$queryArt = queryOne ("SELECT nDisponibles, nAlmacen FROM InvArticulosPresenta where nPresentacion=$item->nPresentacion");
$nDisponibles = (int) $queryArt->nDisponibles - $item->nCantidad;  //calculo restantes
$queryAct = "UPDATE InvArticulosPresenta SET nDisponibles=$nDisponibles, bEstatus=1, nAlmacen=$item->nAlmacen WHERE nPresentacion=$item->nPresentacion";
queryVoid($queryAct); //actualizo mi base de datos local

//a continuacion voy creando el XML que mandaré al servidor de TEST
$buffer.= '<item>
<i>'.$i.'</i>
<nArticulo>'.$item->nArticulo.'</nArticulo>
<nAlmacen>'.$queryArt->nAlmacen.'</nAlmacen>
<nPresentacion>'.$item->nPresentacion.'</nPresentacion>
<nDisponibles>'.$nDisponibles.'</nDisponibles>
</item>'; $i++;
}
$buffer.= '</Lista>';

Este script primero actualiza mi BD de datos de la página web, montada en el host de Go Daddy, con las existencias actuales, restando la cantidad por la que se hizo la venta. Una vez hecho esto, tiene la tarea de crear el XML que se enviara a mi servidor local para que sea actualizado con los mismos datos.

Aqui lo mas importante es usar el TAG <?xml version="1.0"?>, y no olvidar también etiquetar correctamente los elementos de nuestro XML.

Todo el XML se crea y se guarda en la variable string llamada $buffer

A continuación hago lo siguiente:

$url =WebVar('DirCoxSystem')."/ActualizaExistencias.php";  //script que invocare en TEST via CURL
$prexml = $buffer;

Lo cual es simplemente indicarle en que ruta esta el script php que voy a llamar. La variable DirCoxSystem , contiene el host a donde me conectare. Por ejemplo podria tener http://180.163.245.257/ o cualquier otra direaccion válida. Es decir que el contenido de la variable $url es la direccion de mi script, podría ser algo así: 'http://180.163.245.257/ActualizaExistencias.php'

Posteriormente, efectuó la conexión con CURL:

//Iniciamos una sesion cURL
$soap_do = curl_init();
//Indicamos a donde deseamos enviar nuestro post
curl_setopt($soap_do, CURLOPT_URL,$url );
//Indicamos lo que queremos enviar en nuestro post, en este caso un xml
curl_setopt($soap_do, CURLOPT_POSTFIELDS,$prexml);
//Configuramos los headers necesarios. En este caso es importante la definición de la longitud de los datos a enviar
curl_setopt($soap_do, CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($prexml),'Host: xml.xxx.com' ));
//Añadimos una opción más para poder almacenar la respuesta en una variable
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, 1);
//Ejecutamos el curl y almacenamos la respuesta en una variable
$respuesta=curl_exec($soap_do);

Básicamente este es el proceso para conectarse vía CURL y enviar la información correspondiente, se pueden destacar las siguientes líneas.

curl_setopt($soap_do, CURLOPT_URL,$url );
En esta línea, indico la dirección URL a ejecutar.

curl_setopt($soap_do, CURLOPT_POSTFIELDS,$prexml);
Defino los campos POST que voy a enviar. En este caso es un XML, pero podría ser una lista de campos como ocurre en los formularios normales.

curl_setopt($soap_do, CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded''Content-Length: '.strlen($prexml),'Host: xml.xxx.com' ));
Aquí indicamos que lo que se enviará será un XML, además, es importante poner la longitud del mismo.

curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, 1);
Le indicamos al darle el parámetro 1, que recibir la respuesta que nos de la página.

Finalmente mediante curl_exec, ejecutamos nuestra URL indicada, con el header y los datos que le hemos pasado vía POST. Una vez hecho esto el control pasa al script que mandamos ejecutar. Sin embargo, una vez que termine su ejecución, de inmediato le devolverá el control al script que lo invoco.

Y es por eso de las siguientes líneas:

echo $respuesta;

if(curl_errno($soap_do))
{
    echo 'error:' . curl_error($c);
}
//Cerramos nuestra sesión
curl_close($soap_do);

Primero que nada muestro en pantalla la respuesta que recibi. Y después checo si se generó algún error,  y lo imprimo en pantalla.

Script ActualizaExistencias.php

Este script está preparado para recibir el XML vía POST. Una vez que lo reciba lo utilizará para actualizar la base de datos local. Por ello comienza así:

$getxml = trim(file_get_contents("php://input")); // get raw post data + trim out the spaces, cargo mi XML enviado desde la pagina

$xmlsimp = simplexml_load_string($getxml);

La primera línea utiliza el método file_get_contents para leer el contenido de "php://input". En 
php://input se guarda el contenido completo de lo que nos llega vía POST. Así que literalmente estamos tomando todo lo que nos llega, y poniéndolo en una variable string. Para más información leer los siguientes enlaces:

La siguiente línea, toma esa variable string y mediante la función simplexml_load_string, lo convierte en un objeto XML. Mas información sobre esta función en el siguiente enlace:

Una vez hecho esto, lo que queda es la mas sencillo. Ya con el XML, se obtienen los datos para ejecutar un query en la base de datos local.

foreach($xmlsimp as $item){ 
        $queryAct = "UPDATE InvArticulosPresenta SET nDisponibles=$item->nDisponibles, bEstatus=1, nAlmacen=$item->nAlmacen WHERE nPresentacion=$item->nPresentacion";
        $error = queryReturn($queryAct);
$i++;
        echo $error;
}

Mediante un for each se recorren los elementos del XML. La variable $item tiene la estructura del XML , así que sencillamente accedemos a sus elementos como nAlmacen, nArticulo o nDisponibles. Además imprimo si ocurre un error al efectuar el query, para así visualizarlo como salida en el primer script que ejecute. Todo lo que imprima con echo, será regresado al script actualizaInventario.php y ahí podré visualizarlo en pantalla.

Para este ejercicio he obviado la parte de las conexiones a la base de datos y la ejecución de los querys, pues pertenecen a otro tema.

Así pues de sencillo es el paso de información vía XML y CURL, que puede resumirse en los siguientes pasos:

1.-Creación del XML en script1.
2.-Envío del XML vía CURL al script2.
3.-Recepción del XML, y uso (por ejemplo actualizar una BD en otro servidor)
4.-Recepción de la respuesta del script2.

CURL es una herramienta poderosa para comunicación entre servidores web, 





miércoles, 9 de diciembre de 2015

Enviar E-MAIL a traves del host GO DADDY

Como parte de la página web que estoy desarrollando, una funcionalidad muy importante es la enviar emails, ya sea cuando se registra un usuario, se hace una compra, o se quiere contactar a la empresa.

Para hacer esto en php, existe una clase llamada phpMailer. Puedes obetenerla en el siguiente link:
https://github.com/PHPMailer/PHPMailer

En este enlace encontraras como instalarla y algunos ejemplos:
http://www.islavisual.com/articulos/desarrollo_web/clase-phpmailer-para-el-envio-de-correos-a-traves-de-smtp.php

Ahora bien, como he comentado, nosotros tenemos la página web en el host de GO DADDY. Y queremos utilizar el correo que se nos proporciona, para hacer el envío de los email.

Para empezar nuestro script debe tener las siguientes lineas:

require("includes/phpMailer/class.phpmailer.php");
require("includes/phpMailer/class.smtp.php");

Por medio de ellas incluimos las librerías de phpMailer. La ruta puede ser cualquiera donde hallamos colocado la librería, para este ejemplo es /includes/phpMailer/.

A continuación un ejemplo de como generar un mail:

 $mail = new PHPMailer();
$mail->PluginDir = "phpMailer/";
$mail->Mailer = "smtp";
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = "ejemplo.com.mx";
$mail->Port = 465;
$mail->Username = "mail@ejemplo.com.mx";
$mail->Password = "contraseña";
$mail->SMTPSecure = "ssl";
$mail->From     = 'mail@ejemplo.com.mx';
$mail->FromName = 'Mi Nombre';
$mail->AddAddress($email);
$mail->AddBCC('mail@ejemplo.com.mx');
$mail->AddReplyTo($email);
$mail->WordWrap = 200;
$mail->IsHTML(true);
$mail->Subject  =  utf8_decode("Hola, este es el subject de tu mail");
$mail->Body     =  utf8_decode("Este es el cuerpo del mensaje, Aqui escribe lo que quieras");
if($mail->Send()) {
              echo "<p>Tu mensaje ha sido enviado correctamente.
         </br>En breve nos pondremos en contacto contigo.</p>";
            }
           else{ echo '<p>Error: no se puedo enviar '.$mail->ErrorInfo.'</p>';    
           }

Revisemos algunas lineas:

 $mail->Host = "ejemplo.com.mx";
$mail->Port = 465;
$mail->Username = "mail@ejemplo.com.mx";
$mail->Password "contraseña";

Estas líneas son clave para la conexión con nuestro servidor de correo saliente SMTP. Los datos para nuestro host de GO DADDY, los podemos ubicar en la sección de Correo Electronico, Cuentas.



Ahi aparecen tus cuentas de correo. Elige la cuenta que quieras utilizar. En el extremo derecho, aparece la opción More. Da click en esa opción y aparece a su vez la opción Configure Email Client. Selecciona esta opción. Se abrirá una nueva pantalla.


En esta pantalla tenemos los datos que necesitamos para configurar nuestro envío de mails. En la parte inferior donde dice Outgoing Server, en la sección Secure SSL/TLS Settings, viene tanto el host, como el port que usaremos para la conexión. Generalmente el puerto, es el 465. El userName se encuentra en la parte superior. Lo único que no podemos ver es el password, el cual debemos conocer de memoria.

Con estos datos, ya podemos conectarnos a GO DADDY via SMTP. Además explicare algunas otras líneas.

$mail->From     = 'mail@ejemplo.com.mx';
Esta línea contiene el encabezado from, de quién envía el correo electrónico, debe coincidir con nuestro userName de GO DADDY.

$mail->AddAddress($email);
Esta línea contiene la dirección a la que enviaremos el correo. Puedes capturarla previamente vía un formulario.

$mail->Subject  =  utf8_decode("Hola, este es el subject de tu mail");
$mail->Body     =  utf8_decode("Este es el cuerpo del mensaje, Aqui escribe lo que quieras");
Por supuesto debes incluir un encabezado, o asunto, y el cuerpo del correo.

if($mail->Send()) {
              echo "<p>Tu mensaje ha sido enviado correctamente.
          </br>En breve nos pondremos en contacto contigo.</p>";
            }
           else{ echo '<p>Error: no se puedo enviar '.$mail->ErrorInfo.'</p>';    
           }

Estas líneas son muy importantes. Siempre puede ocurrir que halla un error al enviar el correo. la instrucción $mail->Send() hace el envío del correo electrónico, retornando true si logra enviarlo con éxito. En caso contrario, usamos $mail->ErrorInfo para examinar el error obtenido.

Y así fácil, ya tenemos listo el envío de correos, vía el servidor SMTP de GO DADDY.


martes, 8 de diciembre de 2015

Xsltprocessor not found en Go Daddy - Configuración de PHP en Go Daddy

Mi primera entrada viene con un problema bien específico. Más que nada porque es difícil investigar en Internet sobre estos temas, y es refrescante encontrar información en mi idioma y específica.

Actualmente trabajo en el desarrollo de una página web en PHP que incluye cobro electrónico de productos, así que entre otras cosas estoy programando la facturación electrónica.

Dentro del código se encuentra la siguiente línea:

$xslt = new XSLTProcessor();

Aquí es donde comienzan los problemas pues al pasar la ejecución por esa línea del script manda el siguiente error:

Fatal error: Class 'XSLTProcessor' not found

Este código sin embargo se que funciona, pues lo obtuve de otra parte del sistema de facturación electrónica de la empresa.

Investigando un poco en Internet me encuentro con una explicación bien sencilla, la clase o módulo XSL no esta cargada. Aquí una explicación de como cargarla en Linux y en Windows:

De hecho según la documentación oficial, la clase XSL esta instalada por default en PHP 5:

Ahora bien mi problema en particular es que tenemos alojada la pagina web de la empresa en el host de GO DADDY. Eso complica un poco las cosas. Investigando mas a fondo, descubrí que el problema con GO DADDY es la versión de PHP. GO DADDY toma por default la versión 4 de PHP y por eso da problemas cuando quieres utilizar esta clase.

Entonces la solución mas simple, es cambiar tu versión de PHP. ¿Como lograr esto? He aquí el manual de GO DADDY:

Para dejarlo mas claro, una vez logueado en CPanel:
1.- Vas a la sección Sofware
2.- Eliges la opción Selecciona la versión de PHP


3.- Una vez seleccionada la opción , elige en el combo siguiente la versión deseada. Yo escogí la 5.5

4.- Aparecerá en automático una pantalla para seleccionar los módulos de PHP. Esto es muy importante.Siempre que quieras cargar un modulo específico que no esta aun cargado en el servidor, seleccionalo en esta pantalla.


5.- Hay otra opción importante. En la parte superior izquierda, Dice Switch To PHP Options. Si das click ahí verás algunas opciones muy interesantes.


6.- Y lo abres ¿y que ves? Así es ...muchas de las opciones que habitualmente seteas en un archivo php.ini. Explicare algunas:




allow_url_fopen: Muchos sitios web, necesitan abrir archivos , ya sea imágenes o de otro tipo mediante la instrucción fopen de php. Sin embargo esto solo será posible si tienes la opción ON en esta línea.

display_errors: Quizá te ha pasado muchas veces....corres tu script y aparece una maravillosa pantalla en blanco en el navegador. Tu intuición te dice que algo va mal, pero no aparece en pantalla ninguno de los preciados códigos de error en PHP. Y es que para que eso suceda, necesitas poner esta opción en ON. De lo contrario no verás ningún error en pantalla, y el debugueo será especialmente difícil.

error_reporting: Define, de todos los niveles de error que ocurren en tu script, cuales serán reportados.Para mas informacion : http://php.net/manual/es/errorfunc.constants.php. Yo elegí E_ALL...por que amo ver mis errores (esta opción me reporta todo).

file_uploads: Existen diversas instrucciones en php que permiten subir archivos desde tu máquina local al servidor. Son muy útiles para construir una página web dinámica, donde tienes un panel de control para subir imágenes y contenido a tu web e irla creando dinámicamente. Lo cual no será posible, a menos que tengas esta opción en ON (permite la subida de archivos vía PHP).

log_errors: Indica si deseas guardar un log de los errores PHP

max_execution_time: El tiempo que el servidor permitirá ejecutarse a un script php sin recibir respuesta. Si vas ejecutar scripts que por ejemplo carguen imágenes o archivos de gran tamaño, incrementa esta cantidad o de lo contrario el servidor truncara tu script y lo cerrará. Aplica igual cuando haces querys complicados que exigen esperar largo tiempo a la Base de Datos. El tiempo se mide en segundos.

memory_limit: El límite de memoria que podrá utilizar tu script. Incrementalo si lo usaras para cargar imágenes o archivos grandes.

post_max_size: El límite de memoria usado para datos POST. Quizá creas que no es necesario tener un valor grande, pero recuerda que via POST no sólo puedes manejar texto, sino también XML. Incluso se usa para subir archivos y se recomienda que sea superior al parámetro upload_max_filesize que explicaré más adelante.

upload_max_filesize: Es el tamaño máximo que puede tener un archivo subido mediante un script php. Los parámetros post_max_size y el memory_limit deben ser superiores a este valor.

Para una referencia mas completa de estos valores:

Como puedes ver estos valores son muy útiles al trabajar con PHP. En esta parte del CPanel de GO DADDY encontramos la mejor forma de configurar nuestro PHP a la medida.

Espero les sirva.