diff --git a/php/example_usage_advanced.php b/php/example_usage_advanced.php index b8777d8..b9e4c05 100644 --- a/php/example_usage_advanced.php +++ b/php/example_usage_advanced.php @@ -4,12 +4,16 @@ $enable_sandbox = true; // Use this to specify all of the email addresses that you have attached to paypal: -$my_email_addresses = array("my_email_address@gmail.com", "my_email_address2@gmail.com", "my_email_address3@gmail.com"); +$my_email_addresses = array("my_email_address@example.com", "my_email_address2@example.com", "my_email_address3@example.com"); // Set this to true to send a confirmation email: $send_confirmation_email = true; -$confirmation_email_address = "My Name "; -$from_email_address = "My Name "; +$confirmation_email_name = "My Name"; +$confirmation_email_address = "my_email_address@example.com"; + +// Set these to the name and email address that you are sending emails from: +$from_email_name = "My Name"; +$from_email_address = "my_email_address@example.com"; // Set this to true to save a log file: $save_log_file = true; @@ -20,7 +24,12 @@ -require('PaypalIPN.php'); +date_default_timezone_set("America/Los_Angeles"); +list($year, $month, $day, $hour, $minute, $second, $timezone) = explode(":", date("Y:m:d:H:i:s:T")); +$date = $year . "-" . $month . "-" . $day; +$timestamp = $date . " " . $hour . ":" . $minute . ":" . $second . " " . $timezone; + +require("PaypalIPN.php"); use PaypalIPN; $ipn = new PaypalIPN(); if ($enable_sandbox) { @@ -28,61 +37,87 @@ } $verified = $ipn->verifyIPN(); +if (is_array($verified)) { + $DATA = $verified; +} else { + $DATA = $_POST; +} +ksort($DATA); + $data_text = ""; -foreach ($_POST as $key => $value) { +foreach ($DATA as $key => $value) { $data_text .= $key . " = " . $value . "\r\n"; } $test_text = ""; -if ($_POST["test_ipn"] == 1) { +if ($DATA["test_ipn"] == 1) { $test_text = "Test "; } // Check the receiver email to see if it matches your list of paypal email addresses $receiver_email_found = false; foreach ($my_email_addresses as $a) { - if (strtolower($_POST["receiver_email"]) == strtolower($a)) { + if (strtolower($DATA["receiver_email"]) == strtolower($a)) { $receiver_email_found = true; break; } } -date_default_timezone_set("America/Los_Angeles"); -list($year, $month, $day, $hour, $minute, $second, $timezone) = explode(":", date("Y:m:d:H:i:s:T")); -$date = $year . "-" . $month . "-" . $day; -$timestamp = $date . " " . $hour . ":" . $minute . ":" . $second . " " . $timezone; -$dated_log_file_dir = $log_file_dir . "/" . $year . "/" . $month; - +$process_ipn = false; $paypal_ipn_status = "VERIFICATION FAILED"; if ($verified) { $paypal_ipn_status = "RECEIVER EMAIL MISMATCH"; if ($receiver_email_found) { + $process_ipn = true; $paypal_ipn_status = "Completed Successfully"; + } +} elseif ($enable_sandbox) { + if ($DATA["test_ipn"] != 1) { + $paypal_ipn_status = "RECEIVED FROM LIVE WHILE SANDBOXED"; + } +} elseif ($DATA["test_ipn"] == 1) { + $paypal_ipn_status = "RECEIVED FROM SANDBOX WHILE LIVE"; +} +function send_email($name, $address, $subject, $body, $from_name = null, $from_address = null, $html = false) { + if (is_null($from_name)) { $from_name = $GLOBALS["from_email_name"]; } + if (is_null($from_address)) { $from_address = $GLOBALS["from_email_address"]; } + $send_email_to = "=?UTF-8?B?" . base64_encode($name) . "?= <" . $address . ">"; + $send_email_from = "=?UTF-8?B?" . base64_encode($from_name) . "?= <" . $from_address . ">"; + $send_email_header = "MIME-Version: 1.0"; + if ($html) { + $body = "" . $subject . "" . $body . ""; + $send_email_header .= "\r\n" . "Content-type: text/html; charset=UTF-8"; + } else { + $send_email_header .= "\r\n" . "Content-type: text/plain; charset=UTF-8"; + } + $send_email_header .= "\r\n" . "From: " . $send_email_from; + return mail($send_email_to, "=?UTF-8?B?" . base64_encode($subject) . "?=", $body, $send_email_header); +} - // Process IPN - // A list of variables are available here: - // https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/ +function send_html_email($name, $address, $subject, $body, $from_name = null, $from_address = null) { + return send_email($name, $address, $subject, $body, $from_name, $from_address, true); +} - // This is an example for sending an automated email to the customer when they purchases an item for a specific amount: - if ($_POST["item_name"] == "Example Item" && $_POST["mc_gross"] == 49.99 && $_POST["mc_currency"] == "USD" && $_POST["payment_status"] == "Completed") { - $email_to = $_POST["first_name"] . " " . $_POST["last_name"] . " <" . $_POST["payer_email"] . ">"; - $email_subject = $test_text . "Completed order for: " . $_POST["item_name"]; - $email_body = "Thank you for purchasing " . $_POST["item_name"] . "." . "\r\n" . "\r\n" . "This is an example email only." . "\r\n" . "\r\n" . "Thank you."; - mail($email_to, $email_subject, $email_body, "From: " . $from_email_address); - } +if ($process_ipn) { + // Process IPN + // A list of variables are available here: + // https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/ + // This is an example for sending an automated email to the customer when they purchases an item for a specific amount: + if ($DATA["item_name"] == "something" && $DATA["mc_gross"] == 12.34 && $DATA["mc_currency"] == "USD" && $DATA["payment_status"] == "Completed") { + $email_name = $DATA["first_name"] . " " . $DATA["last_name"]; + $email_address = $DATA["payer_email"]; + $email_subject = $test_text . "Completed order for: " . $DATA["item_name"]; + $email_body = "

