2010-05-16 57 views
0

我是一位相對的PHP新手,實現了PayPal IPN監聽器,並且所有人似乎都能正常工作,除非我真的不知道如何檢查響應代碼。PHP:如何檢查響應代碼?

我試過用cURL醜陋的東西,但它根本不起作用(我不理解cURL)。

我試過這段代碼,我從在網絡上的某個地方抓起:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 
$response_headers = get_headers($fp); 
$response_code = (int)substr($response_headers[0], 9, 3); 

...但它不工作(返回$ RESPONSE_CODE = 0)。

所以現在,我調試不需要檢查響應200

任何人都更有經驗能告訴我什麼是正確的/簡單的方法來檢查這個我IPN的代碼?

感謝

+0

如果不知道get_headers()函數的作用,這是無法回答的。 – ThiefMaster 2010-05-16 13:59:49

+0

這不是我的:) http://php.net/manual/en/function.get-headers.php – Tom 2010-05-16 14:02:26

+0

如果你使用fsockopen,你必須自己處理整個http請求,你的上面的代碼只是打開一個套接字,沒有http。因此,調用get_headers根本沒有任何意義。查看fsockopen文檔中的示例1。你在哪裏卡住cURL? – zedoo 2010-05-16 14:08:10

回答

2

它的get_headers($網址),不get_headers($ FP)。除非我閱讀完全錯誤(還有其他一些我從未見過的模式),否則您需要將它讀取的URL傳遞給它,而不是套接字句柄。實際上,它顯然是做自己的GET,所以它對目前的任務沒用。

fsockopen(...)是較低級別(TCP/IP)功能。它返回一個套接字句柄,而不是CURL句柄。這就是爲什麼你不能使用curl_getinfo(...)。你想這樣的事情...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
curl_setopt($fp, CURLOPT_POST, true); 
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST); 
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true); 

$response = curl_exec($fp); 

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE); 

除非我記得,你需要添加「CMD = _notify-驗證」到後場。

請勿使用fsockopen(...)。是的,我知道,這就是PayPal示例代碼的作用。但它意味着無處不在,不能依靠CURL被安裝。你可以,所以用它。

+0

謝謝,這真的很有用。 – Tom 2010-05-16 14:54:42

+0

測試&工作:$ _POST應該被$ req替換(從準備好的PayPal代碼,因此它包含所有必需的參數),+ curl_close($ fp);最後。 – Tom 2010-05-17 14:24:09