我在最近5个小时内一直试图调试此问题和/或在线查找答案,一切都是徒劳的。我在沙箱中进行测试,但是在实时服务器上存在同样的问题,这表明我的代码而不是沙箱有问题,但我无法弄清楚那是什么东西。我的代码基本上是直接从PayPal示例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_getinfo($ch)
步骤之前和之后向我发送了curl_exec()
的内容,在这两种情况下,除了url之外的所有内容都是空的 - 好像选项根本没有被添加到请求中。我没有足够的经验来了解这是否正常。
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
我必须有一些错误或忽视的东西,但对于我的生活,我无法弄清楚那可能是什么。任何帮助都会非常感激。
答案 0 :(得分:0)
好吧,似乎问题是webhost没有列入www.sandbox.paypal.com白名单。因此,向遇到此问题的其他人提供一个教训:请与您的虚拟主机核实,确保所有内容都已到位,以便让您执行所需操作。
旁注:现在我有使用它的经验,我推荐我在一天结束时开始使用的IPN库。能够在测试环境和实时环境之间以及cURL和套接字之间快速切换,这是非常有用和有益的,并且它使测试在我的一天结束时显着加快。