-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathpayment_ipn_paypal.php
104 lines (92 loc) · 3.47 KB
/
payment_ipn_paypal.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
require_once('includes/master.inc.php');
// check for some required variables in the request
if ((!isset($_REQUEST['payment_status'])) || (!isset($_REQUEST['business'])))
{
die();
}
// make sure payment has completed and it's for the correct PayPal account
if (($_REQUEST['payment_status'] == "Completed") && (strtolower($_REQUEST['business']) == SITE_CONFIG_PAYPAL_PAYMENTS_EMAIL_ADDRESS))
{
// load order using custom payment tracker hash
$paymentTracker = $_REQUEST['custom'];
$order = OrderPeer::loadByPaymentTracker($paymentTracker);
if ($order)
{
$extendedDays = $order->days;
$userId = $order->user_id;
// log in payment_log
$paypal_vars = "";
foreach ($_REQUEST AS $k => $v)
{
$paypal_vars .= $k . " => " . $v . "\n";
}
$dbInsert = new DBObject("payment_log",
array("user_id", "date_created", "amount",
"currency_code", "from_email", "to_email", "description",
"request_log")
);
$dbInsert->user_id = $userId;
$dbInsert->date_created = date("Y-m-d H:i:s", time());
$dbInsert->amount = $_REQUEST['mc_gross'];
$dbInsert->currency_code = $_REQUEST['mc_currency'];
$dbInsert->from_email = $_REQUEST['payer_email'];
$dbInsert->to_email = $_REQUEST['business'];
$dbInsert->description = $extendedDays . ' days extension';
$dbInsert->request_log = $paypal_vars;
$dbInsert->insert();
// make sure the amount paid matched what we expect
if ($_REQUEST['mc_gross'] != $order->amount)
{
// order amounts did not match
die();
}
// make sure the order is pending
if ($order->order_status == 'completed')
{
// order has already been completed
die();
}
// update order status to paid
$dbUpdate = new DBObject("premium_order", array("order_status"), 'id');
$dbUpdate->order_status = 'completed';
$dbUpdate->id = $order->id;
$effectedRows = $dbUpdate->update();
if ($effectedRows === false)
{
// failed to update order
die();
}
// extend/upgrade user
$user = UserPeer::loadUserById($userId);
$newExpiryDate = strtotime('+' . $order->days . ' days');
if (($user->level == 'paid user') || ($user->level == 'admin'))
{
// add onto existing period
$existingExpiryDate = strtotime($user->paidExpiryDate);
// if less than today just revert to now
if ($existingExpiryDate < time())
{
$existingExpiryDate = time();
}
$newExpiryDate = (int) $existingExpiryDate + (int) ($order->days * (60 * 60 * 24));
}
$newUserType = 'paid user';
if ($user->level == 'admin')
{
$newUserType = 'admin';
}
// update order status to paid
$dbUpdate = new DBObject("users", array("level", "lastPayment", "paidExpiryDate"), 'id');
$dbUpdate->level = $newUserType;
$dbUpdate->lastPayment = date("Y-m-d H:i:s", time());
$dbUpdate->paidExpiryDate = date("Y-m-d H:i:s", $newExpiryDate);
$dbUpdate->id = $userId;
$effectedRows = $dbUpdate->update();
if ($effectedRows === false)
{
// failed to update user
die();
}
}
}