1 | // Database variables |
2 | $host = "localhost"; //database location |
3 | $user = ""; //database username |
4 | $pass = ""; //database password |
5 | $db_name = ""; //database name |
6 |
7 | // PayPal settings |
8 | $paypal_email = 'user@domain.com'; |
9 | $return_url = 'http://domain.com/payment-successful.html'; |
10 | $cancel_url = 'http://domain.com/payment-cancelled.html'; |
11 | $notify_url = 'http://domain.com/payments.php'; |
12 |
13 | $item_name = 'Test Item'; |
14 | $item_amount = 5.00; |
15 |
16 | // Include Functions |
17 | include("functions.php"); |
18 |
19 | // Check if paypal request or response |
20 | if (!isset($_POST["txn_id"]) && !isset($_POST["txn_type"])){ |
21 | $querystring = ''; |
22 | |
23 | // Firstly Append paypal account to querystring |
24 | $querystring .= "?business=".urlencode($paypal_email)."&"; |
25 | |
26 | // Append amount& currency (£) to quersytring so it cannot be edited in html |
27 | |
28 | //The item name and amount can be brought in dynamically by querying the $_POST['item_number'] variable. |
29 | $querystring .= "item_name=".urlencode($item_name)."&"; |
30 | $querystring .= "amount=".urlencode($item_amount)."&"; |
31 | |
32 | //loop for posted values and append to querystring |
33 | foreach($_POST as $key => $value){ |
34 | $value = urlencode(stripslashes($value)); |
35 | $querystring .= "$key=$value&"; |
36 | } |
37 | |
38 | // Append paypal return addresses |
39 | $querystring .= "return=".urlencode(stripslashes($return_url))."&"; |
40 | $querystring .= "cancel_return=".urlencode(stripslashes($cancel_url))."&"; |
41 | $querystring .= "notify_url=".urlencode($notify_url); |
42 | |
43 | // Append querystring with custom field |
44 | //$querystring .= "&custom=".USERID; |
45 | |
46 | // Redirect to paypal IPN |
47 | header('location:https://www.sandbox.paypal.com/cgi-bin/webscr'.$querystring); |
48 | exit(); |
49 | } else { |
50 | //Database Connection |
51 | $link = mysql_connect($host, $user, $pass); |
52 | mysql_select_db($db_name); |
53 | |
54 | // Response from Paypal |
55 |
56 | // read the post from PayPal system and add 'cmd' |
57 | $req = 'cmd=_notify-validate'; |
58 | foreach ($_POST as $key => $value) { |
59 | $value = urlencode(stripslashes($value)); |
60 | $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix |
61 | $req .= "&$key=$value"; |
62 | } |
63 | |
64 | // assign posted variables to local variables |
65 | $data['item_name'] = $_POST['item_name']; |
66 | $data['item_number'] = $_POST['item_number']; |
67 | $data['payment_status'] = $_POST['payment_status']; |
68 | $data['payment_amount'] = $_POST['mc_gross']; |
69 | $data['payment_currency'] = $_POST['mc_currency']; |
70 | $data['txn_id'] = $_POST['txn_id']; |
71 | $data['receiver_email'] = $_POST['receiver_email']; |
72 | $data['payer_email'] = $_POST['payer_email']; |
73 | $data['custom'] = $_POST['custom']; |
74 | |
75 | // post back to PayPal system to validate |
76 | $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; |
77 | $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; |
78 | $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; |
79 | |
80 | $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); |
81 | |
82 | if (!$fp) { |
83 | // HTTP ERROR |
84 | |
85 | } else { |
86 | fputs($fp, $header . $req); |
87 | while (!feof($fp)) { |
88 | $res = fgets ($fp, 1024); |
89 | if (strcmp($res, "VERIFIED") == 0) { |
90 | |
91 | // Used for debugging |
92 | // mail('user@domain.com', 'PAYPAL POST - VERIFIED RESPONSE', print_r($post, true)); |
93 | |
94 | // Validate payment (Check unique txnid & correct price) |
95 | $valid_txnid = check_txnid($data['txn_id']); |
96 | $valid_price = check_price($data['payment_amount'], $data['item_number']); |
97 | // PAYMENT VALIDATED & VERIFIED! |
98 | if ($valid_txnid && $valid_price) { |
99 | |
100 | $orderid = updatePayments($data); |
101 | |
102 | if ($orderid) { |
103 | // Payment has been made & successfully inserted into the Database |
104 | } else { |
105 | // Error inserting into DB |
106 | // E-mail admin or alert user |
107 | // mail('user@domain.com', 'PAYPAL POST - INSERT INTO DB WENT WRONG', print_r($data, true)); |
108 | } |
109 | } else { |
110 | // Payment made but data has been changed |
111 | // E-mail admin or alert user |
112 | } |
113 | |
114 | } else if (strcmp ($res, "INVALID") == 0) { |
115 | |
116 | // PAYMENT INVALID & INVESTIGATE MANUALY! |
117 | // E-mail admin or alert user |
118 | |
119 | // Used for debugging |
120 | //@mail("user@domain.com", "PAYPAL DEBUGGING", "Invalid Response |
121 | data = |
122 | <pre>".print_r($post, true)."</pre> |
123 |
124 | "); |
125 | } |
126 | } |
127 | fclose ($fp); |
128 | } |
129 | } |
No comments:
Post a Comment