2010-07-30 47 views
0

我一直有一個非常困難的時間最近在我們的paypal ipn模塊中調試curl函數。調試curl_exec

這裏是我們使用的模塊:http://www.oscommerce.com/community/contributions,2679但是相關的代碼如下。

我遇到約5%的交易出現此錯誤。它會導致訂單不會更新爲付費狀態。

我確定它是curl_exec這是失敗,並停止進一步的腳本正在處理。在cPanel的錯誤日誌中沒有與此相關的錯誤。

我已經嘗試改變curl和php超時持續時間沒有變化。我嘗試過使用try和catch,但那也沒有幫助。

當腳本停止執行時,它碰到curl_exec我不能使用curl_error獲得有關問題的任何反饋。

我已經查看了傳遞給IPN的參數,但它們都很好。

我覺得我已經盡我所能去確定這個問題的原因,並沒有得到任何地方。

如果腳本使用fsock作爲連接的主要方法,則會遇到同樣的問題。

如果有人對調試這個問題的其他方法有什麼建議,我會很感激。

感謝

if (MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') { 
$server = 'www.paypal.com'; 
} else { 
$server = 'www.sandbox.paypal.com'; 
} 

$fsocket = false; 
$curl = false; 
$result = false; 

if (function_exists('curl_exec')) { 
$curl = true; 
} elseif ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30))) { 
$fsocket = true; 
} elseif ($fp = @fsockopen($server, 80, $errno, $errstr, 30)) { 
$fsocket = true; 
} 

if ($fsocket == true) { 
$header = 'POST /cgi-bin/webscr HTTP/1.0' . "\r\n" . 
       'Host: ' . $server . "\r\n" . 
       'Content-Type: application/x-www-form-urlencoded' . "\r\n" . 
       'Content-Length: ' . strlen($parameters) . "\r\n" . 
       'Connection: close' . "\r\n\r\n"; 

@fputs($fp, $header . $parameters); 

$string = ''; 
while ([email protected]($fp)) { 
    $res = @fgets($fp, 1024); 
    $string .= $res; 

    if (($res == 'VERIFIED') || ($res == 'INVALID')) { 
    $result = $res; 

    break; 
    } 
} 

@fclose($fp); 



} elseif ($curl == true) { 
$ch = @curl_init(); 

@curl_setopt($ch, CURLOPT_URL, 'https://' . $server . '/cgi-bin/webscr'); 
@curl_setopt($ch, CURLOPT_POST, true); 
@curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); 
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
@curl_setopt($ch, CURLOPT_HEADER, false); 
@curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

$result = @curl_exec($ch); 

curl_close($ch); 
} 
+1

你可以格式化你的代碼有點plz。 – 2010-07-30 11:05:26

+0

可能重複[curl \ _exec不返回數據](http://stackoverflow.com/questions/8410106/curl-exec-not-returning-data) – kenorb 2015-05-18 19:41:09

回答

0

如果使用"@" PHP不會顯示錯誤更多,它會抑制誤差。所以我建議刪除這個,然後開始調試。

+0

我應該提及,我添加了@作爲我的一部分狂躁的測試,希望我可以讓腳本繼續,但他們不。 – dontaskagain 2010-07-30 12:44:02

0

我知道這並不回答你如何得到curl_exec工作的問題,但是你有沒有很好的理由不只是使用fsock?我一直在fsock上運行我的IPN監聽器,它的工作原理就像一個魅力...