PayPal IPN 响应为空
Posted
技术标签:
【中文标题】PayPal IPN 响应为空【英文标题】:PayPal IPN response empty 【发布时间】:2017-02-14 11:03:42 【问题描述】:在过去的 5 个小时里,我一直在尝试调试此问题和/或在线查找答案,但一切都是徒劳的。我正在沙箱中进行测试,但在实时服务器上也存在同样的问题,这表明我的代码而不是沙箱有问题,但我无法弄清楚那是什么。我的代码基本上是直接从贝宝的例子here复制过来的。
// Step 2: POST IPN data back to PayPal to validate
$ch = curl_init();
$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
if( !($res = curl_exec($ch)) )
error_log("Got " . curl_error($ch) . " when processing IPN data");
mail($notifyemail,'CURL error on IPN',"Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit;
curl_close($ch);
(为简洁起见,我省略了此代码上方的所有内容,但请放心,在此之前的所有代码都经过测试和验证可以正常工作。我已经对$req
使用字符串和数组进行了测试)
在沙箱中测试时,它显示IPN was sent and the handshake was verified
(向我建议端口 443 已打开)。但是,$res 始终为空。更奇怪的是,在调试过程中,我添加了一个步骤,在该步骤中,我的代码在 curl_exec()
步骤之前和之后通过电子邮件向我发送了 curl_getinfo($ch)
的内容,在这两种情况下,除了 url 之外的所有内容也是空的 - 好像选项根本没有被添加到请求中。我对 curl 的经验不足,不知道这是否正常。
PayPal 谈到 IPN:
HTTP response code: 200
Delivery status: Sent
No. of retries: 0
IPN type: Transaction made
我尝试从 https://github.com/Quixotix/php-PayPal-IPN 交换库并改用它,但它记录了 cURL error: [7]
(无法连接),这对我来说没有任何意义,因为握手再次得到验证。我将$listener->getTextReport()
的内容通过电子邮件发送给自己,但它根本不包含任何错误信息。
尝试use_ssl
和use_curl
的各种组合,我的错误日志如下所示:
[05-Oct-2016 16:40:13 America/Toronto] cURL error: [7]
[05-Oct-2016 16:47:22 America/Toronto] PHP Warning: fsockopen(): unable to connect to ssl://www.sandbox.paypal.com:443 (Operation not permitted) in /home/[stuff]/public_html/[stuff]/ipnlistener.php on line 144
[05-Oct-2016 16:47:22 America/Toronto] fsockopen error: [1] Operation not permitted
[05-Oct-2016 16:50:39 America/Toronto] cURL error: [7]
[05-Oct-2016 16:51:55 America/Toronto] PHP Warning: fsockopen(): unable to connect to www.sandbox.paypal.com:80 (Operation not permitted) in /home/[stuff]/public_html/[stuff]/ipnlistener.php on line 144
[05-Oct-2016 16:51:55 America/Toronto] fsockopen error: [1] Operation not permitted
一定有什么我做错了或忽略了,但对于我的生活,我无法弄清楚那可能是什么。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:好吧,问题似乎在于网络主机没有将 www.sandbox.paypal.com 列入白名单。因此,给遇到此问题的其他人一个教训:与您的虚拟主机核实,确保一切就绪,让您可以做您需要做的事情。
旁注:既然我已经有了它的经验,我推荐我在一天结束时开始使用的 IPN 库。在测试环境和实际环境之间以及 cURL 和套接字之间快速切换的能力非常有用和有益,它使我在一天结束时的测试速度显着加快。
【讨论】:
以上是关于PayPal IPN 响应为空的主要内容,如果未能解决你的问题,请参考以下文章