public static function validateIPN($data, $paypal_url = '') { // parse the paypal URL if (!$paypal_url) { $paypal_url = plgDigiCom_PayPaypalHelper::buildPaymentSubmitUrl(); } $url_parsed = parse_url($paypal_url); // generate the post string from the _POST vars as-well-as load the // _POST vars into an arry so we can play with them from the calling // script. // append ipn command // open the connection to paypal $fp = fsockopen($url_parsed["host"], "80", $err_num, $err_str, 30); // $fp = fsockopen ($this->paypal_url, 80, $errno, $errstr, 30); if (!$fp) { // could not open the connection. If loggin is on, the error message // will be in the log. self::$last_error = 'fsockopen error no. ' . $err_num . ': ' . $err_str; plgDigiCom_PayPaypalHelper::log_ipn_results(false); return false; } else { $post_string = ''; foreach ($data as $field => $value) { self::$ipn_data["{$field}"] = $value; $post_string .= $field . '=' . urlencode(stripslashes($value)) . '&'; } $post_string .= "cmd=_notify-validate"; // Post the data back to paypal 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"); // loop through the response from the server and append to variable while (!feof($fp)) { self::$ipn_response .= fgets($fp, 1024); } fclose($fp); // close connection } if (preg_match("/verified/", $post_string)) { // Valid IPN transaction. plgDigiCom_PayPaypalHelper::log_ipn_results(true); return true; } else { // Invalid IPN transaction. Check the log for details. self::$last_error = 'IPN Validation Failed.'; plgDigiCom_PayPaypalHelper::log_ipn_results(false); return false; } }
function onTP_Processpayment($data) { $params = $this->params; $secure_post = $params->get('secure_post'); $sandbox = $params->get('sandbox'); $paypal_url = plgDigiCom_PayPaypalHelper::buildPaymentSubmitUrl($secure_post, $sandbox); $verify = plgDigiCom_PayPaypalHelper::validateIPN($data); if (!$verify) { return false; } $payment_status = $this->translateResponse($data['payment_status']); $result = array('order_id' => $data['custom'], 'transaction_id' => $data['txn_id'], 'buyer_email' => $data['payer_email'], 'status' => $payment_status, 'txn_type' => $data['txn_type'], 'total_paid_amt' => $data['mc_gross'], 'raw_data' => $data, 'processor' => 'paypal'); return $result; }