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.