2013-10-17 26 views
3

我有一個運行IPN腳本,並且已經工作了一段時間了。最近我開始收到HTTP/1.1 302 Moved Temporarily作爲迴應,但無法確定原因。PayPal IPN使用PHP生成HTTP 302錯誤

以下是有關張貼到貝寶並獲得響應代碼:

$sd = @fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30); 
if(!$sd) { 
    $error = 'Error opening socket connection to PayPal: '.$errstr; 
    quit($error, $errno); 
} 

$req = 'cmd=_notify-validate'; 
foreach($_POST as $key=>$value) $req .= "&{$key}=".urlencode(stripslashes($value)); 

// post back to PayPal to validate 
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: ".strlen($req)."\r\n"; 
$header .= "Host: http://www.paypal.com/\r\n"; 
$header .= "Connection: close\r\n\r\n"; 

fputs($sd, $header.$req); 
$response = ''; 
while(!feof($sd)) $response .= fgets($sd, 4096); 
fclose($sd); 

注意,所有的連接,傳輸和響應的工作,我沒有得到和錯誤。但是PayPal的迴應並不正確,因爲它沒有提供VERIFIED或INVALID,如其文檔所述,而是一個HTTP 302錯誤。

回答

0

主機,在HTTP頭,必須設置爲www.paypal.com。注意缺少http[s]://

2

我以這種方式構建我的請求(並且它工作)。也許它可以幫助你

$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
    $value = urlencode(stripslashes($value)); 
    //Fixes some special characters Paypal sends 
    $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}', $value); 
    $req .= '&' . $key . '=' . $value; 
} 
+0

我有問題中所述的相同的問題,這個答案解決了我的問題 – Asenar