2011-02-23 99 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