Integrar pagos en tu tienda online -

Integrar pagos en tu tienda online

Publicado Por | 27 junio , 2013 | Blog Adrenalina | No Comments
paypal-sermepa

Cada vez es más común la creación de tiendas online para pequeñas y medianas empresas, causado por la necesidad de abrir mercado y competir con el resto de empresas del sector, incluso con los grandes. Esto viene beneficiado por una aceptación y confianza cada vez más global de los usuarios a pagar por internet. Las pasarelas de pago son cada vez más seguras, permitiendo que ganar dinero por internet a través de tu tienda online sea cada vez más sencillo.

Integrar pagos en tu tienda online

El modo más directo de tener tu tienda online, si ya tienes una web ofreciendo tus productos o servicios, es integrarla con un tpv virtual como el de La Caixa, u otros operadores de Sermepa, o integrar con una pasarela de pago de Paypal. Esto no debería ser muy complicado, pero antes debes conocer cómo funciona Paypal, o cómo se usan las tarjetas por internet y qué es un tpv virtual.

Cómo funciona Paypal

Paypal es una empresa americana que ofrece una inmensa variedad de servicios para el pago por internet. Muchas veces, lo más complicado de la integración con Paypal es saber qué servicio debes usar entre todas las opciones que ofrecen en su site. En la mayoría de casos, una integración simple y tradicional mediante el pago exprés es más que suficiente para cubrir tus necesidades.

Lo primero que debes hacer es abrir una cuenta en Paypal para poder aceptar los pagos, que podrán proceder de tarjetas de crédito o débito, o de otras cuentas de Paypal.

Pongamos el caso que ofreces en tu tienda que los usuarios añadan productos a su carrito de compra, para realizar al final la compra del todos los productos en un solo pedido.

Necesitarás integrar en dos puntos tu aplicación con Paypal. Estos son:

  • Enviar los datos a Paypal para procesar el pago.
  • Recibir la respuesta de Paypal para confirmar que el pago se ha efectuado correctamente.

Enviar los datos a Paypal

Para enviar los datos de tu carrito de compra a Paypal simplemente debes tener un formulario oculto en tu página que enviará los datos a Paypal. A continuación mostramos un ejemplo:

<form action="https://www.paypal.com/webscr" name="paypal_checkout" method="POST">
<!-- Tu cuenta de Paypal -->
<input name="business" value="usuario@tunegocio.com" type="hidden"/> 
<input name="currency_code" value="EUR" type="hidden"/>
<input name="paymentaction" value="sale" type="hidden"/>
<!-- Tu url de retorno correcto -->
<input name="return" value="http://tutienda.com/paypal_success.html" type="hidden"/> 
<!-- Tu url de retorno erroneo -->
<input name="cancel_return" value="http://tutienda.com/paypal_cancel.html" type="hidden"/> 
<!-- Tu url de notificación -->
<input name="notify_url" value="http://tutienda.com/paypal_notify.php" type="hidden"/> 
<input name="bn" value="TuNegocio_Cart_WPS_ES" type="hidden"/> 
<input name="cpp_header_image" value="http://tutienda.com/logo.png" type="hidden"/>
<input name="cpp_payflow_color" value="#FFFFFF" type="hidden"/>
<input name="item_name" value="tutienda.com" type="hidden"/>
<input name="charset" value="utf-8" type="hidden"/>
<input name="amount" value="100.00" type="hidden"/>
<input name="tax" value="21.00" type="hidden"/>
<input name="cmd" value="_cart" type="hidden"/>
<input name="upload" value="1" type="hidden"/>
<!-- El identificador de tu pedido para reconocerlo en la notificación -->
<input name="custom" value="123" type="hidden"/> 
<input name="item_number_1" value="1" type="hidden"/>
<input name="item_name_1" value="Producto 1" type="hidden"/>
<input name="quantity_1" value="1" type="hidden"/>
<input name="amount_1" value="40.00" type="hidden"/>
<input name="tax_rate_1" value="21.00" type="hidden"/>
<input name="item_number_2" value="2" type="hidden"/>
<input name="item_name_2" value="Producto 2" type="hidden"/>
<input name="quantity_2" value="2" type="hidden"/>
<input name="amount_2" value="30.00" type="hidden"/>
<input name="tax_rate_2" value="21.00" type="hidden"/>
<input name="submit" value="pagar" type="submit"/>
</form>

