Ejecutar código cuando el usuario hace una compra en Paypal

Utilizando PDT, puedes verificar que un usuario ha realizado un compra. Si solo realizas una redirección cuando el usuario realiza una compra y compruebas sólo los parámetros GET de la dirección URL de retorno, cualquier usuario podría ir a la "página de agradecimiento" sin haber comprado nada. Esto podría ser un problema si deseas enviar un archivo al usuario, le permitiría entrar a una parte de la web que de otra manera solo podría ver si hubiera efectuado el pago en la web o se hubiera indicado en la base de datos que el pago ya está realizado.

Para utilizar PDT, lo primero que tenemos que hacer es ir a paypal.com. Loguéate y haz clic en Perfil. Una vez ahí, haz clic en Mis herramientas de venta → Preferencias del sitio web.

Ahí, tienes que activar la transferencia de datos de pago. Al hacer esto se te dará un token de identidad. Tendrás que utilizar esto en tu implementación a la hora de utilizar PDT para comprobar si un usuario ha pagado.

También es una buena idea para permitir el auto return (en la misma página). Puedes especificar una dirección URL de retorno diferente a la que hayas indicado en los botones que creaste a través de la página de PayPal.

Ahora, indica la URL a la que los usuarios van a ser redireccionados y añade el código de abajo.

El script funciona mediante el uso del parámetro GET tx que se establece cuando los usuarios son autoretornados para realizar una solicitud HTTP a PayPal, que nos devolverá si la operación se ha realizado correctamente.

$pp_hostname= "www.paypal.com"; // Change to www.sandbox.paypal.com to test against sandbox
// read the post from PayPal system and add 'cmd'
$req= 'cmd=_notify-synch';

$tx_token= $_GET['tx'];

$auth_token= "e9-YOUR IDENTITY TOKEN";

$req.= "&tx=$tx_token&at=$auth_token";

$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, "https://$pp_hostname/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
//set cacert.pemverisign certificate path in curl using 'CURLOPT_CAINFO' field here,
//if your server does not bundled with default verisign certificates.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: $pp_hostname", 'Connection: Close', 'User-Agent: YOUR_COMPANY_NAME'));
$res = curl_exec($ch);
curl_close($ch);
if(!$res){
//HTTP ERROR
}else{
// parse the data
$lines = explode("n", $res);
$keyarray= array();
if (strcmp ($lines[0], "SUCCESS") == 0) {
for ($i=1; $i<count($lines);$i++){
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
/*        $firstname = $keyarray['first_name'];
$lastname = $keyarray['last_name'];
$itemname = $keyarray['item_name'];
$amount = $keyarray['payment_gross'];
*/
//success
// set in session or database that user has paid or perform some special
// you can use information about the purchase in the variables described above
echo "You really made a payment";
}
else if (strcmp ($lines[0], "FAIL") == 0) {
// payment failed or something
echo "Payment failed";
}
}
if (!isset($_GET['tx'])) {
// user is attempting to access the page without having made any payment
echo "Invalid request";
}

Sólo tienes que añadir tu identity token a la variable $auth_token e insertar el nombre de la empresa en la cabecera User-Agent. Ya sólo queda preocuparse por lo que debe hacer tu aplicación en estos casos.

Ahora, cada vez que un cliente realice un pago con éxito, se mostrará que ha hecho un pago. Puedes editar esa línea y agregar lo que necesites implementar para el caso del pago.

El código anterior se ha cogido de https://github.com/paypal/pdt-code-samples donde se ofrecen códigos de ejemplo en varios lenguajes de programación. Fue rediseñado un poco añadiendo una cabecera User-Agent a la solicitud cURL ya que PayPal rechaza las solicitudes que no establecezcan una cabecera HTTP User Agent. Puedes añadir el nombre de tu empresa en PayPal y verificar si no hay una transacción identificada (el parámetro GET tx), en ese caso, el usuario estaría tratando de acceder a la página sin ningún rastro de una transacción.

Fuente: phpgang

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP