Support
Quality
Security
License
Reuse
kandi has reviewed packr and discovered the below as its top functions. This is intended to give you an instant insight into packr implemented functionality, and help decide if they suit your requirements.
Get all kandi verified functions for this library.
Get all kandi verified functions for this library.
Packages your JAR, assets and a JVM for distribution on Windows, Linux and Mac OS X
QUESTION
Paypal IPN Listener Help Needed
Asked 2021-Jul-13 at 17:09Good day everyone, I've ran into some trouble with PayPal IPN. It appears PayPal does reach my PHP listener and gets a 200 return, and once the transaction is finished, I am returned to my website and get a positive message, that my transaction was successful, but the account is not credited with the purchased goods. I've pretty much hit a wall and I'm unsure of what might be the problem. Am I using outdated commands? Anything seems unusual? Thanks for your time!
<?php
require_once('globals_nonauth.php');
// 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('www.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
}
else
{
fputs($fp, $header . $req);
while (!feof($fp))
{
$res = fgets($fp, 1024);
if (strcmp($res, "VERIFIED") == 0)
{
$txn_db = $db->escape(stripslashes($txn_id));
// check the payment_status is Completed
if ($payment_status != "Completed")
{
fclose($fp);
die("");
}
$dp_check =
$db->query(
"SELECT COUNT(`dpID`)
FROM `dps_accepted`
WHERE `dpTXN` = '{$txn_db}'");
if ($db->fetch_single($dp_check) > 0)
{
$db->free_result($dp_check);
fclose($fp);
die("");
}
$db->free_result($dp_check);
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
if ($receiver_email != $set['paypal'])
{
fclose($fp);
die("");
}
// check that payment_amount/payment_currency are correct
if ($payment_currency != "USD")
{
fclose($fp);
die("");
}
// parse for pack
$packr = explode('|', $item_name);
if (str_replace("www.", "", $packr[0])
!= str_replace("www.", "", $_SERVER['HTTP_HOST']))
{
fclose($fp);
die("");
}
if ($packr[1] != "DP")
{
fclose($fp);
die("");
}
$pack = $packr[2];
if ($pack != 1 and $pack != 2 and $pack != 3 and $pack != 4
and $pack != 5)
{
fclose($fp);
die("");
}
if (($pack == 1 || $pack == 2 || $pack == 3)
&& $payment_amount != "3.00")
{
fclose($fp);
die("");
}
if ($pack == 4 && $payment_amount != "5.00")
{
fclose($fp);
die("");
}
if ($pack == 5 && $payment_amount != "10.00")
{
fclose($fp);
die("");
}
// grab IDs
$buyer = abs((int) $packr[3]);
$for = $buyer;
// all seems to be in order, credit it.
if ($pack == 1)
{
$db->query(
"UPDATE `users` AS `u`
LEFT JOIN `userstats` AS `us`
ON `u`.`userid` = `us`.`userid`
SET `u`.`money` = `u`.`money` + 5000,
`u`.`crystals` = `u`.`crystals` + 50,
`us`.`IQ` = `us`.`IQ` + 50,
`u`.`donatordays` = `u`.`donatordays` + 30
WHERE `u`.`userid` = {$for}");
$d = 30;
$t = "standard";
}
else if ($pack == 2)
{
$db->query(
"UPDATE `users` AS `u`
SET `u`.`crystals` = `u`.`crystals` + 100,
`u`.`donatordays` = `u`.`donatordays` + 30
WHERE `u`.`userid` = {$for}");
$d = 30;
$t = "crystals";
}
else if ($pack == 3)
{
$db->query(
"UPDATE `users` AS `u`
LEFT JOIN `userstats` AS `us`
ON `u`.`userid` = `us`.`userid`
SET `us`.`IQ` = `us`.`IQ` + 50,
`u`.`donatordays` = `u`.`donatordays` + 30
WHERE `u`.`userid` = {$for}");
$d = 30;
$t = "iq";
}
else if ($pack == 4)
{
$db->query(
"UPDATE `users` AS `u`
LEFT JOIN `userstats` AS `us`
ON `u`.`userid` = `us`.`userid`
SET `u`.`money` = `u`.`money` + 15000,
`u`.`crystals` = `u`.`crystals` + 75,
`us`.`IQ` = `us`.`IQ` + 80,
`u`.`donatordays` = `u`.`donatordays` + 55
WHERE `u`.`userid` = {$for}");
$d = 55;
$t = "fivedollars";
}
else if ($pack == 5)
{
$db->query(
"UPDATE `users` AS `u`
LEFT JOIN `userstats` AS `us`
ON `u`.`userid` = `us`.`userid`
SET `u`.`money` = `u`.`money` + 35000,
`u`.`crystals` = `u`.`crystals` + 160,
`us`.`IQ` = `us`.`IQ` + 180,
`u`.`donatordays` = `u`.`donatordays` + 115
WHERE `u`.`userid` = {$for}");
$d = 115;
$t = "tendollars";
}
// process payment
event_add($for,
"Your \${$payment_amount} Pack {$pack} Donator Pack has been successfully credited to you.",
$c);
$db->query(
"INSERT INTO `dps_accepted`
VALUES(NULL, {$buyer}, {$for}, '$t', " . time()
. ", '$txn_db')");
}
else if (strcmp($res, "INVALID") == 0)
{
}
}
fclose($fp);
}
ANSWER
Answered 2021-Jul-13 at 17:09For the case of PayPal receiving a 200, the IPN has been successfully sent, so you need to debug your code. Log every step to a file, test IPNs using the simulator or with sandbox mode transactions (check for test_ipn=1, use this to determine whether to post back to the "sandbox." endpoint, and don't break if a test IPN doesn't verify--just log it) -- and thus using your logging output, figure out where the hangup is as far as processing your business logic successfully.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
No vulnerabilities reported
Save this library and start creating your kit
See Similar Libraries in
Save this library and start creating your kit
Open Weaver – Develop Applications Faster with Open Source