kbit
asked on
PayPal IPN
Hi, I stole the code below and modified it to suit. On PayPal, I added this filename (listener.php) as the IPN listener.
However my database is not being updated, can someone please tell me if I'm missing something?
Many thanks
However my database is not being updated, can someone please tell me if I'm missing something?
Many thanks
<?php
session_start();
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
$PostedUserID=$_SESSION['PostedUserID'];
$Amount=$payment_amount;
$Purpose=$_SESSION['Purpose'];
// connect to database
$username="xxxxxxxx";
$password="xxxxxxxxxx";
$database="xxxxxxxx";
$server="xxxxxxxxx";
$dbLinkID = mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
//insert into billing table
$query = "INSERT INTO billing VALUES (NULL,'$PostedUserID',Now(),'$Purpose','$Amount')";
mysql_query($query);
//add 1 year to current date for expiry
$newDate = date("Y-m-d",strtotime("+1 year", time()));
//change user status to active and update expiry date
$query = "UPDATE users SET ExpiryDate='$newDate',Status='Active' WHERE UserID='$PostedUserID'";
mysql_query($query);
$_SESSION['PostedStatus'] = 'Active'; //Store users new status
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
That worked beautifully Ray, thanks ever so much for putting me in the right direction regarding the session variables...I would've been a long time figuring that out!
Glad to help - this is a really good question. Thanks for the points! Best, ~Ray
I'll take a look at the rest in a moment. Best regards, ~Ray