This repository has been archived by the owner on Jul 20, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 484
added html and unicode email support to advanced example #118
Open
BigRedBot
wants to merge
32
commits into
paypal:master
Choose a base branch
from
BigRedBot:patch-6
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 22 commits
Commits
Show all changes
32 commits
Select commit
Hold shift + click to select a range
34d6515
added html and unicode email support
BigRedBot fc4ae60
sort the keys for $_POST
BigRedBot 4d06ebb
sort the keys for $_POST
BigRedBot 48a6318
Removed sort
BigRedBot 4238eec
Added option to use verified decoded data
BigRedBot 0b7599c
sort $DATA array
BigRedBot 9db6220
added test text to log file directory
BigRedBot 6136887
send_email_from
BigRedBot fdc2ee7
edit send_confirmation_email
BigRedBot da830f0
Update example_usage_advanced.php
BigRedBot 47e4f81
added option to also log raw un-decoded data
BigRedBot 2748f70
Update example_usage_advanced.php
BigRedBot 29f7ed4
Update example_usage_advanced.php
BigRedBot cd53dc4
looks cleaner
BigRedBot 6dcce7c
Update example_usage_advanced.php
BigRedBot 3bb2b99
Update example_usage_advanced.php
BigRedBot ffa4a00
Update example_usage_advanced.php
BigRedBot b2251ae
edit to send_plain_email
BigRedBot 32ca99f
edit send_email
BigRedBot dad1f8c
Update example_usage_advanced.php
BigRedBot 273c7d5
Update example_usage_advanced.php
BigRedBot 023ba76
Update example_usage_advanced.php
BigRedBot d8794dd
Update example_usage_advanced.php
BigRedBot c4ba82a
removed option for raw data logging
BigRedBot 1403635
Update example_usage_advanced.php
BigRedBot f1e85f9
Update example_usage_advanced.php
BigRedBot de46530
Update example_usage_advanced.php
BigRedBot 89773ee
Update example_usage_advanced.php
BigRedBot 405b142
Update example_usage_advanced.php
BigRedBot 8e2df88
removed duplicate to field to prevent sending duplicate emails
BigRedBot 3927d01
renamed mail functions to be simpler
BigRedBot ef042b1
Update example_usage_advanced.php
BigRedBot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,82 +4,135 @@ | |
$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("seller@paypalsandbox.com", "seller2@paypalsandbox.com", "seller3@paypalsandbox.com"); | ||
|
||
// Set this to true to send a confirmation email: | ||
$send_confirmation_email = true; | ||
$confirmation_email_address = "My Name <[email protected]>"; | ||
$from_email_address = "My Name <[email protected]>"; | ||
$confirmation_email_name = "My Name"; | ||
$confirmation_email_address = "[email protected]"; | ||
$from_email_name = "My Name"; | ||
$from_email_address = "[email protected]"; | ||
|
||
// Set this to true to save a log file: | ||
$save_log_file = true; | ||
$log_file_dir = __DIR__ . "/logs"; | ||
|
||
// Set this to true to also log un-decoded data: | ||
$log_raw_data = false; | ||
|
||
// Here is some information on how to configure sendmail: | ||
// http://php.net/manual/en/function.mail.php#118210 | ||
|
||
|
||
|
||
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) { | ||
$ipn->useSandbox(); | ||
} | ||
$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"; | ||
} | ||
|
||
$raw_data_text = ""; | ||
if ($log_raw_data) { | ||
$RAW_DATA = array(); | ||
foreach (explode("&", file_get_contents("php://input")) as $keyval) { | ||
$keyval = explode("=", $keyval); | ||
if (count($keyval) == 2) { | ||
$RAW_DATA[$keyval[0]] = $keyval[1]; | ||
} | ||
} | ||
ksort($RAW_DATA); | ||
foreach ($RAW_DATA as $key => $value) { | ||
$raw_data_text .= "RAW: " . $key . " = " . $value . "\r\n"; | ||
} | ||
} | ||
|
||
$test_text = ""; | ||
if ($_POST["test_ipn"] == 1) { | ||
if ($DATA["test_ipn"] == 1) { | ||
$test_text = "Test "; | ||
} | ||
|
||
$dated_log_file_dir = $log_file_dir . "/" . $test_text . $year . "/" . $test_text . $month; | ||
|
||
// 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 = true) { | ||
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" . "\r\n"; | ||
if ($html) { | ||
$body = "<html><head><title>" . $subject . "</title></head><body>" . $body . "</body></html>"; | ||
$send_email_header .= "Content-type: text/html; charset=UTF-8" . "\r\n"; | ||
} else { | ||
$send_email_header .= "Content-type: text/plain; charset=UTF-8" . "\r\n"; | ||
} | ||
$send_email_header .= "To: " . $send_email_to . "\r\n"; | ||
$send_email_header .= "From: " . $send_email_from . "\r\n"; | ||
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_plain_email($name, $address, $subject, $body, $from_name = null, $from_address = null) { | ||
return send_email($name, $address, $subject, $body, $from_name, $from_address, false); | ||
} | ||
|
||
// 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 = "<p>Thank you for purchasing " . $DATA["item_name"] . ".<BR><BR>This is an example email only.<BR><BR>Thank you.</p>"; | ||
send_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) { | ||
|
@@ -108,13 +161,15 @@ | |
} | ||
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 . $raw_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); | ||
$email_subject = $test_text . "PayPal IPN : " . $paypal_ipn_status; | ||
$email_body = $paypal_ipn_status . "\r\n" . $timestamp . "\r\n" . "\r\n" . $data_text . "\r\n" . $raw_data_text; | ||
send_plain_email($confirmation_email_name, $confirmation_email_address, $email_subject, $email_body); | ||
} | ||
|
||
// Reply with an empty 200 response to indicate to paypal the IPN was received correctly | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can emails be
@example.com
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think so.
I have changed it to use: example.com