Cómo saber si un click acaba en compra en otra web

«… todas las ventas las hacemos online. La cuestión es que tenemos distintos trabajadores (Relaciones Publicas) que venden entradas. Pero claro, la página de compra es única.

La cuestión es que quiero crear un sistema en php para que cada Relaciones Publicas tenga un link que redirija a la página de compra y luego saber cuántas entradas se han vendido a través de cada link. Es decir, si el click en el link de cada referido ha terminado en compra.»

Un problema bastante común: una acción que inicia en un sitio requiere la intervención de un tercero para volver a finalizar en el original.

En este caso, se trata de una compra. Como en la gran mayoría de los casos, implementar el pago (Con el procesamiento de tarjeta de crédito y demás), no es un uso muy eficiente de los recursos propios, más vale utilizar alguna pasarela (PayPal, MercadoPago o similar).

Claro que, una vez completo el pago, el procesamiento efectivo de la compra pasa nuevamente por el sitio donde el cliente ingresó.

En el caso que se expone, se agrega un elemento de complejidad: la venta debe ser atribuida a la persona que refirió al comprador.

En general, asociar al comprador al vendedor dentro de la página donde se inicia la transacción no es difícil, basta con un parámetro de la URL (Algo como referrerId que contenga un identificador de vendedor en la base de datos).

La pregunta es cómo mantener esa relación hasta después de que el pago se realice. La respuesta: una variable de sesión.

Repasemos el flujo:

  1. El usuario llega al sitio mediante una URL de tipo http://elsitio.com/init_purchase.php?referrerId=ABC-123
  2. Se guarda en una variable de sesión el identificador del vendedor (Previa validación de su existencia)
  3. Se re-dirige al usuario al sitio del procesador de pagos
  4. El usuario realiza el pago
  5. El procesador de pagos redirige al comprador nuevamente al sitio original en una URL del tipo http://elsitio.com/finalizar_compra.php
  6. El sitio levanta el identificador del vendedor de la variable de sesión y le asocia la venta para posteriormente liquidarle la comisión.

Cómo se preserva la sesión mientras el usuario navega por otro sitio

La clave para comprender esto es tener claro cómo funcionan las sesiones de PHP. Principalmente el hecho de que el identificador de sesión se almacena en una cookie del lado del cliente.

Cada cookie está asociada con el dominio donde se generó y es enviada por el navegador en cada petición subsiguiente al mismo dominio.

Es decir, en el primer ingreso a http://elsitio.com/init_purchase.php se genera una cookie que quedará asociada al dominio elsitio.com y se almacenará del lado del cliente.

Posteriormente, en cada nueva petición a una URL que comience con http://elsitio.com/ el navegador enviará dicha cookie.

De esta forma, cuando el visitante regrese a finalizar su compra, lo hará acompañado de su identificador de sesión, y de esa forma, será simple recuperar la información de quién fue el vendedor que lo atendió.

El código se verá de esta forma:

init_purchase.php

<?php

session_start();
$_SESSION['referrerId'] = $_GET['referrerId'];

?>
<html>
<head>
    <title>Init purchase</title>
</head>
<body>
    <p>You are about to make a purchase. You've been referred here by salesman <b><?php echo $_SESSION['referrerId'];?></b></p>
    <p>Click on this button to initiate payment</p>
    <button onclick="location.href='<?php echo PAYMENT_GATEWAY_ENDPOINT; ?>?callback=<?php echo urlencode('http://localhost:8000/payment_complete.php');?>'">Pay</button>
</body>
</html>

payment_complete.php

<?php
session_start();
?>
<html>
<head>
    <title>Payment complete</title>
</head>
<body>
    <p>Thanks for your purchase!</p>
    <p>The salesman <b><?php echo $_SESSION['referrerId'];?></b> will get the comission</p>
</body>
</html>

Se puede consultar una prueba de concepto completa aquí

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.