Salve a tutti, seguendo la guida del sito ho provato a implementare un semplice script php per creare il listener php dell'IPN di paypal... ovviamente con scarsi risultati.
codice:
<?php
$posted_data = print_r($_POST,true);
file_put_contents('IPN_data.txt',$posted_data);
// intercetta le variabili IPN inviate da PayPal
$req = 'cmd=_notify-validate';
// legge l'intero contenuto dell'array POST
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// intestazione, prepara le variabili PayPal per la validazione
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
// apre una connessione al socket PayPal
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
// converte le variabili inviate da IPN in variabili locali
$reflink = $_POST['custom'];
$refnum = $_POST['item_number'];
$receiver_email = $_POST['receiver_email'];
// verifica l'apertura della connessione al socket
if (!$fp) {
// se la connessione non avviene l'esecuzione dello script viene bloccata
exit();
// in alternativa è per esempio possibile inviare un'email al venditore
} else {
// elaborazione delle informazioni
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
// azioni in caso di risposta positiva da parte di PayPal
if (strcmp ($res, "VERIFIED") == 0) {
// controllo sull'email del venditore
if($receiver_email == "aguiari.diego-facilitator@gmail.com"){
// connessione a MySQL tramite istanza
$mysqli = new mysqli("localhost", "username", "", "my_database");
// controllo sull'identificatore della transazione
// query per l'inserimento dei dati
$result = $mysqli->query("INSERT INTO utenti (reflink, numref) VALUES ('$reflink', '$refnum')");
// liberazione della memoria dal risultato della query
// chiusura della connessione
$mysqli->close();
}
}
// azione in caso di risposta negativa da parte di PayPal else
if (strcmp ($res, "INVALID") == 0) {
// è possibile eseguire qualsiasi operazione
// per esempio compilare un log degli errori o inviare una mail al venditore
}
}
// chiusura della sorgente di dati
fclose($fp);
}
?>
Cosa c'è di sbagliato? Son quasi sicuro fallisca il controllo
codice:
if (strcmp ($res, "VERIFIED") == 0) {
E' tutto il giorno che ci sto impazzendo 
Grazie in anticipo!