下午好,
我们的客户今天早上收到了一封电子邮件通知,说明:
请检查处理PayPal即时付款通知(IPN)的服务器。发送到以下网址的即时付款通知失败:
https://www.domain1.com/paypal/ipn
https://www.domain2.com/paypal/ipn
我查看了处理这些端点的代码,发现由于以下端点的响应为空而引发异常:
https://www.paypal.com/cgi-bin/webscr
app / code / core / Mage / Paypal / Model / Ipn.php(133)中的代码:
protected function _postBack(Zend_Http_Client_Adapter_Interface $httpAdapter)
{
$postbackQuery = http_build_query($this->_request) . '&cmd=_notify-validate';
$postbackUrl = $this->_config->getPaypalUrl();
$this->_debugData['postback_to'] = $postbackUrl;
$httpAdapter->setConfig(array('verifypeer' => $this->_config->verifyPeer));
$httpAdapter->write(
Zend_Http_Client::POST,
$postbackUrl,
'1.1',
array('Connection: close'),
$postbackQuery
);
try {
$postbackResult = $httpAdapter->read();
} catch (Exception $e) {
$this->_debugData['http_error'] = array('error' => $e->getMessage(), 'code' => $e->getCode());
throw $e;
}
/*
* Handle errors on PayPal side.
*/
$responseCode = Zend_Http_Response::extractCode($postbackResult);
if (empty($postbackResult) || in_array($responseCode, array('500', '502', '503'))) {
if (empty($postbackResult)) {
$reason = 'Empty response.';
} else {
$reason = 'Response code: ' . $responseCode . '.';
}
$this->_debugData['exception'] = 'PayPal IPN postback failure. ' . $reason;
throw new Mage_Paypal_UnavailableException($reason);
}
$response = preg_split('/^\r?$/m', $postbackResult, 2);
$response = trim($response[1]);
if ($response != 'VERIFIED') {
$this->_debugData['postback'] = $postbackQuery;
$this->_debugData['postback_result'] = $postbackResult;
throw new Exception('PayPal IPN postback failure. See ' . self::DEFAULT_LOG_FILE . ' for details.');
}
}
我设置了同一网站的沙箱版本,在处理付款时,我仍然收到来自https://www.sandbox.paypal.com/cgi-bin/webscr的空回复
因为响应为空,所以抛出异常并且响应头被设置为503 Service Unavailable,这是我认为触发了客户端收到的电子邮件。
我在这里看到了一些类似的问题,但是实际上导致响应为空的是什么没有结论?这是Paypal的问题,还是我们的结局有问题?为了完整起见,我们最近进入了一个新的服务器(虽然这个问题似乎只出现在最后一天左右)。
答案 0 :(得分:0)
因此,在承诺自己已经用尽了我的询问后,我似乎已经开枪了。
我们的防火墙已将白名单api-3t.paypal.com列入白名单,这是大多数其他API调用的终端。
但正如您所见,这一个请求将转至www.paypal.com(或www.sandbox.paypal.com)
更糟糕的是,我将www.paypal.com添加到了防火墙,但没有添加到www.sandbox.paypal.com,这意味着即使我已经“修复”了生产环境,我的沙盒环境也出现了错误......