2010-05-16 3 views
0

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

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

Благодаря

+0

Это невозможно ответить, не зная, что делает функция get_headers(). – ThiefMaster

+0

Это не мое :) http://php.net/manual/en/function.get-headers.php – Tom

+0

Если вы используете fsockopen, вы должны обрабатывать весь HTTP-запрос самостоятельно, ваш код выше просто открывает сокет, нет http там .. таким образом, вызов get_headers не имеет никакого смысла вообще. Посмотрите пример №1 в документации fsockopen. Где вы застряли в cURL? – zedoo

ответ

2

get_headers Это ($ URL), не get_headers ($ FP). Если я не прочитаю его полностью неправильно (и есть какой-то другой режим, который я никогда не видел), вам нужно передать ему URL, который вы читаете, а не дескриптор сокета. Фактически, он, по-видимому, делает свое собственное ПОЛУЧЕНИЕ, поэтому это было бы бесполезно для вашей текущей задачи.

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

+0

Спасибо, это действительно полезно. – Tom

+0

Протестировано и работает: $ _POST следует заменить $ req (из готового кода PayPal, чтобы он содержал все необходимые параметры) + curl_close ($ fp); в конце. – Tom

Смежные вопросы