• User Newbie

    notifica ipn paypal

    non so se sono nel posto giusto.
    è un po di tempo che cerco di risolvere un problema con la notifica di pagamento di paypal
    lo script è il seguente:
    $req = 'cmd=_notify-validate';
    foreach ($_POST as $key => $value)
    {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
    }
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Host: ww.sandbox.paypal_com:443\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

        $fp = fsockopen ('ssl://ww.sandbox.paypal_com, 443, $errno, $errstr, 30); 
        $subject = "Problema IPN1"; 
        $message = "Si è verificato un problema nella seguente transazione:\r\n\r\n"; 
        $message .=$errno. $errstr ; 
        mail(ADMIN_MAIL,$subject,$message,"From: noreply<$from>"); 
        if (!$fp) 
        { 
            // HTTP ERROR 
            // $errstr - $errno 
            $this->sendReport(); 
            return FALSE; 
        } 
        else 
        { 
            fputs ($fp, $header . $req); 
            while (!feof($fp)) 
            {   //$this->sendReport(); 
                $res = fgets ($fp, 1024); 
                $subject = "Problema IPN2"; 
                $message = "Si è verificato un problema nella seguente transazione:\r\n\r\n"; 
                $message .=$res. $fp ; 
                mail(ADMIN_MAIL,$subject,$message,"From: noreply<$from>"); 
                if (strcmp($res, "VERIFIED") == 0) 
                { 
                    fclose ($fp); 
                    return TRUE; 
                } 
                else if (strcmp ($res, "INVALID") == 0) 
                { 
                    //se la procedura non è legittima invia un email all'amministratore 
                    $this->sendReport(); 
                    fclose ($fp); 
                    return FALSE;  }}}
    

    mi arrivano 3 messaggi sia Problema IPN1 che Problema IPN2
    quindi lo script entra dentro il while è fa il controllo della variabile $res solo che è come se fosse vuota o nulla.
    ecco cosa mi arriva come dati nelle email:

    • leggenda:
      a->$res
      b->$fp
      A->$errno
      B-> $errstr

    Problema IPN2 //e quindi siamo dentro il while
    a-> Date: Wed, 07 Dec 2011 13:53:23 GMT
    b-> Resource id #4

    Problema IPN1
    A ->0
    B->

    Problema IPN2
    a-> HTTP/1.0 500 Server closed connection without sending any data back
    b-> Resource id

    qualcuno sa dirmi cosa devo fare affinche mi arrivi sta benedetta risposta (VERIFIED o INVALID) da paypal?


  • User Attivo

    Ciao, prova con questo:

    $req = 'cmd=_notify-validate';

    foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
    }

    // post back to PayPal system to validate
    $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";
    $fp = fsockopen ('ssl://www . paypal.com', 443, $errno, $errstr, 30);

    // 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'];

    if (!$fp) {
    // HTTP ERROR
    } else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {
    // 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
    }
    else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
    }
    }
    fclose ($fp);
    }
    ?>

    PS: ho staccato il link "www . paypal.com


  • User Newbie

    non cambia il risultato

    ma non ho capito perchè stacchi il link? (errore o voluto)?


  • User Attivo

    Il forum non accetta link attivi, ecco perchè. 🙂


  • User Newbie

    Ahhh ok.
    Comunque non funziona lo stesso non ho capito se è un problema di sandbox o del mio host server.


  • User Attivo

    Il codice che ti ho postato è fornito da PayPal, quindi prova a chiedere al tuo servizio hosting se nell'eventualità dipendesse da "loro".


  • User Newbie

    Avevo pensato che fosse un problema loro ma non mi rispondono è un host gratuito quindi devi fare un po da solo.
    Grazie comunque.