我是一个实现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代码而不检查Response 200。
更有经验的人可以告诉我什么是检查这个的正确/简单方法吗?
由于
答案 0 :(得分: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的安装。你可以,所以使用它。