pasarela4b

advertisement
CREATE DATABASE tiendaMW;
Indicamos que queremos utilizar esa base de datos:
USE tiendaMW;
Ahora deberemos crear la tabla que contenga los productos:
CREATE TABLE productos (
uid int AUTO_INCREMENT,
nombre varchar(40),
descripcion BLOB,
precio varchar(10),
link varchar(250),
PRIMARY KEY(uid)
);
Para crear una entrada por cada producto utilizaremos los comandos:
INSERT into productos SET nombre=”Puesta de sol”,descripcion=”Imagen con puesta de sol en
Finisterre”,precio=”60.50”,link=”foto1.png”;
INSERT into productos SET nombre=”Desarrollo de tiendas virtuales”,descripcion=”PDF con
instrucciones”,precio=”100.00”,link=”tiendaVirtual.pdf”;
INSERT into productos SET nombre=”Rock & Roll”,descripcion=”Para bailar”,precio=”9.99”,link=”cancion1.mp3”;
Crear la página con los productos. Con esto podemos empezar a desarrollar la página del listado utilizando el lenguaje PHP y que nos
permite obtener la información almacenada en la base de datos (esta será nuestra página index.php):
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Pedimos el listado de productos
$query = “SELECT * FROM productos”;
$result = mysql_query($query);
// Cabecera de la página
print “<HTML><HEAD>”;
print “<meta http-equiv=’content-type’ content=’text/html; charset=iso-8859-1’>”;
print “<Title>Mi primera tienda</title></HEAD>”;
print “<BODY>”;
print “<br>Seleccione un producto:<br><br>”;
// Tabla de productos con cabecera
print “<TABLE border=’1’ cellpadding=’5’ cellspacing=’0’><tr>”;
print “<td>Producto</td>”;
print “<td>Descripción</td>”;
print “<td>Precio</td></tr>”;
// Mostramos los productos
$count = mysql_num_rows($result);
for ($i=0;$i<$count;$i++) {
print “<tr><td><a href=’tienda.php?pid=”;
print mysql_result($result,$i,”uid”) .”’>”;
print mysql_result($result,$i,”nombre”).”</a></td>”;
print “<td>”.mysql_result($result,$i,”descripcion”).”</td>”;
print “<td style=’text-align:right’>”;
print mysql_result($result,$i,”precio”).”</td></tr>”;
}
print “</TABLE>”;
print “</BODY></HTML>”;
?>
Tal y como se puede ver en el código y aparece en la imagen, la página hace un listado con todos los productos encontrados y los
muestra en una tabla. Cada nombre es un enlace a la página “tienda.php” e incluye un identificador del producto (campo ‘uid’ de la
tabla de productos). Este identificador lo recibirá la página de la tienda y nos permitirá mostrar el producto en la misma página que se
piden los datos del comprador. Este sería el código:
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Buscamos los datos del producto
$pid = $_GET[“pid”];
$query = “SELECT * FROM productos WHERE uid=”.$pid;
$result = mysql_query($query);
// Cabecera de la página
print “<HTML><HEAD>”;
print “<meta http-equiv=’content-type’ content=’text/html; charset=iso-8859-1’>”;
print “<Title>Mi primera tienda</title></HEAD>”;
print “<BODY>”;
// Mostramos lo seleccionado
print “Ha seleccionado el producto: “;
print “<b>”.mysql_result($result,0,”nombre”).”</b> “;
print “con un precio unitario de “;
print “<b>”.mysql_result($result,0,”precio”).”</b>”;
print “<br><br>”;
// Formulario de envío de datos
print “<FORM method=’POST’ action=’conectar4b.php’>”;
// Pedimos cuántas unidades se quieren
print “Cuántas unidades desea: “;
print “<INPUT type=’text’ name=’cantidad’ value=’1’><br><br>”;
// Datos del comprador
print “Indique sus datos de facturación:<br><br>”;
print “<table border=’0’>”;
print “<tr><td>Nombre:</td><td><INPUT name=’nombre’></td></tr>”;
print “<tr><td>Apellidos:</td><td><INPUT name=’apellidos’></td></tr>”;
print “<tr><td>Dirección:</td><td><INPUT name=’calle’></td></tr>”;
print “<tr><td>C.P.:</td><td><INPUT name=’cp’></td></tr>”;
print “<tr><td>Ciudad:</td><td><INPUT name=’ciudad’></td></tr>”;
print “</table><br>”;
// Botón de continuar
print “<INPUT type=’submit’ value=’Continuar’><br><br>”;
print “<INPUT type=’button’ value=’Cancelar’ onClick=\”location.href=’index.php’\”>”;
// Mandamos de forma oculta el identificador del producto y el precio
print “<INPUT type=’hidden’ name=’pid’ value=’”.$pid.”’>”;
print “</FORM>”;
print “</BODY></HTML>”;
?>
Una vez que el usuario haya pulsado continuar, lo que deberemos hacer es guardar los datos del pedido en una tabla de la base de
datos. Posteriormente ejecutaremos código específico para conectarnos con la pasarela de pago y pedirle al usuario los datos de su
tarjeta. Para realizar eso necesitaremos una nueva página que guarde los datos y se conecte con 4B. Antes de nada deberemos crear
en nuestra base de datos la tabla correspondiente. Esto se podrá hacer mediante el código mostrado a continuación:
CREATE TABLE pedidos (
uid int AUTO_INCREMENT,
pid int,
cantidad int,
nombre varchar(20),
apellidos varchar(30),
calle varchar(80),
cp varchar(5),
ciudad varchar(20),
fecha datetime,
valido varchar(1),
PRIMARY KEY(uid)
);
Como se puede ver, la tabla permite guardar el identificador del producto, la cantidad y los datos del comprador. Además contiene un
campo en el que guardaremos la fecha de la transacción, y otro llamado “valido” en el que almacenaremos un dato cuando la pasarela
nos confirme o deniegue el pago. Así podremos a posteriori determinar si una transacción ha sido válida o no.
La página de nuestro sitio web encargada de guardar los datos y conectar con la pasarela es la siguiente (guárdala como
conectar.php):
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Ejecutamos la petición (query) para guardar los datos
$query = “INSERT INTO pedidos SET
pid= ‘” .$_POST[“pid”] .”’,
cantidad= ‘” .$_POST[“cantidad”] .”’,
nombre= ‘” .$_POST[“nombre”] .”’,
apellidos= ‘”.$_POST[“apellidos”] .”’,
calle= ‘” .$_POST[“calle”] .”’,
cp= ‘” .$_POST[“cp”] .”’,
ciudad= ‘” .$_POST[“ciudad”] .”’,
fecha=now(),
valido=0”;
$result = mysql_query($query);
// Obtenemos el identificador de la última operación que será la referencia de la compra
$lastUid = mysql_insert_id($link);
// Cabecera de la página
print “<HTML><HEAD>”;
print “<meta http-equiv=’content-type’ content=’text/html; charset=iso-8859-1’>”;
print “<Title>Mi primera tienda</title></HEAD>”;
print “<BODY>”;
// Mensaje de conexión
print “Conectando con la pasarela de pago segura...”;
// Formulario de envío de datos. Pasamos la referencia de la compra y nuestro identificador de tienda.
print “<FORM id=’payform’ action=’https://tpv2.4b.es/simulador/teargral.exe’ method=’POST’>”;
print “<INPUT type=’hidden’ name=’uid’ value=’” . $lastUid . “’>”;
print “<INPUT type=’hidden’ name=’cc’ value=’PI00005333’>”;
print “</FORM>”;
// Código para que el formulario se envíe automáticamente
print “<SCRIPT language=’javascript’>”;
print “window.onload = function () {document.getElementById(‘payform’).submit();}”;
print “</SCRIPT>”;
print “</BODY></HTML>”;
?>
Esta página realmente no tiene función para el usuario. Simplemente recibe los datos de la anterior, los guarda en la base de datos y
acto seguido conecta con 4B pasándole los datos de referencia e identificador de la tienda para iniciar la transacción. Mientras tanto el
usuario ve un mensaje de “Conectando...”. En este momento se inicia la comunicación entre los servidores que para el usuario es
transparente, es decir no nota nada de ello. Cuando se haya completado recibirá la página de pago para detallar los datos de su
tarjeta.
Lo que ahora tenemos que desarrollar es la página “interna” a la que llama el 4B para recibir el desglose de la compra. Esta página no
tendrá interfaz de usuario, es decir HTML ya que no se verá. La llamaremos “desglose.php”.
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Obtenemos los datos que nos pasa 4B
$transRef = $_GET[“order”];
$store = $_GET[“store”];
// Determinamos si tenemos un numero de pedido y el numero de la tienda es correcto
if ($transRef!=”” && $store==”PI00005333”) {
// Obtenemos los datos de la transacción y del producto
$query = “SELECT * FROM
pedidos left join productos on pedidos.pid = productos.uid
WHERE pedidos.uid=’” . $transRef . “’”;
$result = @mysql_query($query);
// Extraemos los datos para crear el resultado
$precio = mysql_result($result,0,”precio”);
$cantidad = mysql_result($result,0,”cantidad”);
$referencia = mysql_result($result,0,”productos.uid”);
$decripcion = mysql_result($result,0,”productos.nombre”);
// Calculamos el total y lo multiplicamos por cien, porque así lo requiere 4B
$total = ($precio * $cantidad) * 100;
// Precio en euros con moneda
print “M978” . $total . “\n”;
// Un elemento en la cesta de la compra
print “1” . “\n”;
// Referencia
print $referencia . “\n”;
// Descripción
print $decripcion . “\n”;
// Unidades
print “1” . “\n”;
// Precio en euros sin indicación de la moneda
print $total . “\n”;
} ?>
Podemos ver que esta página simplemente recibe unos datos y en función de los mismos obtiene los datos del pedido y del producto y
con ellos crea un resultado en formato de texto que devuelve a 4B.
Ahora, lo que tenemos que hacer es empezar a configurar nuestra pasarela. Para ello Pasat Internet pone a disposición una
completísima página web en la que podemos parametrizar todo lo que sea necesario. Deberemos acceder a la página de configuración
mediante nuestro usuario y nuestra clave para modificar los datos que correspondan. En este caso deberemos indicarle al sistema cual
es el nombre de la página que hace el desglose. Allí indicaremos la URL que tiene la página de ‘desglose.php’ en nuestro servidor.
Llegados hasta este punto, si ejecutamos una transacción con lo que tenemos, llegaremos a una página de pago estándar de 4B que
nos permitirá indicar unos datos de tarjeta ficticia para simular una transacción válida o errónea. Posteriormente veremos como
personalizar la pasarela para que aparezca una página con diseño totalmente nuestro. En este momento también podremos apreciar
una de las ventajas de utilizar este sistema ya que en modo de simulación nos indicará cuando haya algo que no esté configurado
correctamente. Así si entramos unos datos y pulsamos continuar, nos aparecerá una página diciendo que no se ha podido continuar
dado que no existe la página que se encarga de recibir el resultado de la transacción.
Ahora veremos como se desarrolla esa página. La finalidad va a ser que la pasarela nos pueda comunicar el resultado de la
transacción, antes de ir a la página de resultado, de forma que podamos guardar los datos que nos interesen en nuestra base de datos.
Podríamos utilizar la misma página que devuelve el desglose, haciendo que ella decida en que estado estamos y tomar las acciones
pertinentes. Sin embargo y para facilitar la lectura haremos una página aparte que llamaremos “resultado.php”.
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Obtenemos algunos de los datos que nos pasa 4B
$result = $_GET[“result”];
$transRef = $_GET[“pszPurchorderNum”];
$store = $_GET[“store”];
// Determinamos si tenemos un numero de pedido y el numero de la tienda es correcto y recibimos un resultado
if ($transRef!=”” && $store==”PI00005333” && $result!=””) {
// Actualizamos los datos del pedido con el resultado
$query = “UPDATE pedidos SET
valido = “.($result+1).” WHERE uid = ‘”. $transRef . “’”;
$result = @mysql_query($query);
}
?>
Una vez guardada la página en el servidor deberemos volver al módulo de administración del Pasat Internet para indicarle cual es la
página de comunicación de resultado. Hecho eso podremos probar la conexión y en función de los datos que entremos de tarjeta nos
autorizará o denegará la operación. Dicho resultado quedará guardado en la base de datos en el registro correspondiente a la
transacción en curso.
Con todo esto tenemos el esqueleto de la tienda casi terminado. Sólo nos queda por incluir una página personalizada que comunique
al usuario el resultado de la transacción. Posteriormente, incluiremos una página de pago personalizada. Con todo ello el usuario
siempre tendrá la impresión de estar en nuestra tienda. La página de comunicación final del resultado la llamaremos “final.php”. Ella
recibirá el resultado y en función del mismo mostrará un mensaje de denegación o un mensaje con el enlace para descargar el archivo
comprado. Es importante no olvidar que dicha página de recibo personalizada habrá que activarla en el módulo de configuración.
<?php
// Conectamos con el servidor y seleccionamos la base de datos
$link = @mysql_connect(“localhost”, “miusuario”, “miclave”);
$result = @mysql_select_db(“tiendaMW”);
// Obtenemos algunos de los datos que nos pasa 4B
$result = $_GET[“result”];
$transRef = $_GET[“pszPurchorderNum”];
$store = $_GET[“store”];
// Determinamos si tenemos un numero de pedido y el numero de la tienda es correcto y recibimos un resultado.
if ($transRef!=”” && $store==”PI00005333” && $result!=””) {
// Si se ha denegado lo mostramos
if ($result > 0) {
print “Operación denegada. Inténtelo de nuevo.”;
}
// Si se ha autorizado...
if ($result == 0) {
// Buscamos la transacción para obtener el número de producto y su enlace de descarga.
$query = “SELECT * FROM pedidos left join productos on pedidos.pid = productos.uid WHERE pedidos.uid=’” . $transRef . “’”;
$result = @mysql_query($query);
// Enlace al archivo
$dl = “http://www.basasoft.com/test/tiendaMW/productos/”;
$dl .= mysql_result($result,0,”link”);
// Indicamos que es buena la operación y el enlace de descarga
print “La operación ha sido autorizada. “;
print “Gracias por su compra.<br><br>”;
print “Puede descargar el archivo de:<br><br>”;
print “<a href=’”.$dl.”’>”;
print mysql_result($result,0,”productos.nombre”).”</a>”;
print “<br><br>”;
print “<a href=’http://www.basasoft.com/test/tiendaMW/’>Home</a>”;
}
}
?>
La página de pago
Como se ha indicado anteriormente, por último, lo que vamos a incluir es una página de pago personalizada. Esta página web
contendrá el código que nosotros queramos para darle la apariencia y estructura que nos guste y estará alojada en un servidor de 4B y
no en el nuestro. Dicha carga se podrá realizar mediante el módulo de configuración vía Web que además se encargará de verificar
que la página contiene todos los elementos necesarios. Dichos elementos son unas marcas especiales que se requieren para poder
identificar correctamente los campos de datos. Entre ellos se encuentra por ejemplo una marca, que la pasarela de pago sustituirá por
el importe a cargar en la tarjeta. Todo ello viene explicado con detalle en el manual de Pasat Internet. Aquí incluiremos lo más básico a
modo de ejemplo.
<HTML><HEAD>
<meta http-equiv=”content-type” content=”text/html; charset=iso-8859-1”>
<BODY>
<SCRIPT LANGUAGE=”JavaScript” SRC=”@-JSFILE-@”></SCRIPT>
<SCRIPT>@-CHECKPRIVATES-@</SCRIPT>
<br>Vamos a cargar el importe de print <b> @-IMPORIG-@ </b> en su tarjeta.<br><br>
<FORM NAME=formssl ACTION=”https://tpv2.4b.es/simulador/simul.exe” METHOD=post onSubmit=’return checkPrivates(this,
validateForm(this))’>
Numero de tarjeta: <INPUT name=”cc_number” value=””><br>
Mes de caducidad: <SELECT name=”cc_expmon”>
<option>01</option><option>02</option><option>03</option><option>04</option>
<option>05</option><option>06</option><option>07</option><option>08</option>
<option>09</option><option>10</option><option>11</option><option>12</option>
</SELECT><br>
Año de caducidad: <SELECT name=”cc_expyear”>
<option>@-ANNO1-@</option><option>@-ANNO2-@</option><option>@-ANNO3-@</option>
<option>@-ANNO4-@</option><option>@-ANNO5-@</option><option>@-ANNO6-@</option>
<option>@-ANNO7-@</option></SELECT><br>
<INPUT type=”hidden” name=”store” value=”@-STORE-@”>
<INPUT type=”hidden” name=”ordernum” value=”@-IDPEDIDO-@”>
<INPUT type=”hidden” name=”anular_fpago” value=”NO”>
<INPUT type=”hidden” name=”contador” value=0><br>
<INPUT type=”submit” value=”Comprar”>
@-CONTROLTAG1-@</FORM><br>
<IMG SRC=”@-URL ASSETS COMERCIO-@/barra.gif”>
</BODY></HTML>
Conclusión
Hemos visto, de una forma muy resumida, lo que se puede hacer mediante la integración del lenguaje PHP y MySQL con el sistema de
pagos seguros 4B, y lo que es igualmente importante: cómo llevarlo a la práctica. Dada la amplitud de la temática hemos dejado de
lado bastantes aspectos en los que se puede profundizar al desarrollar una tienda real.
Entre ellos destaca la posibilidad de un carrito de compra al que se puedan añadir o quitar productos, crear una tienda en diferentes
idiomas, inclusión de IVA en el precio, etc. En especial, hemos prescindido deliberadamente de entrar en cuestiones de seguridad que
eviten que ataques maliciosos puedan hacerse con nuestros productos sin pagar.
Esto, de nuevo, ha estado motivado por la necesidad de mantener el tutorial en una extensión razonable y que sirve como una plantilla
completamente funcional para que cada uno pueda montar su propia gestión de carrito de la compra con componentes gratuitos de
principio a fin.
Recuerda que para las tareas más árduas como pueda ser la creación de una base de datos MySQL, la definición de sus tablas y la
población de las mismas dispones de múltiples aplicaciones gráficas y que la mayoría también son gratuitas.
Finalmente, agradecer a Sistema 4B el apoyo prestado para la realización de este artículo. Es de resaltar la gran labor de Centro de
Atención Telefónica cuya ayuda inestimable ha sido fundamental en el desarrollo de ésta y otras tiendas electrónicas.
Descargar