无法接收 PayPal IPN - PayPal 总是收到 403 错误

Cannot receive PayPal IPN - PayPal always gets a 403 error

我正在尝试在 wordpress 应用程序中接收 IPN 消息(以了解付款何时发生)。 Wordpress 在 linux/apache 上运行(PHP 作为 FastCGI)。

付款后,我在服务器上收不到 IPN。 PayPal 似乎无法将它们发送到我的服务器,因为它收到了 403 状态代码 ("No Permissions")。 SSL 访问日志显示如下:

173.0.81.1 - - [04/Sep/2015:08:44:40 +0200] "POST /index.php?sell_media-listener=IPN HTTP/1.0" 403 9402 "-" "PayPal IPN ( https://www.paypal.com/ipn )"
173.0.81.33 - - [04/Sep/2015:08:44:59 +0200] "POST /index.php HTTP/1.1" 403 9533 "-" "-" 

上面的第一行显示了 PayPal 在交易后进行的原始调用。 Seconds line 来自 PayPal 的 IPN 模拟器的测试调用,这次不是处理 IPN 的 script/function,而是直接到正常的 index.php,每个人都应该可以访问。两次都返回 403。

有人知道为什么 PayPal 收到这个 403 而不是 200 状态码吗?到目前为止,我听说可能是我的托管商(和许多其他网络托管公司)在没有用户代理字符串的情况下阻止了请求,而 PayPal(根据他们的说法)正在这样做。

据我所知,我这边的 IPN 侦听器现在也在 curl 请求中向 PayPal 提交了一个用户代理字符串,但仍然看不到任何变化。

我还在我的 wordpress 文件夹根目录中的 .htaccess 文件的开头添加了以下行:

Allow from .paypal.com
Allow from api.paypal.com
Allow from api-3t.paypal.com
Allow from api-aa.paypal.com
Allow from api-aa-3t.paypal.com
Allow from api-s.paypal.com
Allow from api-m.paypal.com
Allow from svcs.paypal.com
Allow from notify.paypal.com
Allow from reports.paypal.com
Allow from ipnpb.paypal.com
Allow from www.paypal.com
Allow from mobile.paypal.com
Allow from m.paypal.com
Allow from www.paypalobjects.com
Allow from pointofsale.paypal.com

但这也没有任何改变。我的主持人不是很有帮助,他只是说 "make sure to send a user agent string..."。

有什么想法吗?

IPN 以 _an 入站 post 从 PayPal 到您 ,而不是 post 从您到他们(尽管在收到 PayPal 的 post 然后你 post 给他们验证)。这是您的托管服务提供商报告他们阻止的入站 post。

您无法更改 PayPal 的制作方式 post;这是 PayPal 的代码,不是您的。

并且您自己的 Web 服务器配置可能不是阻止 post 的原因;它可能是由托管服务提供商管理的上游系统(或者至少,这就是您所报告的 - 您是否与实际的托管服务提供商核实过这一点,而不是 "heard" 有时会发生?)

因此,如果您的托管公司的解释是阻止 PayPal 的 post,您唯一的选择是:

1) 与您的托管公司交谈并说服他们更改政策或破例不阻止 PayPal IPN posts,或

2) 在其他地方托管您的 IPN 脚本(使用不会阻止 PayPal 的 IPN 的托管服务提供商)