423 lines
13 KiB
PHP
423 lines
13 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
|
||
|
Copyright 2018 Murray Hayes
|
||
|
|
||
|
Redistribution and use in source and binary forms, with or without
|
||
|
modification, are permitted provided that the following conditions
|
||
|
are met:
|
||
|
|
||
|
1. Redistributions of source code must retain the above copyright
|
||
|
notice, this list of conditions and the following disclaimer.
|
||
|
|
||
|
2. Redistributions in binary form must reproduce the above copyright
|
||
|
notice, this list of conditions and the following disclaimer in the
|
||
|
documentation and/or other materials provided with the distribution.
|
||
|
|
||
|
3. Neither the name of the copyright holder nor the names of its
|
||
|
contributors may be used to endorse or promote products derived from
|
||
|
this software without specific prior written permission.
|
||
|
|
||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||
|
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
||
|
*/
|
||
|
|
||
|
namespace Listener;
|
||
|
|
||
|
include_once '../consts.php';
|
||
|
include_once '../database.php';
|
||
|
|
||
|
// Set this to true to use the sandbox endpoint during testing:
|
||
|
$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");
|
||
|
|
||
|
// Set this to true to send a confirmation email:
|
||
|
$send_confirmation_email = false;
|
||
|
$confirmation_email_address = "My Name <my_email_address@gmail.com>";
|
||
|
$from_email_address = "My Name <my_email_address@gmail.com>";
|
||
|
|
||
|
// Set this to true to save a log file:
|
||
|
$save_log_file = true;
|
||
|
$log_file_dir = __DIR__ . "/logs";
|
||
|
|
||
|
|
||
|
require('PaypalIPN.php');
|
||
|
|
||
|
use PaypalIPN;
|
||
|
|
||
|
$ipn = new PaypalIPN();
|
||
|
|
||
|
date_default_timezone_set($timeZone);
|
||
|
|
||
|
// Use the sandbox endpoint during testing.
|
||
|
if ($enable_sandbox)
|
||
|
$ipn->useSandbox();
|
||
|
|
||
|
//$verified = $ipn->verifyIPN();
|
||
|
$verified = TRUE;
|
||
|
if ($verified)
|
||
|
{
|
||
|
/*
|
||
|
* Process IPN
|
||
|
* A list of variables is available here:
|
||
|
* https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
if (isset($_POST['protection_eligibility']) && isset($_POST['payer_id']) &&
|
||
|
isset($_POST['payment_date']) && isset($_POST['payment_status']) &&
|
||
|
isset($_POST['first_name']) && isset($_POST['last_name']) &&
|
||
|
isset($_POST['notify_version']) && isset($_POST['verify_sign']) &&
|
||
|
isset($_POST['payer_email']) && isset($_POST['txn_id']) &&
|
||
|
isset($_POST['payment_type']) && isset($_POST['receiver_email']) &&
|
||
|
isset($_POST['receiver_id']) && isset($_POST['txn_type']))
|
||
|
{
|
||
|
if ($_POST['protection_eligibility'] === 'Eligible')
|
||
|
$protection_eligibility = TRUE;
|
||
|
else
|
||
|
$protection_eligibility = FALSE;
|
||
|
$payer_id = $_POST['payer_id'];
|
||
|
$payment_date = $_POST['payment_date'];
|
||
|
if ($_POST['payment_status'] === 'Completed')
|
||
|
$payment_status = TRUE;
|
||
|
else
|
||
|
$payment_status = FALSE;
|
||
|
$first_name = $_POST['first_name'];
|
||
|
$last_name = $_POST['last_name'];
|
||
|
$notify_version = $_POST['notify_version'];
|
||
|
$verify_sign = $_POST['verify_sign'];
|
||
|
$payer_email = $_POST['payer_email'];
|
||
|
$txn_id = $_POST['txn_id'];
|
||
|
$payment_type = $_POST['payment_type'];
|
||
|
$receiver_email = $_POST['receiver_email'];
|
||
|
$receiver_id = $_POST['receiver_id'];
|
||
|
$txn_type = $_POST['txn_type'];
|
||
|
|
||
|
if (isset($_POST['mc_gross']))
|
||
|
$mc_gross = (float) $_POST['mc_gross'];
|
||
|
else
|
||
|
$mc_gross = (float) 0.0;
|
||
|
|
||
|
if (isset($_POST['address_status']) && $_POST['address_status'] === 'confirmed')
|
||
|
$address_status = TRUE;
|
||
|
else
|
||
|
$address_status = FALSE;
|
||
|
|
||
|
if (isset($_POST['tax']))
|
||
|
$tax = (float) $_POST['tax'];
|
||
|
else
|
||
|
$tax = (float) 0.00;
|
||
|
|
||
|
if (isset($_POST['address_street']))
|
||
|
$address_street = $_POST['address_street'];
|
||
|
else
|
||
|
$address_street = NULL;
|
||
|
|
||
|
if (isset($_POST['charset']))
|
||
|
$charset = $_POST['charset'];
|
||
|
else
|
||
|
$charset = 'utf-8';
|
||
|
|
||
|
if (isset($_POST['address_zip']))
|
||
|
$address_zip = $_POST['address_zip'];
|
||
|
else
|
||
|
$address_zip = NULL;
|
||
|
|
||
|
if (isset($_POST['mc_fee']))
|
||
|
$mc_fee = (float) $_POST['mc_fee'];
|
||
|
else
|
||
|
$mc_fee = (float) 0.0;
|
||
|
|
||
|
if (isset($_POST['address_country_code']))
|
||
|
$address_country_code = $_POST['address_country_code'];
|
||
|
else
|
||
|
$address_country_code = 'CA';
|
||
|
|
||
|
if (isset($_POST['address_name']))
|
||
|
$address_name = $_POST['address_name'];
|
||
|
else
|
||
|
$address_name = NULL;
|
||
|
|
||
|
if (isset($_POST['cusom']))
|
||
|
$custom = $_POST['custom'];
|
||
|
else
|
||
|
$custom = NULL;
|
||
|
|
||
|
if (isset($_POST['payer_satus']) && $_POST['payer_satus'] === 'verified')
|
||
|
$payer_status = TRUE;
|
||
|
else
|
||
|
$payer_status = FALSE;
|
||
|
|
||
|
if (isset($_POST['address_country']))
|
||
|
$address_country = $_POST['address_country'];
|
||
|
else
|
||
|
$address_country = NULL;
|
||
|
|
||
|
if (isset($_POST['address_city']))
|
||
|
$address_city = $_POST['address_city'];
|
||
|
else
|
||
|
$address_city = NULL;
|
||
|
|
||
|
if (isset($_POST['quantity']))
|
||
|
$quantity = (int) $_POST['quantity'];
|
||
|
else
|
||
|
$quantity = (int) -1;
|
||
|
|
||
|
if (isset($_POST['address_state']))
|
||
|
$address_state = $_POST['address_state'];
|
||
|
else
|
||
|
$address_state = NULL;
|
||
|
|
||
|
if (isset($_POST['payment_fee']))
|
||
|
$payment_fee = (float) $_POST['payment_fee'];
|
||
|
else
|
||
|
$payment_fee = (float) 0.00;
|
||
|
|
||
|
if (isset($_POST['item_name']))
|
||
|
$item_name = $_POST['item_name'];
|
||
|
else
|
||
|
$item_name = NULL;
|
||
|
|
||
|
if (isset($_POST['mc_currency']))
|
||
|
$mc_currency = $_POST['mc_currency'];
|
||
|
else
|
||
|
$mc_currency = 'CAD';
|
||
|
|
||
|
if (isset($_POST['item_number']))
|
||
|
$item_number = $_POST['item_number'];
|
||
|
else
|
||
|
$item_number = NULL;
|
||
|
|
||
|
if (isset($_POST['residence_country']))
|
||
|
$residence_country = $_POST['residence_country'];
|
||
|
else
|
||
|
$residence_country = 'CA';
|
||
|
|
||
|
if (isset($_POST['test_ipn']))
|
||
|
$test_ipn = $_POST['test_ipn'];
|
||
|
else
|
||
|
$test_ipn = NULL;
|
||
|
|
||
|
if (isset($_POST['handling_amount']))
|
||
|
$handling_amount = (float) $_POST['handling_amount'];
|
||
|
else
|
||
|
$handling_amount = (float) 0.00;
|
||
|
|
||
|
if (isset($_POST['transaction_subject']))
|
||
|
$transaction_subject = $_POST['transaction_subject'];
|
||
|
else
|
||
|
$transaction_subject = NULL;
|
||
|
|
||
|
if (isset($_POST['payment_gross']))
|
||
|
$payment_gross = (float) $_POST['payment_gross'];
|
||
|
else
|
||
|
$payment_gross = (float) 0.00;
|
||
|
|
||
|
if (isset($_POST['shipping']))
|
||
|
$shipping = $_POST['shipping'];
|
||
|
else
|
||
|
$shippling = (float) 0.00;
|
||
|
|
||
|
$ipnID = receiveInstantPaypalNotification($item_name, $item_number, (int) $quantity,
|
||
|
$mc_currency, $mc_gross, $mc_fee, $payment_type, $payment_date,
|
||
|
$payment_gross, $payment_fee, $shipping, $handling_amount, $tax,
|
||
|
$payment_status, $protection_eligibility, $payer_id, $payer_email,
|
||
|
$first_name, $last_name, $address_street, $address_city, $address_state,
|
||
|
$address_country, $address_country_code, $address_zip, $address_status,
|
||
|
$address_name, $payer_status, $residence_country, $receiver_id,
|
||
|
$receiver_email, $transaction_subject, $custom, $charset, $txn_id,
|
||
|
$txn_type, $notify_version, $verify_sign, $test_ipn);
|
||
|
processInstantPaypalNotification($ipnID);
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Attempt number 2
|
||
|
*/
|
||
|
|
||
|
$data = file_get_contents('php://input');
|
||
|
if (isset($_POST['txn_type']) && isset($_POST['verify_sign']) && ($data !== FALSE))
|
||
|
{
|
||
|
$txn_type = $_POST['txn_type'];
|
||
|
$verify_sign = $_POST['verify_sign'];
|
||
|
if (isset($_POST['txn_id']))
|
||
|
$txn_id = $_POST['txn_id'];
|
||
|
else
|
||
|
$txn_id = NULL;
|
||
|
|
||
|
$ipnID = receiveInstantPaypalNotification($txn_type, $txn_id, $verify_sign, $data);
|
||
|
//print ("ipnID: $ipnID");
|
||
|
if (isset($_POST['payer_id']))
|
||
|
$payer_id = $_POST['payer_id'];
|
||
|
else
|
||
|
$payer_id = NULL;
|
||
|
if (isset($_POST['payment_date']))
|
||
|
$payment_date = date_format(date_create($_POST['payment_date']), $dbDateTimeFormat);
|
||
|
else
|
||
|
$payment_date = NULL;
|
||
|
if (isset($_POST['payment_status']))
|
||
|
$payment_status = $_POST['payment_status'];
|
||
|
else
|
||
|
$payment_status = NULL;
|
||
|
if (isset($_POST['first_name']))
|
||
|
$first_name = $_POST['first_name'];
|
||
|
else
|
||
|
$first_name = NULL;
|
||
|
if (isset($_POST['last_name']))
|
||
|
$last_name = $_POST['last_name'];
|
||
|
else
|
||
|
$last_name = NULL;
|
||
|
if (isset($_POST['payer_email']))
|
||
|
$payer_email = $_POST['payer_email'];
|
||
|
else
|
||
|
$payer_email = NULL;
|
||
|
if (isset($_POST['mc_currency']))
|
||
|
$mc_currency = $_POST['mc_currency'];
|
||
|
else
|
||
|
$mc_currency = NULL;
|
||
|
if (isset($_POST['mc_gross']))
|
||
|
$mc_gross = $_POST['mc_gross'];
|
||
|
else
|
||
|
$mc_gross = NULL;
|
||
|
if (isset($_POST['mc_fee']))
|
||
|
$mc_fee = $_POST['mc_fee'];
|
||
|
else
|
||
|
$mc_fee = NULL;
|
||
|
if (isset($_POST['address_street']))
|
||
|
$address_street = $_POST['address_street'];
|
||
|
else
|
||
|
$address_street = NULL;
|
||
|
if (isset($_POST['address_city']))
|
||
|
$address_city = $_POST['address_city'];
|
||
|
else
|
||
|
$address_city = NULL;
|
||
|
if (isset($_POST['address_state']))
|
||
|
$address_state = $_POST['address_state'];
|
||
|
else
|
||
|
$address_state = NULL;
|
||
|
if (isset($_POST['address_country']))
|
||
|
$address_country = $_POST['address_country'];
|
||
|
else
|
||
|
$address_country = NULL;
|
||
|
if (isset($_POST['address_country_code']))
|
||
|
$address_country_code = $_POST['address_country_code'];
|
||
|
else
|
||
|
$address_country_code = NULL;
|
||
|
if (isset($_POST['address_zip']))
|
||
|
$address_zip = $_POST['address_zip'];
|
||
|
else
|
||
|
$address_zip = NULL;
|
||
|
if (isset($_POST['address_country']))
|
||
|
$address_country = $_POST['address_country'];
|
||
|
else
|
||
|
$address_country = NULL;
|
||
|
if (isset($_POST['contact_phone']))
|
||
|
$contact_phone = $_POST['contact_phone'];
|
||
|
else
|
||
|
$contact_phone = NULL;
|
||
|
if (isset($_POST['custom']))
|
||
|
$custom = $_POST['custom'];
|
||
|
else
|
||
|
$custom = NULL;
|
||
|
if (isset($_POST['receipt_id']))
|
||
|
$receipt_id = $_POST['receipt_id'];
|
||
|
else
|
||
|
$receipt_id = NULL;
|
||
|
if (isset($_POST['payer_status']))
|
||
|
$payer_status = $_POST['payer_status'];
|
||
|
else
|
||
|
$payer_status = NULL;
|
||
|
if (isset($_POST['quantity']))
|
||
|
$quantity = $_POST['quantity'];
|
||
|
else
|
||
|
$quantity = NULL;
|
||
|
if (isset($_POST['payment_type']))
|
||
|
$payment_type = $_POST['payment_type'];
|
||
|
else
|
||
|
$payment_type = NULL;
|
||
|
if (isset($_POST['receiver_email']))
|
||
|
$receiver_email = $_POST['receiver_email'];
|
||
|
else
|
||
|
$receiver_email = NULL;
|
||
|
if (isset($_POST['receiver_id']))
|
||
|
$receiver_id = $_POST['receiver_id'];
|
||
|
else
|
||
|
$receiver_id = NULL;
|
||
|
if (isset($_POST['item_name']))
|
||
|
$item_name = $_POST['item_name'];
|
||
|
else
|
||
|
$item_name = NULL;
|
||
|
if (isset($_POST['item_number']))
|
||
|
$item_number = $_POST['item_number'];
|
||
|
else
|
||
|
$item_number = NULL;
|
||
|
if (isset($_POST['residence_country']))
|
||
|
$residence_country = $_POST['residence_country'];
|
||
|
else
|
||
|
$residence_country = NULL;
|
||
|
if (isset($_POST['charset']))
|
||
|
$charset = $_POST['charset'];
|
||
|
else
|
||
|
$charset = NULL;
|
||
|
if (isset($_POST['transaction_subject']))
|
||
|
$transaction_subject = $_POST['transaction_subject'];
|
||
|
else
|
||
|
$transaction_subject = NULL;
|
||
|
if (isset($_POST['memo']))
|
||
|
$memo = $_POST['memo'];
|
||
|
else
|
||
|
$memo = NULL;
|
||
|
if (isset($_POST['test_ipn']))
|
||
|
$test_ipn = $_POST['test_ipn'];
|
||
|
else
|
||
|
$test_ipn = NULL;
|
||
|
if (isset($_POST['notify_version']))
|
||
|
$notify_version = $_POST['notify_version'];
|
||
|
else
|
||
|
$notify_version = NULL;
|
||
|
if (isset($_POST['parent_txn_id']))
|
||
|
$parent_txn_id = $_POST['parent_txn_id'];
|
||
|
else
|
||
|
$parent_txn_id = NULL;
|
||
|
if (isset($_POST['initial_payment_txn_id']))
|
||
|
$initial_payment_txn_id = $_POST['initial_payment_txn_id'];
|
||
|
else
|
||
|
$initial_payment_txn_id = NULL;
|
||
|
if (isset($_POST['recurring_payment_id']))
|
||
|
$recurring_payment_id = $_POST['recurring_payment_id'];
|
||
|
else
|
||
|
$recurring_payment_id = NULL;
|
||
|
/* if (isset($_POST['address_country']))
|
||
|
$address_country = $_POST['address_country'];
|
||
|
else
|
||
|
$address_country = NULL;*/
|
||
|
insertInstantPaypalNotificationData($ipnID, $payer_id, $payment_date,
|
||
|
$payment_status, $first_name, $last_name, $payer_email, $mc_currency,
|
||
|
$mc_gross, $mc_fee, $address_street, $address_city, $address_country,
|
||
|
$address_state, $address_country_code, $address_zip, $contact_phone,
|
||
|
$custom, $receipt_id, $payer_status, $quantity, $payment_type,
|
||
|
$receiver_email, $receiver_id, $item_name, $item_number,
|
||
|
$residence_country, $charset, $transaction_subject, $memo, $test_ipn,
|
||
|
$notify_version, $parent_txn_id, $initial_payment_txn_id, $recurring_payment_id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Reply with an empty 200 response to indicate to paypal the IPN was received correctly.
|
||
|
header("HTTP/1.1 200 OK");
|
||
|
|
||
|
|
||
|
?>
|