Implementar Pagosonline.net a su CMS Mambo o Joomla! Usando el Componente VirtueMart Versión 3 Contenido Última actualización: Septiembre de 2009 Copyright 2009 (C) Pagosonline.net S.A TABLA DE CONTENIDO 1. INTRODUCCIÓN 2. INSTALACIÓN DE COMPONENTE VIRTUEMART 3. CONFIGURACIÓN MEDIO DE PAGO PAGOSONLINE.NET 4. CREACIÓN PÁGINA DE CONFIRMACIÓN 5. CREACIÓN PÁGINA DE RESPUESTA 1. INTRODUCCIÓN Joomla es un CMS o Sistema Gestor de contenidos que permite construir sitios web gestionables de manera fácil y eficiente. Existen numerosos componentes que permiten agregarle funcionalidad a este sistema, entre los que se encuentra VirtueMart. Este componente implementa una tienda virtual totalmente funcional para empezar a gestionar el catalogo de su empresa. Para poder aceptar pagos con tarjeta débito y crédito a través de pagosonlilne.net, es necesario realizar una configuración de tal manera que el medio de pago quede activo y sea capaz de conectarse con nuestro sistema transaccional. Esta guía le proporciona la información necesaria para implementar esta funcionalidad y crear una página de confirmación, la cual es dedicada a la recepción de datos de pagosonline.net y mantener actualizado los estados de los pagos y una página de respuesta, que es a donde se enviará al cliente una vez finalice el pago y muestre el resultado del mismo. 2. INSTALACIÓN COMPONENTE VIRTUEMART Una vez tenga instalado el sistema Joomla, necesitamos el componente VirtueMart. Para descargarlo puede acceder a la página. http://www.virtuemart.net/. Al descargar este obtendrá un archivo comprimido .zip VirtueMart_1.x.x-COMPLETE_PACKAGE.zip, el cual contiene: • 1 Componente (com_virtuemart_1.1.x.zip) • 1 modulo principal VirtueMart (mod_virtuemart_1.1.x.zip) • 10 módulos adicionales. Los pasos de instalación del componente es el siguiente: Descomprima el paquete en un directorio local Inicie sesión como administrador (usando http://www.misitio.com/administrator) Click en Extensions # Install/Uninstall en el menú superior la URL En la parte “Upload new component” o “Upload Package File” seleccione el archivo 'com_virtuemart_1.1.x.zip'. Este paquete contiene todos los archivos del componente VirtueMat, localizado en su computador local en el lugar en donde descomprimió el paquete descargado. Presione “Upload file & install” El componente VirtueMart deberá ser instalado y verá el mensaje de bienvenida con las opciones del siguiente paso. Puede seleccionar alguna opción entre: install Sample Data (Algunos productos con atributos en categorías) ó Go directly to the Shop, para crear el catálogo. Ahora se debe instalar el modulo principal de VirtueMart. Ingresar nuevamente a Extension # install/uninstall en el menú superior. Seleccione el archivo mod_virtuemart_1.1.x.zip en la ventana de dialogo de archivos y de click en “Upload file & install”. El modulo debe ser publicado, de lo contrario no podrá ser accedido por los compradores. De esta forma ya tendrá la tienda Virtual VirtueMart instalada en su sistema. Lo puede acceder dando click en components # VirtueMart en el menú superior. 3. CONFIGURACIÓN MEDIO DE PAGO PAGOSONLINE.NET Para administrar la tienda virtual lo puede hacer ingresando a Components # VirtueMart en el menú superior. Desde allí seleccione “List Payment Methods” y siga los siguientes pasos. a). Bajo la pestaña General edite los siguientes campos: Activo?: Seleccionar esta casilla Nombre de Forma de Pago: Pagos On Line (puede editarlo a su gusto) Codigo: POL Usar Cybercash: Seleccione PayPal (or related) b). Después, en la pestaña de Configuración o (Configuration) copie el siguiente código cambiando los valores en rojo por los suyos: <?php $llave_encripcion = "00000000000"; $usuarioId = 00000; $descripcion = "Pruebas de Generacion de Firmas"; $url_respuesta = "dirección completa donde está la pagina de respuesta"; $url_confirmacion = "dirección completa donde está la pagina de confirmacion"; $refVenta = $db->f("order_id"); $valor = number_format(floatval($db->f("order_total")),2,".",""); $iva = $db->f("order_tax"); if($iva == 0) { $basevalor = 0; } else { $basevalor = number_format(floatval($db->f("order_subtotal")),2,".",""); } $moneda = "COP"; $firma= "$llave_encripcion~$usuarioId~$refVenta~$valor~$moneda"; $firma_codificada = md5($firma); ?> <form name="form1" method="post" action="https://gateway.pagosonline.net/apps/gateway/index.html" target="_blank"> <input type="hidden" name="descripcion" value="<?php echo $descripcion; ?>"> <input type="hidden" name="prueba" value="1"> <input type="hidden" name="usuarioId" value="<?php echo $usuarioId ?>"> <input type="hidden" name="refVenta" value="<?php echo $refVenta ?>"> <input type="hidden" name="valor" value="<?php echo $valor ?>"> <input type="hidden" name="iva" value="<?php echo $iva ?>"> <input type="hidden" name="baseDevolucionIva" value="<?php echo $basevalor?>"> <input type="hidden" name="moneda" value="<?php echo $moneda ?>"> <input type="hidden" name="url_confirmacion" value="<?php echo $url_confirmacion ?>"> <input type="hidden" name="url_respuesta" value="<?php echo $url_respuesta?>"> <input type="hidden" name="emailComprador" value="<?php echo $user->email ?>"> <input type="hidden" name="firma" value="<?php echo $firma_codificada ?>"> <input name="Submit" type="submit" value="Enviar Datos para realizar su pago"> </form> En la línea $usuarioId = 0000; debe que cambiarlo con el numero de usuario que se le fue asignado cuando se registro con Pagosonline. En la línea $llave_encripcion = "00000000000"; debe que cambiarlo con la llave para realizar encripciones que la encuentra en el modulo administrativo de Pagosonline. En la línea $descripcion = "Pruebas de Generacion de Firmas"; puede cambiar lo que está entre comillas por cualquier descripción que haga referencia a la compra en su sitio. En las líneas $url_respuesta … y $url_confirmacion…., entre las comillas debe colocar la dirección completa donde estará estas páginas las cuales más adelante se le explica cómo crear. Nota: El siguiente código activa el módulo de pago para pruebas. Si desea activarlo totalmente debe editar la línea <input type="hidden" name="prueba" value="1"><br> Cambiando 1 por 0, debe verse así: <input type="hidden" name="prueba" value="0"><br> c). Ahora debe crear la tabla en donde va a almacenar sus datos. Por Favor ejecute el siguiente código SQL: CREATE TABLE `pedidos_confir` ( `fecha` varchar(32) NOT NULL default '', `refventa` varchar(32) NOT NULL default '', `refpol` varchar(32) NOT NULL default '', `estado_pol` varchar(32) NOT NULL default '', `formapago` varchar(32) NOT NULL default '', `banco` varchar(32) NOT NULL default '', `codigo_respuesta_pol` varchar(32) NOT NULL default '', `mensaje` varchar(50) NOT NULL default '', `valor` varchar(20) NOT NULL default '', UNIQUE KEY `refventa` (`refventa`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 4. CREACIÓN DE LA PÁGINA DE CONFIRMACIÓN El siguiente paso es crear una página de confirmación (en donde recibe los datos suministrados por PagosOnLine para almacenarlos en una base de datos). Use el siguiente código y guárdelo en una página con el nombre confirmacion.php <?php $usuarioId = $_REQUEST['usuario_id']; $fecha = date("d.m.Y-H:i:s"); $refVenta = $_REQUEST['ref_venta']; $refPol = $_REQUEST['ref_pol']; $estadoPol = $_REQUEST['estado_pol']; $formaPago = $_REQUEST['tipo_medio_pago']; $banco = $_REQUEST['medio_pago']; $codigo = $_REQUEST['codigo_respuesta_pol']; $mensaje = $_REQUEST['mensaje']; $valor = $_REQUEST['valor']; //Escriba su Host, por lo general es 'localhost' $host = 'localhost'; //Escriba el nombre de usuario de la base de datos $login = 'nombredeusuario'; //Escriba la contraseña del usuario de la base de datos $password = 'contraseña '; //Escriba el nombre de la base de datos a utilizar $basedatos = 'mibasededatos '; //conexion a mysql $conexion = mysql_connect($host, $login, $password); if(!$conexion){ $mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al conectar la base de datos ".mysql_error()."\n"; } if(!mysql_select_db($basedatos, $conexion)){ $mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al seleccionar la base de datos ".mysql_error()."\n"; } // consulta a la bd $sql = "REPLACE INTO pedidos_confir VALUES ('".$fecha."', '".$refVenta."', '".$refPol."', '".$estadoPol."', '".$formaPago."', '".$banco."', '".$codigo."', '".$mensaje."', '".$valor."')"; // select para actualizar la bd pedidos_confir y jos_vm_orders switch($estadoPol) { case 4: $result_a = mysql_query("UPDATE jos_vm_orders SET order_status ='A' WHERE order_id=".$refVenta ,$conexion); break; case 5: $result_c = mysql_query("UPDATE jos_vm_orders SET order_status ='C' WHERE order_id=".$refVenta ,$conexion); break; case 6: $result_r = mysql_query("UPDATE jos_vm_orders SET order_status ='R' WHERE order_id=".$refVenta ,$conexion); break; case 12:$result_p = mysql_query("UPDATE jos_vm_orders SET order_status ='P' WHERE order_id=".$refVenta ,$conexion); break; } $result = mysql_query($sql); if (!$result) { $mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al ejecutar el query (".$sql.") la base de datos - ".mysql_error()."\n"; } if(strlen($mensajeLog)>0){ $filename = $_SERVER["DOCUMENT_ROOT"]."/confirmacion.txt"; $fp = fopen($filename, "a"); if($fp) { fwrite($fp, $mensajeLog, strlen($mensajeLog)); fclose($fp); } } ?> Suba este nuevo archivo utilizando un cliente ftp a la raíz del sitio. Nota: No olvide configurar la variable $url_confirmacion, en la configuración del método de pago, con el valor correcto: la ruta donde quedo guardado el script de confirmación de arriba (http://www.misitio.com/confirmacion.php). Cuando termine de crear la página de confirmación deberá modificar los estados posibles de las ordenes, para ello ingrese a la sección Orders en el VirtueMart, luego escoja Order Status -> List Order Status Types, ahí aparecerá todas los posibles estados, ahora es necesario modificar cada uno así con su respectivo código. Modificar Pending a Pendiente y poner el Order Status Code = P Confirmed a Aprobado y poner el Order Status Code = A Cancelled a Cancelado y poner el Order Status Code = C Refunded a Rechazado y poner el Order Status Code = R Shipped a Enviado y poner el Order Status Code = E Todos los estados los modifica la página de confirmación dependiendo del estado final de la transacción, el estado Enviado deberá cambiarlo manualmente dependiendo si ustedes ya han enviado el producto/servicio a su cliente. 5. CREACIÓN DE LA PÁGINA DE RESPUESTA Si lo desea puede crear una página de respuesta que le muestre al usuario el estado de la transacción. Esta página no modifica su base de datos, puede editar el aspecto visual tanto como lo desee. A continuación un código que obtiene la respuesta de pagosonline.net y la muestra al usuario. <!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=iso-8859-1" /> <!--Tiene que configurar la direccion url que aparece aqui con la url de su sitio--> <meta HTTP-EQUIV="REFRESH" content="25; url=http://www.susitio.com/index.php"> <title>Confirmación del pago</title> <style type="text/css"> <!-.Estilo1 {color: #FFFFFF} .Estilo2 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #FFFFFF; } --> </style> </head> <body> <div align="center"> <table width="500" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#0099FF"> <th width="100%" scope="col"><h1 class="Estilo1">Su pago est&aacute; siendo confirmado para procesar su orden...</h1><br /> <tr bordercolor="#000000"> <tr scope="col"><span class="Estilo5"> <td>Fecha: <?php echo(date("Y-m-d",strtotime("now"))); ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>N&ordm; de Recibo : <? echo $_GET['ref_venta'] ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>codigo pol : <? echo $_GET['ref_pol'] ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>Estado de la Transaccion: <? switch($_GET['estado_pol']) { case 1: echo "Sin abrir"; break; case 2: echo "Abierta"; break; case 3: echo "Pagada"; break; case 4: echo "Pagada y Abonada"; break; case 5: echo "Cancelada"; break; case 6: echo "Rechazada"; break; case 7: echo "En validacion"; break; case 8: echo "Reversada"; break; case 9: echo "Reversada Fraudulenta"; break; case 10: echo "Enviada Ent. Financiera"; break; case 11: echo "Capturando datos tarjeta de credito"; break; case 12: echo "Esperando confirmacion sistema PSE"; break; } ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>Forma de Pago: <? switch($_GET['tipo_medio_pago']) { case 1: echo " Tarjeta débito"; break; case 2: echo " Tarjeta de crédito"; break; case 3: echo " Tarjeta de crédito Verified by VISA"; break; case 4: echo " Cuentas corrientes y de ahorros PSE"; break; } ?> </td> </span></tr> <tr><!-- Es el medio de pago utilizado en el pago --> <td><span class="Estilo5">Medio de pago: <?php switch($_GET['medio_pago']) { case 1: echo "Colpatria"; break; case 2: echo "Bancolombia"; break; case 3: echo "Conavi"; break; case 4: echo "Popular"; break; case 5: echo "Occidente"; break; case 6: echo "AvVillas"; break; case 8: echo "Santander"; break; case 10: echo "VISA"; break; case 11: echo "Master Card"; break; case 12: echo "American Express"; break; case 14: echo "Davivienda"; break; case 22: echo "Diners"; break; case 24: echo "Verified by VISA"; break; case 25: echo "PSE"; break; } ?></span> </td> </tr> <tr scope="col"><span class="Estilo5"> <td>Banco: <? switch($_GET['medio_pago']) { case 1: echo "Colpatria"; break; case 2: echo "Bancolombia"; break; case 3: echo "Conavi"; break; case 4: echo "Popular"; break; case 5: echo "Occidente"; break; case 6: echo "AvVillas"; break; case 8: echo "Santander"; break; case 10: echo "VISA"; break; case 11: echo "Master Card"; break; case 12: echo "American Express"; break; case 14: echo "Davivienda"; break; case 22: echo "Diners"; break; case 24: echo "Verified by VISA"; break; case 25: echo "PSE"; break; } ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>Mensaje: <? echo $_GET['mensaje']; ?></td> </span></tr> <tr scope="col"><span class="Estilo5"> <td>Valor: <? echo $_GET['valor']; ?></td> </span></tr> </tr><td bgcolor="#0099FF"><br /> <h1 align="center" class="Estilo1">Gracias por comprar con nosotros! </h1> <div align="center"><br /> <span class="Estilo2">En unos momentos será redireccionado a la p&aacute;gina principal</span></div></td> </tr> </table> </div> </body> </html> Guarde el anterior script con el nombre respuesta.php y súbalo a la raíz del sitios utilizando un cliente FTP. Nota: No olvide configurar la variable $url_respuesta, en la configuración del método de pago, con el valor correcto: la ruta donde quedo guardado el script de respuesta de arriba (http://www.misitio.com/respuesta.php).