Problems with Paypal IPN

spidersites

Free Member
Sep 2, 2005
209
1
55
Suffolk
Hello
My website was working fine with IPN notifications. All of a sudden it stopped working. I have had numerous contact with paypal but they wont admin its their fault. I cant even get the sample code to work anymore.

When the following code is executed I never get an INVALID response when i always used to.

Are you having a similar problem?

Heres the sample code that doesnt work when called directly
<?php
echo "start";
// read the post from PayPal system and add 'cmd'
$req="";
// 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 ('www.sandbox.paypal.com', 80, $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
echo "HTTP Error:".$errstr;
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
echo "<br>verified";
// 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
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
echo "<br>invalid";
}else{
echo "<br>unknown";
}
}
fclose ($fp);
}
echo "done";
?>
 
Where did you get that code. At a glance it doesnt seem right or maybe its a little old. Also the IPN in general is really shoddy. It has all sorts of bugs which make it a little awkward at times. So paypal might have fixed a bug which has broken yours. Just quickly though your request is better having the following at the top:

---
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix
$req .= "&$key=$value";
}

$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);
---

Also do you even receive anything from the IPN? Is it even enabled in your paypal account. I notice your linking to the sandbox. Im assuming you are using sandbox paypal accounts with that? Is the paypal account pointing to the right place? You havent moved where the file is located have you?

Have you just tried to dump the array .. print_r($_POST); to see if you even get anything?

Hope that helps.
 
Last edited:
Upvote 0

Latest Articles