2012-05-09 3 views
1

Я использую следующий код для PayPal IPN:PayPal IPN не получать проверено

<?php 

mysql_connect("localhost", "user", "password") or die(mysql_error()); 
mysql_select_db("PayPal") or die(mysql_error()); 

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
} 
// post back to PayPal system to validate 
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 

$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 

if (!$fp) { 
// HTTP ERROR 
} else { 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
if (strcmp ($res, "VERIFIED") == 0) { 

// PAYMENT VALIDATED & VERIFIED! 

} 

else if (strcmp ($res, "INVALID") == 0) { 

// PAYMENT INVALID & INVESTIGATE MANUALY! 

} 
} 
fclose ($fp); 
} 

    ?> 

После тестирования в разные стороны, я получаю все, чтобы работать кроме случаев, когда:

if (strcmp ($res, "VERIFIED") == 0) 

не работа

if (strcmp ($res, "VERIFIED") == 1) 

рАБОТЫ

Очевидно, что он не проверяется, поскольку я отправляю IPN из песочницы.

Что может отсутствовать?

+0

Если вы находитесь в режиме песочницы, используйте 'ssl: // www.sandbox.paypal.com' вместо' ssl: // www.paypal.com' в параметре hostname для 'fsockopen '. – Josh

ответ

3

Поскольку вы оба утверждаете, что strcmp($res, "VERIFIED") == 1 истинно, $ res - 1 символ «больше», чем строка VERIFIED. Я предполагаю, что $ res имеет символ \ n в конце или что-то еще, которое нужно удалить. Попробуйте сделать что-то вроде str_replace('\n', '', $res) перед вызовом строк с помощью strcmp. Но все же вслух. Если это не работает, сообщите мне.

Fyi, PayPal имеет пример кода онлайн для проверки IPN на PHP с использованием cURL. Ссылка: http://www.x.com/developers/paypal/documentation-tools/paypal-code-samples#instantpaymentnotification

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