Visualizzazione risultati 1 fino 2 di 2

Discussione: fsockopen, paypal e IPN

  1. #1
    Guest

    Predefinito fsockopen, paypal e IPN

    Ciao a tutti, ho il solito problema con la creazione di un lettore IPN per verificare il pagamento tramite paypal.

    Questo è il mio codice:

    Codice PHP:

    <?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";
    }

    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Host: www.sandbox.paypal.com:80\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

    mail("miamail@gmail.com", "debug mail", "Riga: ".__LINE__.$req);

    // 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) {
    exit();
    }
    else
    {
    // elaborazione delle informazioni
    fputs ($fp, $header . $req);
    while (!
    feof($fp)) {
    $res = fgets($fp, 1024);

    // ************ QUI ARRIVA E GIRA 2 VOLTE ********************

    if (strcmp($res, "VERIFIED") == 0) {

    // ************ QUI NON ENTRA ********************

    // controllo sull'email del venditore
    if($receiver_email == " email.venditore@suoprovider.it"){


    // QUI IL MIO CODICE

    }
    }
    else if (
    strcmp($res, "INVALID") == 0) {

    // ************ QUI NON ENTRA ********************
    }
    }

    // chiusura della sorgente di dati
    fclose($fp);
    }

    ?>
    Nei commenti ho scritto dove si ferma.

    - Ho cambiato la porta da 443 a 80
    - Ho abilitato fsockopen con la spunta nel menu "Server to server"
    - Ho provato ad usare cUrl al posto di fsockopen
    - Ho provato a copiare il codice di base da altri esempi

    Alla fine il risultato è sempre lo stesso, si blocca nel controllo "VERIFIED" e non entra. Non entra neanche in "INVALID".

    Non so più che fare...help T.T
    Ultima modifica di goodbyemypet : 15-05-2012 alle ore 21.53.37 Motivo: + tag [php] per il codice

  2. #2
    Guest

    Predefinito

    risolto..non ho ben capito il motivo ma almeno ne sono uscito.

    Ho sostituito fsockopen con del codice che utilizza cUrl che ho trovato googlando. Probabomente così imposta qualche parametro diversamente:

    Codice:
    $url= 'https://www.sandbox.paypal.com/cgi-bin/webscr';
    $curl_result=$curl_err='';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
    curl_setopt($ch, CURLOPT_HEADER , 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    $res = curl_exec($ch);
    $curl_err = curl_error($ch);
    curl_close($ch);
    
    
    if (strcmp ($res, "VERIFIED") == 0) { 
    	
    
    } 
    else if (strcmp($res, "INVALID") == 0) {
    
    	
    } 
    else {
    
    	
    }
    Il codice ovviamente è da adattare al resto, ma il pezzo importante è questo.
    ciao
    Ultima modifica di goodbyemypet : 15-05-2012 alle ore 23.47.59

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •