0

我是一个实现 PayPal IPN 侦听器的相对 PHP 新手,一切似乎都工作正常,除了我真的不知道如何检查响应代码。

我用 cURL 尝试了一些丑陋的东西,但它根本不起作用(我不理解 cURL)。

我已经尝试过从网上某处获取的这段代码:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$response_headers = get_headers($fp);
$response_code = (int)substr($response_headers[0], 9, 3);

...但它不起作用(返回 $response_code = 0)。

所以现在,我正在调试我的 IPN 代码,而不检查响应 200。

任何更有经验的人可以告诉我检查这个的正确/简单方法是什么?

谢谢

4

1 回答 1

2

它是 get_headers( $url ),而不是 get_headers($fp)。除非我完全错误地阅读它(并且还有一些我从未见过的其他模式),否则您需要将您正在阅读的 URL 传递给它,而不是套接字句柄。实际上,它显然做了自己的 GET,所以它对您当前的任务毫无用处。

fsockopen(...) 是一个较低级别的 (TCP/IP) 函数。它返回一个套接字句柄,而不是 CURL 句柄。这就是为什么您不能在其上使用 curl_getinfo(...) 的原因。你想要这样的东西...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($fp, CURLOPT_POST, true);
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($fp);

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);

除非我记得,您需要在帖子字段中添加“cmd=_notify-validate”。

不要使用 fsockopen(...)。是的,我知道,这就是 Paypal 示例代码的作用。但它意味着可以在任何地方运行,并且不能依赖安装 CURL。你可以,所以使用它。

于 2010-05-16T14:45:51.100 回答