Problema IPN paypal

newbie01

Nuovo Utente
14 Gen 2014
12
0
0
Ciao a tutti, utilizzo questo codice per l'ipn di paypal, ma a quanto pare non funziona visto che non mi riporta alcun dato nel db alla fine del processo di pagamento:

Codice:
<?php
    // 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.0\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 ('http://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
 
    // converte le variabili inviate da IPN in variabili locali
    $txn_id = filter_var($_POST['txn_id'], FILTER_SANITIZE_STRING);
    $payment_status = filter_var($_POST['payment_status'], FILTER_SANITIZE_STRING);
    $receiver_email = filter_var($_POST['receiver_email'], FILTER_SANITIZE_EMAIL);
    $payer_email = filter_var($_POST['payer_email'], FILTER_SANITIZE_EMAIL);
    $first_name = filter_var($_POST['first_name'], FILTER_SANITIZE_STRING);
    $last_name = filter_var($_POST['last_name'], FILTER_SANITIZE_STRING);
    $address_street = filter_var($_POST['address_street'], FILTER_SANITIZE_STRING);
    $address_city = filter_var($_POST['address_city'], FILTER_SANITIZE_STRING);
    $address_state = filter_var($_POST['address_state'], FILTER_SANITIZE_STRING);
    $address_zip = filter_var($_POST['address_zip'], FILTER_SANITIZE_STRING);
 
    // 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 == "[email protected]"){
                     
            // connessione a MySQL tramite istanza
                    $mysqli = new mysqli("host", "user", "pass", "db");
                    $count = $mysqli->query("SELECT id_ordini FROM notifiche WHERE txn_id='$txn_id'");
 
                    // controllo sull'identificatore della transazione
                    if ($mysqli->affected_rows == 0){
                        // query per l'inserimento dei dati
                        $result = $mysqli->query("INSERT INTO notifiche (txn_id, payment_status, payer_email, first_name, last_name, address_street, address_city, address_state, address_zip) VALUES ('$txn_id', '$payment_status', '$payer_email', '$first_name', '$last_name', '$address_street', '$address_city', '$address_state', '$address_zip')");
                    }
 
                    // liberazione della memoria dal risultato della query
                    $count->close();
 
                    // 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);
    }
 
    ?>

(i dati di connessione li ho inseriti tranquilli)
Potete aiutarmi?
 

Discussioni simili