PHP: Как проверить код ответа? - PullRequest
0 голосов
/ 16 мая 2010

Я относительный новичок в PHP, реализующий прослушиватель PayPal IPN, и все, кажется, работает нормально, за исключением того, что я не знаю, как проверить код ответа.

Я пробовал что-то уродливое с 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.

Может кто-нибудь более опытный посоветовать мне, как правильно / просто проверить это?

Спасибо

1 Ответ

2 голосов
/ 16 мая 2010

Это 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. Вы можете, так что используйте его.

...