En este ejemplo se puede observar que tenemos en el carrito un Producto 1 de 40€ y dos Producto 2 de 30€ cada uno. El total son 100€ más iva. Es importante informar en el campo custom el identificador del pedido para encontrarlo en la notificación que manda paypal a la url indicada en notify_url.

En el action del formulario tenemos la dirección de Paypal a la que enviamos el formulario. Paypal también nos ofrece un entorno de pruebas para testear nuestra aplicación antes de realizar pagos reales. Para hacer esto simplemente hay que cambiar la url del action a https://www.sandbox.paypal.com/webscr.

Recibir la respuesta de Paypal

En la url indicada en notify_url, recibiremos un post con la confirmación del pago, que deberemos verificar y entonces marcar el pedido como pagado. Es importante que sea este proceso el que marca el pedido como pagado, y no el que se encuentra en return, ya que el return no nos verifica que el pago se haya completado con éxito.

A continuación, adjuntamos un pequeño código php para verificar la notificación de Paypal.

// 1. Recogemos todos los parámetros recibidos y la incluimos el comando de validación
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// 2. Seleccionamos la url a quien enviar la verificación dependiendo de si estamos en modo de pruebas
$url = $_POST['test_ipn'] == 1 ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr';
// 3. Hacemos la llamada de verificación
$verification = file_get_contents($url . '?' . $req);
if ($verification == 'VERIFIED')
{
// Se ha verificado la notificación. Ahora se pueden realizar checkeos complementarios de seguridad
// 1. Verificar que el id de transacción (txn_id) no se ha procesado previamente 
// 2. Verificar que el pedido (custom) existe y está pendiente
// 3. Verificar que el receptor (receiver_email) es nuestra cuenta de paypal
// Procesar el pago
return true;
}
else
{
return false;
}

Con estos dos simples pasos, ya tendremos nuestra tienda online integrada con Paypal y podremos recibir pagos online por nuestros productos.

Al escribir nuestro código que recibe la respuesta de Paypal deberemos tener en cuenta también que cualquier cambio en una orden enviada (como cancelaciones o devoluciones por parte del vendedor o del comprador) serán enviadas también a la misma url de notificación, por tanto, podremos tener nuestra tienda 100% informada del estado y evolución de los pedidos.

TPV virtual

Las siglas TPV significan Terminal Punto de Venta. Podemos entender un TPV virtual como el aparato que usamos para cobrar de las tarjetas de crédito, pero online. Si queremos vender por internet nuestros productos sin la necesidad de tener una cuenta de Paypal, recibiendo el dinero directamente en nuestra cuenta bancaria, tenemos la opción de pedir a nuestro banco la contratación de un TPV virtual. Bancos como La Caixa, el Banco Sabadell, etc. utilizan la red de Servired (sermepa), por tanto, el sistema de integración es el mismo para todos ellos.

El primer paso para integrar tu tienda con sermepa es contratar el TPV en tu banco, para obtener las claves de acceso, tanto del entorno de pruebas como el de producción. Algunos bancos como el Banco Sabadell ofrecen unos códigos comunes para pruebas generales, interesante si quieres probar la integración antes de hablar con tu banco. En el código de ejemplo utilizaremos estos códigos.

Como en el caso anterior, para la integración tendremos que crear un formulario para mandar los datos a sermepa y recibir la respuesta para marcar el pedido como completado. También tendremos un entorno donde realizar las pruebas. Las principales diferencias con el sistema anterior son:

  • Sermepa solo nos pide la cantidad total a cobrar, sin información de qué artículos hay en el carrito ni las tasas aplicadas. Es la cantidad que se restará de la tarjeta de crédito del comprador.
  • Sermepa solo manda notificación para confirmar el pago. Si posteriormente se produce alguna cancelación o devolución desde el panel de administración de sermepa, no informará a nuestra plataforma de este hecho. Es importante conocer esto para decidir los flujos de trabajo y no tener datos irreales o erróneos en la plataforma.

Enviar los datos a Sermepa

A continuación mostramos un ejemplo del formulario de envío de los datos de pago:

