首先让我说我不是真正的开发者。几年前我将下面的代码拼凑在一起,直到上周我才真正理解它。从上周开始我每次收到PayPal IPN时都会收到110连接超时套接字错误!
如果我直接在浏览器中访问该页面,我会得到以下内容
警告:fsockopen()[function.fsockopen]:无法连接到第37行的paypal_ipn.php5中的ssl://www.paypal.com:443(连接超时)
以下是我的paypal_ipn.php5中的代码,我们将不胜感激。
<?php
error_reporting(E_ALL ^ E_NOTICE);
$email = $_GET['ipn_email'];
$header = "";
$emailtext = "";
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc'))
{
$get_magic_quotes_exists = true;
}
foreach ($_POST as $key => $value)
{
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1)
{
$value = urlencode(stripslashes($value));
}
else
{
$value = urlencode($value);
}
$req .= "&$key=$value";
}
// Post back to PayPal to validate new http 1.1
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .="Host: www.paypal.com\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .="Connection: closer\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
if (!$fp)
{
mail("save10percent.net@gmail.com", "socket error!", "socket error!", "$errno $errstr");
}
else
{
fputs ($fp, $header . $req);
while(!feof($fp))
{
$res = fgets ($fp, 1024);
if(stristr($res, 'VERIFIED') !== FALSE)
{
//good payment process transaction
//code removed to make my post smaller
}
elseif(stristr($res, 'INVALID') !== FALSE)
{
// If 'INVALID', send an email.
mail("save10percent.net@gmail.com", "Live-INVALID IPN", "Invalid \n\n\n res = $res \n\n\n req= $req",$error_email);
}
}
}
fclose ($fp);
?>
答案 0 :(得分:0)
此套接字错误正在尝试通知您PayPal无法将您的SSL证书识别为有效,因此无法为您打开套接字。
从此代码段中可以看出,您已设置为1024加密,不再受支持。从2月29日开始,要求所有SSL证书必须支持SHA-256(2048)。这意味着您当前的SHA-128证书不再适用于PayPal的系统。如果您不管理您的Web服务器,您可以联系任何人将证书升级到PayPal支持的证书。
https://devblog.paypal.com/upcoming-security-changes-notice/#ssl