Paypal IPN Detect Refund, PHP

I'm doing some normal work on the iDev affiliate paypal IPN, and I'm trying to set up a trick for returned items. I am working correctly with a database, but it seems I can not catch IF correctly.

Any recommendations on what I should change?

if($_REQUEST["payment_status"] == "refunded"||$testing==1) { $email = $_REQUEST["payer_email"]; $sid = $_REQUEST["subscr_id"]; $tid = $_REQUEST["txn_id"]; if (!$tid) { $tid='xxx'; } if ($testing==1) { echo "testing on"; $sid = "I-E5E34E0DTMUS"; } $query = "SELECT * FROM idevaff_sales WHERE tid1='$tid'"; $result = mysql_query($query); if (!$result) { //echo $query; exit; mail('***@gmail.com',"1",$query); } $arr = mysql_fetch_array($result); $aid = $arr['id']; $query = "SELECT * FROM idevaff_affiliates WHERE tid1='$tid'"; $result = mysql_query($query); if ($result) { //echo $query; mail('***@gmail.com',"2","$query"); } $arr = mysql_fetch_array($result); $email = $arr['email']; $f_name = $arr['f_name']; mail($email,"Affiliate Message - A refund has granted for recent affiliate commission.","Dear $f_name, \n\n Message here about refund" ); $query = "UPDATE idevaff_sales SET approved=3 WHERE tracking='$sid'"; $result = mysql_query($query); if (!$result) { //echo $query; exit; mail('***@gmail.com',"3","$query"); } } 

Hudson

+4
source share
2 answers

Here is what I have successfully used:

 if($_REQUEST["payment_status"] == "Refunded" || $_REQUEST["payment_status"] == "Reversed" || $testing==1) { /*do database work here*/ } 
+7
source

Now I am discussing this issue with PayPal. The fact is that sometimes you get this sequence of messages:

  • Completed (sale)
  • Rejected (customer complaint)

Sometimes you get this:

  • Completed (sale)
  • Refund (the buyer complained to you and you returned without a β€œformal” complaint)

Sometimes you get this:

  • Completed (sale)
  • Rejected (customer complaint)
  • Refund (you return after filing a complaint)

So, if PayPal does not agree to implement my solution, to always send Canceled_Reversal before returning in the last example (which was a few years ago), or come up with another solution that will provide some certainty on this issue, you need to use your own mechanisms so as not to double return invoice.

If you store transactions in the database, from my POV can be pretty solid:

 if (($stat == 'Refunded' || $stat == 'Reversed') && !empty($_POST['parent_txn_id'])) { $sum = $db->query('SELECT SUM(`mc_gross`) FROM `transactions` WHERE `parent_txn_id`= ?', $_POST['parent_txn_id'])->fetchColumn(); if ($sum && $sum < 0) { // already had reversed/refunded call, // ignore this one } } 
+5
source

Source: https://habr.com/ru/post/1341044/


All Articles