Thank you for purchasing " . $DATA["item_name"] . ".

This is an example email only.

Thank you.

"; + send_html_email($email_name, $email_address, $email_subject, $email_body); } -} elseif ($enable_sandbox) { - if ($_POST["test_ipn"] != 1) { - $paypal_ipn_status = "RECEIVED FROM LIVE WHILE SANDBOXED"; - } -} elseif ($_POST["test_ipn"] == 1) { - $paypal_ipn_status = "RECEIVED FROM SANDBOX WHILE LIVE"; + } if ($save_log_file) { + $dated_log_file_dir = $log_file_dir . "/" . $test_text . $year . "/" . $test_text . $month; // Create log file directory if (!is_dir($dated_log_file_dir)) { if (!file_exists($dated_log_file_dir)) { @@ -108,13 +143,13 @@ } if ($save_log_file) { // Save data to text file - file_put_contents($dated_log_file_dir . "/" . $test_text . "paypal_ipn_" . $date . ".txt", "paypal_ipn_status = " . $paypal_ipn_status . "\r\n" . "paypal_ipn_date = " . $timestamp . "\r\n" . $data_text . "\r\n", FILE_APPEND); + file_put_contents($dated_log_file_dir . "/" . $test_text . "paypal_ipn_" . $date . ".txt", $paypal_ipn_status . "\r\n" . $timestamp . "\r\n" . $data_text . "\r\n", FILE_APPEND); } } if ($send_confirmation_email) { // Send confirmation email - mail($confirmation_email_address, $test_text . "PayPal IPN : " . $paypal_ipn_status, "paypal_ipn_status = " . $paypal_ipn_status . "\r\n" . "paypal_ipn_date = " . $timestamp . "\r\n" . $data_text, "From: " . $from_email_address); + send_email($confirmation_email_name, $confirmation_email_address, $test_text . "PayPal IPN : " . $paypal_ipn_status, $paypal_ipn_status . "\r\n" . $timestamp . "\r\n" . $data_text); } // Reply with an empty 200 response to indicate to paypal the IPN was received correctly