Php PayPal IPN超时停止工作

Php PayPal IPN超时停止工作,php,paypal,paypal-ipn,Php,Paypal,Paypal Ipn,我手上有个奇怪的问题。我有下面的PayPal IPN脚本处理用户激活等。该脚本在使用IPN模拟器时工作良好,我还没有用沙箱帐户测试它。剧本在现场也表现得很好。问题是,它在几次IPN呼叫后停止工作。这有什么原因吗?PayPal是否可能阻止IPN呼叫?我不明白为什么脚本会断断续续地工作。也许我在这里遗漏了什么。所有账户的IPN都是在贝宝端收到的。任何帮助都将不胜感激 <?php $req = 'cmd=_notify-validate'; foreach ($_POST as $key =

我手上有个奇怪的问题。我有下面的PayPal IPN脚本处理用户激活等。该脚本在使用IPN模拟器时工作良好,我还没有用沙箱帐户测试它。剧本在现场也表现得很好。问题是,它在几次IPN呼叫后停止工作。这有什么原因吗?PayPal是否可能阻止IPN呼叫?我不明白为什么脚本会断断续续地工作。也许我在这里遗漏了什么。所有账户的IPN都是在贝宝端收到的。任何帮助都将不胜感激

<?php

$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix
$req .= "&$key=$value";
 } 

$headers = "From: DD Notifications\r\n";
$headers .= "Reply-To: notifications@deep-democracy.net\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

$url = "http://www.paypal.com/cgi-bin/webscr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
$result = curl_exec($ch);
curl_close($ch); 

if (strcmp ($result, "VERIFIED") == 0) {

$item_name = $_POST['item_name1'];
$item_number = $_POST['item_number1'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$custom_var = $_POST['custom'];

require_once("../includes/db_connection.php");


    $result_sql = mysql_query("SELECT * FROM delegate_payments WHERE payment_id='$custom_var' AND payment_completed='No'");

    if (mysql_num_rows($result_sql) == 1) {

        mysql_query("UPDATE delegate_payments SET payment_completed='Yes' WHERE payment_id='$custom_var'");
        $row = mysql_fetch_array($result_sql);
        $amount = $row['payment_amount'];
        $names_array = explode(', ', $row['payment_content']);

        $result2_sql = mysql_query("SELECT * FROM users WHERE email='$payer_email'");
        $row = mysql_fetch_array($result2_sql);
        $current_amount = $row['amount_due'];
        $new_amount = $current_amount - $amount;

        mysql_query("UPDATE users SET amount_due='$new_amount' WHERE email='$payer_email'");

        foreach ($names_array as &$value) {
            mysql_query("UPDATE users SET activated='1' WHERE email='$value'");
            mail($value, $subject, $email_message, $headers);
            $result_sql = mysql_query("SELECT * FROM users WHERE email=$value");
            $row = mysql_fetch_array($result_sql);
            $name = $row['name']." ".$row['surname'];
            $city = $row['city'];
            $payee_email = $row['email'];
            $level = $row['level'];
            $country = $row['country'];
            $course_date = $row['course_date'];

        }
}

} else if (strcmp ($result, "INVALID") == 0) {

}

?>

我猜发送到脚本的数据会导致偶尔抛出错误。您的脚本可能没有正确处理错误或丢失的数据。我过去所做的是在我的IPN脚本的每一行之间放一个日志语句,这样我就知道脚本什么时候爆炸了。您还应该使用Paypal沙箱来测试不同的场景