【问题标题】:Paypal IPN Detect Refund, PHPPaypal IPN 检测退款,PHP
【发布时间】:2011-07-03 03:38:55
【问题描述】:

我正在 iDev 附属贝宝 IPN 上做一些自定义工作,并且我正在尝试设置退款项目的捕获。我的数据库工作正常,但我似乎无法正确捕获 IF。

关于我应该将其更改为什么的任何建议?

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

哈德森

【问题讨论】:

  • 在不知道调用此脚本的系统规格的情况下很难回答。您希望 IPN 提供什么意见?
  • 预期会发生什么,实际发生了什么?您需要提供更具体的信息
  • 如果您从贝宝获得该状态,这意味着什么?每当我完成状态时,客户是否有可能取回其钱?
  • 如果付款状态返回为已退款,则客户已撤销付款。但在大多数情况下,您必须批准退款请求,除非客户提出拒付,否则可能会在未经您批准的情况下拿走这笔钱。

标签: php paypal paypal-ipn


【解决方案1】:

这是我最终成功使用的:

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

【讨论】:

  • 为什么 Canceled_Reversal 会是退款?
  • 哦,对了,我已经修改了代码以排除那个。 “Canceled_Reversal 的状态表明 Reversal 本身已被取消......”
【解决方案2】:

我目前正在与 PayPal 协商此事。 问题是有时您会收到以下消息序列:

  • 完成(出售)
  • 已撤销(买家投诉)

有时你会得到这个:

  • 完成(出售)
  • 已退款(买家向您投诉,而您在没有“官方”投诉的情况下退款)

有时你会得到这个:

  • 完成(出售)
  • 已撤销(买家投诉)
  • 已退款(您在投诉后已退款)

因此,除非 PayPal 同意实施我的解决方案,即在后一个示例中始终在退款之前发送 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
  }
}

【讨论】:

  • 虽然现在很难找到这些电子邮件,但总的来说,回复有些含糊:“我们正在努力实现一致性,等待下一个版本”。不使用 PayPal atm,所以不能说是否有任何变化。
猜你喜欢
  • 2021-07-13
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 2014-08-14
  • 2011-01-17
  • 2018-08-22
  • 2014-01-23
相关资源
最近更新 更多