2016-09-13 4 views
0

새로운 보안 요구 사항 (2016 및 2017)에 따르면 "IPN"기간 동안 서버와 페이팔 간 교환에 HTTPS가 필요할 것으로 보입니다. This question is linked to this subject 및 또한 this.HTTPS를 사용하는 페이팔 IPN

이 PHP 코드는 어떻게 적용해야합니까?

// reponse a PayPal pour validation 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Host: www.paypal.com:80\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30); 

충분 https://www.paypal.com에 의해 www.paypal.com의 두 발행 수를 교체시겠습니까? OpenSSL을 지원이 설치되어있는 경우

+0

포트는 포트 * 443으로 *하지 않으며, 해당 서버의 관리자가 보안 포트되는 모든 포트를 설정할 수있는 작은 노트 443이 아닌 80 –

답변

1

hostname

, 원격 호스트에 연결하기 위해 SSL 또는 TCP/IP를 통한 TLS 클라이언트 연결을 사용하도록 ssl:// 또는 tls:// 중 하나와 함께 hostname 접두사 수 있습니다.

http://www.php.net/fsockopen

포트는 443로 변경해야합니다. 그래서 : 당신은 낮은 수준의 전송하는 소켓을 열고 있기 때문에

$fp = fsockopen('tls://www.paypal.com', 443, $errno, $errstr, 30); 

https://은 작동하지 않을 것입니다. HTTP는 그 위에 소켓이 알지 못하거나 신경 쓰지 않는 응용 프로그램 수준의 프로토콜입니다. 소켓 레벨에서는 TLS 연결입니다. 대답은을 deceze에 추가

+0

될 것이다. (사용자 지정 보안 포트를 설정하는 사람들 중 일부는 SO 대답을 읽을 때 이것을 실현하는 사람이되기를 희망합니다.) – Martin

+0

자세한 내용없이 * HTTPS *를 사용하라는 메시지가 나오면 꽤 가학적일 수 있습니다. 443 이외의 포트를 사용하는 것. :) – deceze

+0

Thanks @deceze. '$ header. = "Host : www.paypal.com:80\r\n";''$ header. = "로 변경해야합니까? Host : tls : //www.paypal.com : 443 \ r \ n ";"또는 HTTPS입니까? – Basj

0

는, 페이팔의 업데이트는 이제 ipnpb.paypal.com

대신이 코드를 사용해보십시오 사용하는 것이 필요합니다.

$fp = fsockopen('ssl://ipnpb.paypal.com', "443", $err_num, $err_str, 60); 
+0

감사합니다. @FluxCoder. 소스 (Paypal의 업데이트)에 대한 링크를 추가하거나 여기에 인용 할 수 있습니다. 나중에 참조 할 때 유용 할 것입니다. – Basj