<?php
$message = '12100' . '123' . '327234688' . '978' . '0' . 'http://tutienda.com/sermepa_notify.php' . 'qwertyasdf0123456789';
$signature = sha1($message);
?>
<form action="https://sis-t.sermepa.es/sis/realizarPago" name="sermepa_checkout" method="POST">
<input name="Ds_Merchant_Amount" value="12100" type="hidden"/>
<input name="Ds_Merchant_Currency" value="978" type="hidden"/>
<input name="Ds_Merchant_Order" value="123" type="hidden"/>
<input name="Ds_Merchant_MerchantCode" value="327234688" type="hidden"/>
<input name="Ds_Merchant_MerchantURL" value="http://tutienda.com/sermepa_notify.php" type="hidden"/>
<input name="Ds_Merchant_MerchantSignature" value="<?php echo $signature; ?>" type="hidden"/>
<input name="Ds_Merchant_Terminal" value="001" type="hidden"/>
<input name="Ds_Merchant_TransactionType" value="0" type="hidden"/>
<input name="Ds_Merchant_UrlOK" value="http://tutienda.com/paypal_success.html" type="hidden"/>
<input name="Ds_Merchant_UrlKO" value="http://tutienda.com/paypal_cancel.html" type="hidden"/>
<input name="Ds_Merchant_MerchantName" value="tutienda.com" type="hidden"/>
<input name="Ds_Merchant_ConsumerLanguage" value="1" type="hidden"/>
<input name="submit" value="pagar" type="submit"/>
</form>

En este caso se construye una signatura usando la clave privada que proporciona sermepa (el último elemento del message). Como en el caso de Paypal, el proceso que se encuentra en la MerchantURL será el encargado de marcar la orden como correcta, no la UrlOK. Notar también que la cantidad a pagar es en céntimos (12100 = 121.00€) y que la moneda 978 son Euros. La url a la que enviamos el formulario es la del entorno real. Para realizar pruebas podemos usar https://sis-t.sermepa.es:25443/sis/realizarPago.

Recibir la respuesta de Sermepa

Al procesar la respuesta de Sermepa, no tendremos que mandar una confirmación, sino que verificaremos que la signatura de su respuesta es correcta con los parámetros que nos mandan. A continuación mostramos un pequeño código de ejemplo en php:

// 1. Recogemos los parámetros recibidos
$amount = $_POST['Ds_Amount'];
$order = $_POST['Ds_Order'];
$merchant_code = $_POST['Ds_MerchantCode'];
$currency = $_POST['Ds_Currency'];
$response = $_POST['Ds_Response'];
$tpv_signature = $_POST['Ds_Signature'];
$authorisation_code = $_POST['Ds_AuthorisationCode'];
// 2. Verificar que los parámetros requeridos no sean vacíos
if (empty($amount) || empty($order) || empty($merchant_code) || empty($currency) || empty($response) || empty($tpv_signature))
{
return false;
}
// 3. Verificar que la signatura enviada sea correcta
$message = $amount . $order . $merchant_code . $currency . $response . 'qwertyasdf0123456789';
$signature = sha1($message);
if (strtolower($signature) != strtolower($tpv_signature))
{
return false;
}
// Se ha verificado la notificación. Ahora se pueden realizar checkeos complementarios de seguridad
// 1. Verificar que la transacción existe y está pendiente
// 2. Verificar que el pedido no se ha procesado con aterioridad
// 3. Verificar que la cantidad y moneda son correctas
// Procesar el pago
return true;

Con estos dos pasos ya tendremos nuestra aplicación preparada para cobrar de las tarjetas de crédito de nuestros clientes, en un entorno seguro.

A la hora de montar aplicaciones que permitan la compra de productos es importante ser conscientes de lo que ofrecemos, tanto al cliente de la tienda online, como a la persona encargada de gestionar estos pedidos. Aquí hemos visto la simplicidad de integrar los pagos online, pero habrá que trabajar para dar seguimiento a los pedidos para reconocer el estado en el que se encuentran, mandarlos a los proveedores, realizar las entregas, etc. Dependiendo de la dificultad del negocio en si, esto se puede complicar mucho o poco, por eso en algunos casos es más rentable contratar a profesionales que ofrezcan soluciones eficientes para crear y gestionar tu tienda online.

Autor: Marçal Panareda

Estudiamos y analizamos su negocio en profundidad, definimos objetivos y planteamos la estrategia de marketing más adecuada centrándonos en conseguir cada uno de los objetivos propuestos. Solicita Presupuesto Ahora

Uso de cookies

En este sitio web utilizamos cookies propias y de terceros para mejorar nuestros servicios, para que usted tenga la mejor experiencia de usuario y analizar su visita. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.