2012-11-01 61 views
0

我有這個代碼,一切工作正常。這只是PayPal不斷重發多個IPNs。我已經閱讀了PayPal論壇,他們說PayPal沒有從我那裏得到HTTP/1.1 200 OK,所以它不斷重發IPN。我將如何去做這件事?貝寶發送多個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'); 

    } 
} 

回答

1

請參考示例代碼https://www.x.com/instant-payment-notification-4

基於上面的代碼,你可以嘗試設置捲曲選項

CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1 CURLOPT_HTTPHEADER,陣列( '連接:關閉')

在上面的代碼中,您設置爲curl_setopt_array ...

This應該解決你的HTTP/1.1 200 OK問題。