Curl/php PayPal IPN url的空响应



在过去的几天里,我们的PayPal IPN已停止工作,并收到来自PayPal的空响应。服务器或我们的代码中没有任何更改。

尝试cUrl到PayPal IPN url只会返回一个空响应。

$url = "https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$data = curl_exec($ch);
curl_close($ch);
print $data;

上面的内容应该返回"INVALID",并且可以在本地主机和其他服务器上正常工作。将url更改为除PayPal之外的任何其他域也可以正常工作。

所以它似乎只收到了paypal.com 的空回复

我想知道是否有人遇到过这个问题,或者是否有人能提出解决问题的建议?

谨致问候Musaffar

看起来贝宝在周末做了一些安全更改。自周日以来,一些电子商务用户也出现了类似的症状,卷曲错误被证明是:

SSL证书问题:无法获取本地颁发者证书

在他们的情况下,这是由于本地证书副本只有Paypal证书,而没有根证书或中间证书,有更新它的解决方案。

工作证书可在以下位置找到:OSCOM Phoenix github

我可能会开始检查curl是否给了您任何错误。PHP在这种情况下为您提供curl_errno($ch)curl_error($ch),它们将返回一条消息或分别返回错误代码

以防没有任何可疑之处。我可能会尝试验证您是否能够从服务器上的CLI运行上述程序。(需要SSH访问(

curl -H "User-Agent: ..." "https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate"

我希望这能给你一个好的起点。请告诉我这是否有帮助,或者你是否需要更多的想法。

编辑#2:作者添加评论后:

cUrl确实返回错误:错误35,错误消息如下:

error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

在这种情况下,我猜你的系统已经过时,不支持贝宝的SSL密码。您可以尝试强制使用特定的TLS版本。截至目前,贝宝网络服务器仅支持TLS1.2或TLS1.3。这就是你可以强迫它的方式:

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_3);

此外,@Preston PHX在一条评论中提到,这个问题的一个很好的参考来自贝宝:

  • https://github.com/paypal/TLS-update#php
  • https://developer.paypal.com/docs/api/info-security-guidelines/

最新更新