2011-02-23 94 views
4

我正在做一些关于iDev affiliate paypal IPN的定制工作,我正试图设置一个退款项目。我有我的数据库工作正确,但我似乎无法获得IF的权利。PayPal IPN检测退款,PHP

任何建议我应该改变它?

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"); 
    } 
} 

哈德森

+0

硬不知道正在调用该脚本的系统的规格来回答。你对IPN有什么期待? – 2011-02-23 22:44:19

+0

预计会发生什么,实际发生了什么?您需要提供更具体的信息 – Stoosh 2011-02-23 22:45:16

+0

如果您从贝宝获得该状态,这意味着什么?每当我获得完成状态时,客户有可能收回资金? – 2011-11-20 02:43:23

回答

7

这里是我最终使用成功:

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

为什么会取消Canceled_Reversal退款? – Volomike 2012-02-20 14:26:40

+0

哦,你的权利,我修改了代码以排除那个。 “状态Canceled_Reversal将表明反转本身被取消...” – atwellpub 2012-02-20 19:01:41

5

我目前正在谈判与贝宝的事。 的事情是,有时你会得到的消息序列:

  • 完成(销售)
  • 反转(买方投诉)

有时你会得到这样的:

  • 完成(sale)
  • 退款(买家向您抱怨,您没有“官方”投诉退款)

有时你会得到这样的:

  • 完成(销售)
  • 反转(买方投诉)
  • 退款(投诉后您退还)

所以,除非贝宝同意为了实施我的解决方案,在后面的例子中(在几年前就是这种情况),在Refunded之前总是发送Canceled_Reversal,或者提出另一个解决方案,在此问题上有一定的确定性,您需要使用您自己的机制,不要重复计算退款。

如果您存储在一个数据库事务,下面可能是非常稳固,从我的POV:

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 
    } 
} 
+0

只是想知道他们的回复是什么? – lulalala 2015-05-28 02:04:28

+0

虽然现在很难找到这些电子邮件,但一般来说回复有些模糊:“我们正在努力提高一致性,等待下一个版本”。 不支持PayPal atm,所以如果有任何更改不能说。 – nssmart 2015-07-28 22:26:36