2013-10-17 1 views
3

IPN 스크립트가 실행 중이며 얼마 동안 사용해 왔습니다. 최근에 나는 HTTP/1.1 302 Moved Temporarily을 응답으로 시작하여 이유를 알 수 없습니다.PHP를 사용하여 HTTP 302 오류를 생성하는 PayPal IPN

다음은 응답을 페이팔에 게시하고 점점 관련된 코드 :

$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

호스트가 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