我试图在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的原始调用,该调用是在事务之后完成的。秒线是来自PayPal的IPN模拟器的测试调用,这次不是处理IPN的脚本/函数,而是直接到普通的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
但这也没有改变。我的主持人不是很有帮助,他只是说"确保发送用户代理字符串..."。
有什么想法吗?
答案 0 :(得分:1)
IPN以_an inbound post 从PayPal开始,而不是你发给他们的帖子(虽然收到PayPal后发帖,然后发帖给他们核实)。您的托管服务提供商报告他们阻止了此入站帖子。
您无法更改PayPal发布此帖子的方式;它是PayPal的代码,不是你的代码。
您自己的网络服务器配置可能不会阻止帖子;它可能是由托管服务提供商管理的上游系统(或者至少是您报告的内容 - 您是否已经与实际的托管服务提供商进行了验证,而不是&#34;听到了#34;有时会发生这种情况?)< / p>
因此,如果您的托管公司的解释阻止了PayPal的帖子,那么您唯一的选择就是:
1)与您的托管公司交谈并说服他们改变他们的政策或例外不阻止PayPal IPN帖子,或
2)在其他地方托管您的IPN脚本(托管服务提供商不会阻止PayPal的IPN)