Visualizzazione risultati 1 fino 4 di 4

Discussione: Problema con IPN di PayPal

  1. #1
    Guest

    Predefinito Problema con IPN di PayPal

    Salve a tutti, avrei un problema con uno script per gestire pagamenti tramite PayPal, provando sia su Sandbox che con account vero.

    Cercando online ho visto che dovevo attivare i socket dal pannello di controllo, l'ho fatto ma quando vado a fare il pagamento, questo va a buon fine ma mi invia tramite una mail di debug questo:

    1 - Server: Apache
    2 - HTTP/1.0 500 Server closed connection without sending any data back
    3 - Una mail vuota

    Si blocca a questo punto e non fa nient'altro.
    Il codice del Listener è questo:

    Codice PHP:
    <?php
    require_once "pp_config.php";

    abstract class
    IPNListener {
    private function
    isVerifiedIPN() {
    $req = "cmd=_notify-validate";

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

    /**
    * Modificando la costante SIMULATION nel file di configurazione
    * è possibile passare dall'ambiente di simulazione a quello di produzione
    */
    if( SIMULATION ) {
    $url = SIMULATION_URL;
    } else {
    $url = PRODUCTION_URL;
    }

    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Host: $url: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://$url", 443, $errno, $errstr, 30);

    if(
    $fp == false ) {
    // HTTP ERROR
    // $errstr - $errno

    $this->sendReport();

    return
    false;
    } else {
    fputs($fp, $header . $req);

    while(
    feof($fp) == false ) {
    $res = fgets($fp, 1024);
    mail("MIAMAIL", "isVerifiedIPN Socket", $res);
    if(
    strcmp($res, "VERIFIED") == 0 ) {
    mail("MIAMAIL", "isVerifiedIPN Socket", "VERIFIED");
    fclose ($fp);

    return
    true;
    } elseif(
    strcmp ($res, "INVALID") == 0 ) {
    mail("MIAMAIL", "isVerifiedIPN Socket", "INVALID");
    // Se la procedura non è legittima invia un email all'amministratore
    $this->sendReport();

    fclose($fp);

    return
    false;
    }
    }
    }
    }

    private function
    sendReport() {
    if(
    SIMULATION ) {
    $add = "- SIMULAZIONE -";
    } else {
    $add = "";
    }

    // Messaggio all'amministratore
    $subject = "$add Problema IPN";
    $message = "Si è verificato un problema nella seguente transazione:\r\n\r\n";
    $message .= "Nome: " . $_POST["first_name"] . " " . $_POST["last_name"] . "\r\n";
    $message .= "Email: " . $_POST["payer_email"] . "\r\n";
    $message .= "ID transazione: " . $_POST["txn_id"] . "\r\n";
    $message .= "Oggetto: " . $_POST["transaction_subject"];

    mail(ADMIN_MAIL, $subject, $message, "From: " . NO_REPLY);

    return;
    }

    private function
    isCompleted() {
    mail("MIAMAIL", "isCompleted", $_POST["payment_status"]);

    if(
    trim($_POST["payment_status"]) === "Completed" ) {
    return
    true;
    }

    return
    false;
    }

    private function
    isPrimaryPayPalEmail() {
    if(
    SIMULATION ) {
    $email = PRIMARY_SANDBOX_EMAIL;
    } else {
    $email = PRIMARY_PAYPAL_EMAIL;
    }

    if(
    trim($_POST["receiver_email"]) === $email ) {
    return
    true;
    }

    return
    false;
    }

    abstract protected function
    isVerifiedAmmount();
    abstract protected function
    isNotProcessed();

    protected function
    isReadyTransaction() {
    if(
    $this->isVerifiedIPN() AND $this->isPrimaryPayPalEmail() AND $this->isNotProcessed() AND $this->isVerifiedAmmount() AND $this->isCompleted() ) {
    return
    true;
    }

    return
    false;
    }
    }
    ?>
    Nel caso serve posterò il codice degli altri file come la configurazione ecc.
    Vorrei capire se è un errore di Altervista perché è più di una settimana che ci sbatto la testa.

    Grazie.

  2. #2
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

  3. #3
    Guest

    Predefinito

    Ho guardato il topic che mi hai indicato e ho cercato cURL ma non riesco a capire la soluzione, un codice per sostituire nel mio codice i socket con cURL? Grazie.

  4. #4
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Invece, nel codice che hai postato, prova a rimuovere :443 nel header.
    Codice PHP:
    $header .= "Host: $url:443\r\n";
    rimuovi :443
    Codice PHP:
    $header .= "Host: $url\r\n";

Regole di scrittura

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