questo è il listener vero e proprio raggiunto da pay pal e che richiama la classe postata inprecedenza (class.ipnlistener.php):
Codice PHP:
/**
 * 
 * RICORDARSI DI FISSARE I PERMESSI DEL FILE E DELLA CARTELLA cacert.pem a 755
 * 
 *  PHP-PayPal-IPN Example
 *
 *  This shows a basic example of how to use the IpnListener() PHP class to 
 *  implement a PayPal Instant Payment Notification (IPN) listener script.
 *
 *  For a more in depth tutorial, see my blog post:
 *  [url]http://www.micahcarrick.com/paypal-ipn-with-php.html[/url]
 *
 *  This code is available at github:
 *  [url]https://github.com/Quixotix/PHP-PayPal-IPN[/url]
 *
 *  @package    PHP-PayPal-IPN
 *  @author     Micah Carrick
 *  @copyright  (c) 2011 - Micah Carrick
 *  @license    [url]http://opensource.org/licenses/gpl-3.0.html[/url]
 */
 
 
/*
Since this script is executed on the back end between the PayPal server and this
script, you will want to log errors to a file or email. Do not try to use echo
or print--it will not work! 

Here I am turning on PHP error logging to a file called "ipn_errors.log". Make
sure your web server has permissions to write to that file. In a production 
environment it is better to have that log file outside of the web root.
*/
ini_set('log_errors'true);
ini_set('error_log'dirname(__FILE__).'/ipn_errors.log');


// instantiate the IpnListener class
include('class.ipnlistener.php');
$listener = new IpnListener();


/*
When you are testing your IPN script you should be using a PayPal "Sandbox"
account: [url]https://developer.paypal.com[/url]
When you are ready to go live change use_sandbox to false.
*/
$listener->use_sandbox true;

/*
By default the IpnListener object is going  going to post the data back to PayPal
using cURL over a secure SSL connection. This is the recommended way to post
the data back, however, some people may have connections problems using this
method. 

To post over standard HTTP connection, use:
$listener->use_ssl = false;

To post using the fsockopen() function rather than cURL, use:
$listener->use_curl = false;
*/

/*
The processIpn() method will encode the POST variables sent by PayPal and then
POST them back to the PayPal server. An exception will be thrown if there is 
a fatal error (cannot connect, your server is not configured properly, etc.).
Use a try/catch block to catch these fatal errors and log to the ipn_errors.log
file we setup at the top of this file.

The processIpn() method will send the raw data on 'php://input' to PayPal. You
can optionally pass the data to processIpn() yourself:
$verified = $listener->processIpn($my_post_data);
*/
try {
    
$listener->requirePostMethod();
    
$verified $listener->processIpn();
} catch (
Exception $e) {
    
error_log($e->getMessage());
    exit(
0);
}


/*
The processIpn() method returned true if the IPN was "VERIFIED" and false if it
was "INVALID".
*/
if ($verified) {
    
/*
    Once you have a verified IPN you need to do a few more checks on the POST
    fields--typically against data you stored in your database during when the
    end user made a purchase (such as in the "success" page on a web payments
    standard button). The fields PayPal recommends checking are:
    
        1. Check the $_POST['payment_status'] is "Completed"
        2. Check that $_POST['txn_id'] has not been previously processed 
        3. Check that $_POST['receiver_email'] is your Primary PayPal email 
        4. Check that $_POST['payment_amount'] and $_POST['payment_currency'] 
           are correct
    
    Since implementations on this varies, I will leave these checks out of this
    example and just send an email using the getTextReport() method to get all
    of the details about the IPN.  
    */
    
    // 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'];
    
$txn_type $_POST['txn_type'];
    
//$receiver_email = $_POST['receiver_email'];
    //$payer_email = $_POST['payer_email'];
    
$pending_reason $_POST['pending_reason'];
    
$custom $_POST['custom'];

} else {
    
/*
    An Invalid IPN *may* be caused by a fraudulent transaction attempt. It's
    a good idea to have a developer or sys admin manually investigate any 
    invalid IPN.
    */