【问题标题】:PHP: How to check for response code?PHP:如何检查响应代码?
【发布时间】:2010-05-16 13:56:51
【问题描述】:

我是一个实现 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。

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

谢谢

【问题讨论】:

  • 如果不知道你的 get_headers() 函数是做什么的,这是不可能回答的。
  • 如果你使用 fsockopen,你必须自己处理整个 http 请求,你上面的代码只是打开一个套接字,那里没有 http.. 因此,对 get_headers 的调用没有任何意义全部。查看 fsockopen 文档中的示例 #1。你在哪里被 cURL 卡住了?
  • @zedoo:我明白了,谢谢...使用 cURL,我知道我可以使用 CURLINFO_HTTP_CODE 获取代码,但我不太明白要初始化什么/从中传递什么贝宝请求。当然,响应代码必须与该特定请求相关,而不是新请求...我已经尝试以各种方式在其中使用该 $fp ,但我只是做得不对。
  • zedoo 的意思是你打开了一个socket,但是你还没有真正发出请求,这当然意味着你不会收到响应头。 =) 你可能会在这里找到一些信息:scriptol.com/how-to/http-status-code-in-php.php

标签: php paypal header response paypal-ipn


【解决方案1】:

它是 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。你可以,所以使用它。

【讨论】:

  • 经过测试且有效:$_POST 应替换为 $req(来自准备好的 PayPal 代码,因此它包含所有需要的参数),+ curl_close($fp);最后。
猜你喜欢
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2018-04-26
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多