function validate_ipn() { global $ipn_data, $ipn_response, $paypal_url; $url_parsed = parse_url($paypal_url); $post_string = ''; foreach ($_POST as $field => $value) { $ipn_data["{$field}"] = $value; $post_string .= $field . '=' . urlencode(stripslashes($value)) . '&'; } $post_string .= "cmd=_notify-validate"; // append ipn command // open the connection to paypal $fp = fsockopen($url_parsed['host'], "80", $err_num, $err_str, 30); if (!$fp) { $sql = 'insert into tb_dump (cdate,msg) values ("' . date('d-m-y H:i:s') . '","fsockopen error no. ' . $errnum . ': ' . $errstr . '")'; $result = mysql_query($sql); return false; } else { fputs($fp, "POST " . $url_parsed['path'] . " HTTP/1.1\r\n"); fputs($fp, "Host: " . $url_parsed['host'] . "\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: " . strlen($post_string) . "\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $post_string . "\r\n\r\n"); while (!feof($fp)) { $ipn_response .= fgets($fp, 1024); } fclose($fp); // close connection } if (stripos($ipn_response, "VERIFIED") > 0) { log_ipn_results(true, $last_error); return true; } else { $last_error = 'IPN Validation Failed.'; log_ipn_results(false, $last_error); return false; } }
fputs($fp, $post_string . "\r\n\r\n"); // loop through the response from the server and append to variable while (!feof($fp)) { $ipn_response .= fgets($fp, 1024); } fclose($fp); // close connection } if (eregi("VERIFIED", $ipn_response)) { // Valid IPN transaction. log_ipn_results(true); exit; } else { // Invalid IPN transaction. Check the log for details. $last_error = 'IPN Validation Failed.'; log_ipn_results(false); exit; } function log_ipn_results($success) { global $ipn_data, $last_error, $ipn_response; // Timestamp $text = '[' . date('m/d/Y g:i A') . '] - '; // Success or failure being logged? if ($success) { $text .= "SUCCESS!\n"; } else { $text .= 'FAIL: ' . $last_error . "\n"; } // Log the POST variables $text .= "IPN POST Vars from Paypal:\n";