PayPal IPN Notificacion Instantánea de Pago (II)



 

Vista general del proceso



Para recibir y procesar mensajes Notificación de Pago Instantánea
(IPN) se debe:

1 - Crear un receptor de IPN para recibir y procesar los mensajes
enviados por PayPal IPN. Para más detalles sobre la creación de un
receptor de IPN, consulte Implementación de un receptor de IPN.

2 - En la configuración de su cuenta de vendedor de PayPal, habilite
el servicio de mensajes de IPN y especificar la dirección URL de su oyente.

3 – A continuación, ejecutar el receptor de IPN en el sitio web especificado por la URL de su oyente.

Nota: Para obtener instrucciones sobre cómo utilizar las API de PayPal, la forma de utilizar el entorno de pruebas para las pruebas, y cómo mover su aplicación en la producción, véase Aplicaciones 101.


¡Hazlo!

 
Para recibir y procesar mensajes de IPN:

1. Crear un oyente que:

·       Recibe un mensaje de IPN enviado desde PayPal.
·       Confirme a PayPal que se recibió el mensaje.
·       Verifique que se trata de un mensaje de IPN válido utilizando el protocolo de enlace de petición- respuesta requerida por PayPal.
·       Procese los mensajes de IPN de acuerdo a sus necesidades.

Para crear un oyente básico que se hace eco de los mensajes de IPN en una ventana del navegador debe:

·       Capturar los mensajes de IPN de PayPal que envía a su oyente.

Después de recibir un mensaje de IPN de PayPal, debe responder a PayPal con un mensaje POST que es una copia exacta del mensaje recibido, pero con "cmd=notify-validate" agregado al final del mensaje. Anexar a su mensaje un duplicado de la notificación recibida (IPN los mismos campos y valores en el orden exacto que los recibieron):
 
 
 
 
 
<?php
// STEP 1: read POST data
// Reading POSTed data directly from $_POST causes serialization issues with array data in the POST.
// Instead, read raw POST data from the input stream.
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=', $keyval);
  if (count($keyval) == 2)
    $myPost[$keyval[0]] = urldecode($keyval[1]);
}
// read the IPN message sent from PayPal and prepend 'cmd=_notify-validate'
$req = 'cmd=_notify-validate';
if (function_exists('get_magic_quotes_gpc')) {
  $get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
  if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
    $value = urlencode(stripslashes($value));
  } else {
    $value = urlencode($value);
  }
  $req .= "&$key=$value";
}

// Step 2: POST IPN data back to PayPal to validate
$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
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);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
// In wamp-like environments that do not come bundled with root authority certificates,
// please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set
// the directory path of the certificate as shown below:
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
if ( !($res = curl_exec($ch)) ) {
  // error_log("Got " . curl_error($ch) . " when processing IPN data");
  curl_close($ch);
  exit;
}
curl_close($ch);
 


Cuando PayPal recibe el mensaje POST, envía un mensaje de vuelta a su oyente para indicar la validez de la notificación inicial. El mensaje de PayPal tiene un código de estado HTTP 200 y un cuerpo que contiene o bien VERIFICADO o NO VÁLIDO.


·       Antes de procesar el mensaje de IPN, asegúrese de que el mensaje es válido de la siguiente manera:

<?php
// inspect IPN validation result and act accordingly
if (strcmp ($res, "VERIFIED") == 0) {
  // The IPN is verified, process it
} else if (strcmp ($res, "INVALID") == 0) {
  // IPN invalid, log for manual investigation
}
?>


·       Analizar el mensaje para obtener información sobre la transacción a que hace referencia el IPN, el tipo de notificación enviada, y la situación de la operación asociada. Tomar la acción/es apropiada/s  en base a la notificación recibida :






<?php
// inspect IPN validation result and act accordingly
if (strcmp ($res, "VERIFIED") == 0) {
  // The IPN is verified, process it:
  // check whether 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 the notification
  // assign posted variables to local variables
  $item_name = $_POST['item_name'];
  $item_number = $_POST['item_number'];
  $payment_status = $_POST['payment_status'];
  $payment_amount = $_POST['mc_gross'];
  $payment_currency = $_POST['mc_currency'];
  $txn_id = $_POST['txn_id'];
  $receiver_email = $_POST['receiver_email'];
  $payer_email = $_POST['payer_email'];
  // IPN message values depend upon the type of notification sent.
  // To loop through the &_POST array and print the NV pairs to the screen:
  foreach($_POST as $key => $value) {
    echo $key . " = " . $value . "<br>";
  }
} else if (strcmp ($res, "INVALID") == 0) {
  // IPN invalid, log for manual investigation
  echo "The response from IPN was: <b>" .$res ."</b>";
}
?>
 
2 - Acceda a su cuenta PayPal Business y especifique la URL de notificación para el receptor de IPN. Para obtener instrucciones detalladas acerca de cómo especificar la URL de notificación, consulte Identificación de su receptor de IPN de PayPal. A modo de ejemplo, el servidor web donde se aloja un oyente PHP podría parecerse a la siguiente URL :


http://www.example.com/ipnListener/ipn-Listener.php



Además de activar el servicio IPN y establecer la ubicación URL de notificación a través de su cuenta de PayPal, también puede establecer la ubicación utilizando el parámetro NOTIFYURL en una llamada a la API. Al establecer dinámicamente el URL de notificación, puede configurar diferentes oyentes para diferentes necesidades (por ejemplo, si usted está manejando diferentes sitios comerciales con una sola cuenta de PayPal)


3 - Ejecutar su oyente en el servidor que aloja la URL que ha especificado como su URL de notificación en el paso 1.


Su oyente siempre debe estar accesible en la página web especificada por PayPal puede enviar notificaciones a cualquier hora del día.


Tip : Ver el código completo receptor de IPN aquí. También puede ver el ejemplo de código IPN varios lenguajes de programación diferentes aquí: Ejemplos de código IPN

Aprende más

PayPal envía mensajes de IPN para cada tipo de transacción o actualización de estado de transacción (incluyendo el pago y las notificaciones de suscripción), y cada tipo de notificación contiene un conjunto único de campos.

Es necesario configurar el receptor para manejar los campos para cada tipo de mensaje de IPN que se pueden recibir, en función de los tipos de transacciones de PayPal que admita.

Para una guía completa sobre los diferentes tipos de mensajes de IPN y los campos de datos asociados a cada tipo, consulte el Manual de Integración IPN.

Tenga en cuenta los siguientes procesos en su controlador de notificación para dirigir adecuadamente las notificaciones y para protegerse contra el fraude:


  • Utilice el valor de ID de transacción para asegurarse que aún no se haya procesado la notificación.
  • Para confirmar el estado de la transacción, y tomar las medidas adecuadas en función del valor. Por ejemplo, las opciones de respuesta incluyen el pago completado, la espera, y se les niega. No envíe el inventario menos que la transacción se haya completado!
  • Validar la dirección de correo electrónico del receptor.
  • Verificar la descripción del artículo y los costos de transacción con los que aparecen en su sitio web y catálogo.
  • Utilice los valores de txn_type o reason_code de una notificación verificada para determinar sus acciones de procesamiento. 

No hay comentarios:

Publicar un comentario