PayPal即使付款已处理,IPN 也会返回“无效”


PayPal IPN returns "INVALID" even though payment was processed

失败的请求

请求:cmd=_notify-验证&mc_gross=2.00&protection_eligibility=合格&address_status=确认&payer_id=LDYM496TZ5PMS&tax=0.00&address_street=7 马尔科姆大道夸灵顿山&payment_date=10:56:23 2014年7月10日 PDT&payment_status=已完成&字符集=窗口-1252&address_zip=DH6 4QT&first_name=假&mc_fee=0.38&address_country_code=GB&address_name=假 假&notify_version=3.8&自定义=168&payer_status=未验证&业务=fake@gmail.com&address_country=美联航 Kingdom&address_city=Durham&quantity=0&verify_sign=AO3SqMqkkL6g6znCfk.bTx0YGc9QAAC62A.uYD2AR27aMUKA8tjOenQg&payer_email=fake@gmail.com&txn_id=0V51470288084925M&payment_type=instant&last_name=fake&address_state=&receiver_email=fake@gmail.com&payment_fee=0.38&receiver_id=43PTLVVM58JD4&txn_type=web_accept&item_name=Hyubusa&mc_currency=USD&item_number=&residence_country=GB&transaction_subject=168&payment_gross=2.00&ipn_track_id=8f6ab718d71f2

开机自检失败

mc_gross=2.00&protection_eligibility=合格&address_status=已确认&payer_id=LDYM496TZ5PMS&tax=0.00&address_street=7+Malcom+Ave%0D%0AQuarrington+Hill&payment_date=10%3A56%3A23+Jul+10%2C+2014+PDT&payment_status=已完成&字符集=windows-1252&address_zip=DH6+4QT&first_name=假&mc_fee=0.38&address_country_code=GB&address_name=假+假notify_version=3.8&自定义=168&payer_status=未验证&业务=fake%40gmail.com&address_country=United+Kingdom&address_city=Durham&quantity=0&verify_sign=AO3SqMqkkL6g6znCfk.bTx0YGc9QAAC62A.uYD2AR27aMUKA8tjOenQg&payer_email=fake%40gmail.com&txn_id=0V51470288084925M&payment_type=instant&last_name=fake&address_state=&receiver_email=adamhyubusa%40gmail.com&payment_fee=0.38&receiver_id=43PTLVVM58JD4&txn_type=web_accept&item_name=日鸟&mc_currency=美元&item_number=&residence_country=GB&transaction_subject=168&payment_gross=2.00&ipn_track_id=8f6ab718d71f2

所以,我的PayPal IPN有时会返回无效的响应!当我在沙盒上测试它时,它工作正常。当我用自己的 CC 测试它时,它工作正常。

然而,偶尔当我收到捐款时,钱会通过...但来自 IPN 的响应无效。

我在美国...它目前失败的特定捐赠者来自英国......我不知道这是否有任何相关性。这是我的代码。

$request = "cmd=_notify-validate"; 
foreach ($_POST as $varname => $varvalue){
$email .= "$varnamefake: $varvalue'n";  
if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()){  
    $varvalue = urlencode(stripslashes($varvalue)); 
}
else { 
    $value = urlencode($value); 
} 
$request .= "&$varname=$varvalue"; 
} 
$ch = curl_init();
//curl_setopt($ch,CURLOPT_URL,"https://www.sandbox.paypal.com/cgi-bin/webscr");
curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$request);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
curl_close($ch);
switch($result){
    case "VERIFIED":
        $message = "good: $".$_POST['mc_gross']." | ".$_POST['custom'];
        $amt = str_replace("$", "", $_POST['mc_gross']);
        $data = array(
               'STATUS' => 1,
               'AMOUNT' => $amt
        );
        $this->db->where('ID', $_POST['custom']);
        $this->db->update('donations', $data);        
    case "INVALID":
        $message ="bad";
        mail("fakeemail@fake.com","paypal response", $message);
        break;
    default:
        $message ="other";
        mail("fakeemail@fake.com","paypal response", $message);
}

失败的请求

请求:cmd=_notify-验证&mc_gross=2.00&protection_eligibility=合格&address_status=确认&payer_id=LDYM496TZ5PMS&tax=0.00&address_street=7 马尔科姆大道夸灵顿山&payment_date=10:56:23 2014年7月10日 PDT&payment_status=已完成&字符集=窗口-1252&address_zip=DH6 4QT&first_name=假&mc_fee=0.38&address_country_code=GB&address_name=布兰登 假&notify_version=3.8&自定义=168&payer_status=未验证&业务=fake@gmail.com&address_country=美联航 Kingdom&address_city=Durham&quantity=0&verify_sign=AO3SqMqkkL6g6znCfk.bTx0YGc9QAAC62A.uYD2AR27aMUKA8tjOenQg&payer_email=fake@gmail.com&txn_id=0V51470288084925M&payment_type=instant&last_name=Watson&address_state=&receiver_email=fake@gmail.com&payment_fee=0.38&receiver_id=43PTLVVM58JD4&txn_type=web_accept&item_name=Hyubusa&mc_currency=USD&item_number=&residence_country=GB&transaction_subject=168&payment_gross=2.00&ipn_track_id=8f6ab718d71f2

开机自检失败

mc_gross=2.00&protection_eligibility=合格&address_status=已确认&payer_id=LDYM496TZ5PMS&tax=0.00&address_street=7+Malcom+Ave%0D%0AQuarrington+Hill&payment_date=10%3A56%3A23+Jul+10%2C+2014+PDT&payment_status=已完成&字符集=windows-1252&address_zip=DH6+4QT&first_name=假&mc_fee=0.38&address_country_code=GB&address_name=假+假notify_version=3.8&自定义=168&payer_status=未验证&业务=fake%40gmail.com&address_country=United+Kingdom&address_city=Durham&quantity=0&verify_sign=AO3SqMqkkL6g6znCfk.bTx0YGc9QAAC62A.uYD2AR27aMUKA8tjOenQg&payer_email=fake%40gmail.com&txn_id=0V51470288084925M&payment_type=instant&last_name=Watson&address_state=&receiver_email=adamhyubusa%40gmail.com&payment_fee=0.38&receiver_id=43PTLVVM58JD4&txn_type=web_accept&item_name=日鸟&mc_currency=美元&item_number=&residence_country=GB&transaction_subject=168&payment_gross=2.00&ipn_track_id=8f6ab718d71f2

if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()){  
    $varvalue = urlencode(stripslashes($varvalue)); 
}
else { 
    $value = urlencode($value); 
} 

IPN 变量已经进行了 url 编码,没有必要再次对它们进行编码以发送回PayPal - 可能是某些事务有效而其他事务无效的原因。