PayPal 发送多个 IPN

标签 paypal paypal-ipn http-1.1

我有这段代码,一切正常。就是那个PayPal不断重新发送多个 IPNs .我已经阅读了 PayPal 的论坛,他们说 PayPal 没有收到我的 HTTP/1.1 200 OK,所以它一直重新发送 IPN。我该怎么做?

function sql_execute($sql){
    $sql_connect = @mysql_connect($_SERVER['HTTP_HOST'].':3306','root', '****') or
       die('Could not connect: ' . mysql_error());
    mysql_select_db('4bkk');
    mysql_query($sql);
    $rows = mysql_affected_rows($sql_connect);  //mysql_insert_id();
    mysql_close();
    return $rows;
}

function sql_query($sql){
    // echo $sql;
    $sql_connect = @mysql_connect($_SERVER['HTTP_HOST'].':3306','****', 'zzz111') or
        die('Could not connect: ' . mysql_error());
    mysql_select_db('4bkk');
    $rs = mysql_query($sql) or die(mysql_error());
    mysql_close();
    return $rs;
}

function logtrace($o){
    $q = "INSERT INTO log (trace, trace_time) VALUES ('$o', NOW() )";
    sql_query($q);
}

function send_email($t,$s,$m,$h){
    //mail($t, $s, $m, $h);

    $fh = fopen('result_ipn_test.txt', 'w');
    fwrite($fh, $t.' '.$s.' '.$m.' '.$h);
    fclose($fh);

    logtrace('Mail is sent and exit called');

    exit();
}

logtrace('__________NEW SESSION__________');

$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';

$postFields = 'cmd=_notify-validate';

foreach($_POST as $key => $value)
{
    $postFields .= "&$key=".urlencode($value);
}

$ch = curl_init();

curl_setopt_array($ch, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postFields
));

$result = curl_exec($ch);
$info = curl_getinfo($ch);

logtrace($info['url']);

curl_close($ch);

//get buyers information from PAYPAL checkout
$email = $_POST['payer_email'];
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$amount = $_POST['amount3'];
$plan = $_POST['option_selection1'];

logtrace($email.' -- '.$active);

$q = "SELECT * FROM users WHERE email='$email' AND user_level='' AND active='unverified'"; //Unprocessed record = no user_level and active = 'unverified'

$ex = sql_execute($q);
//logtrace("THIS ".$q."  =>  ".$ex);

if(sql_execute($q)){
    logtrace('IT IS TRUE');
    $flag = TRUE;
}
else{
    logtrace('FALSE');
    $flag = FALSE;
}

logtrace($result.' RESPONSE FROM PAYPAL');
if(($result=='VERIFIED') && $flag){ //Checks first if PayPal is valid, email address exists in
                                    //records and checks if user_level='' and active='unverified',
                                    //if not enters.
    logtrace('USER IS READY FOR VERIFICATION');

    $q = "SELECT * FROM users WHERE email='$email'";
    $data = sql_query($q);

    $con = mysql_fetch_array($data);

    //Get buyers information from the database
    $email2 = $con['email'];
    $first_name = $con['first_name'];
    $last_name = $con['last_name'];
    $active = $con['active'];
    $user_level = $con['user_level'];

    logtrace('Emails match');

    $u = "UPDATE users SET active='verified', user_level='$plan' WHERE email='$email' LIMIT 1";

    if (sql_query($u)) { //Successful verification
        logtrace('|| Update was sucessful');
    }
    else{ // Unsuccessful verification.
        logtrace('|| Something went wrong with update.');
    }
}
else{ // The user doesn't have any record in the database.
    $q = "SELECT * FROM users WHERE email='$email' AND (user_level='Monthly' OR user_level='Quarterly' OR user_level='Yearly')";

    if(sql_execute($q)){ // The user is already verified
        logtrace('THE USER IS ALREADY VERIFIED');
    }
    else{ // The user does not exist.
        logtrace('THE USER HAS NO RECORD ON DATABASE');

    }
}

最佳答案

请引用示例代码https://www.x.com/instant-payment-notification-4

基于上面的代码,您可以尝试为

设置 curl 选项

CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 CURLOPT_HTTPHEADER, array('连接: 关闭')

在上面的代码中,您设置为 curl_setopt_array ...

我认为这应该可以解决您的 HTTP/1.1 200 OK 问题。

关于PayPal 发送多个 IPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13175231/

相关文章:

c# - C# 中的 Paypal IPN 监听器问题

ssl - 在启用 SSL 的情况下启动 Tomcat 6 时出错

rest - PUT 或 PATCH 仅更改一个字段值

ios - 使用AFNetworking的AFHTTPRequestOperation读取状态行(状态代码和原因短语)

c# - Paypal API 在指向我的证书文件时失败

php - Paypal 订阅代码出错,错误 : 10474

.htaccess - 重定向 Paypal IPN URL

paypal - 是否可以通过其他人的网关自动付款?

c# - Paypal API,HttpWebRequest 抛出 SSL WebException

paypal - PayPal的CUSTOM变量可以在eBay上使用吗?