2013-05-15 4 views
0

У меня есть сценарий IPN PayPal, который я тестирую в песочнице. Я вставил функцию mail везде можно просто так, что я знаю, что происходит, и я всегда получаю «неверный ответ» от PayPal, даже при использовании инструмента IPN в The PayPal Developer Site ...PayPal IPN Sandbox Script

Вот мой сценарий, где * символ представляет цензуру конфиденциальной информации:

<?php 
mysql_connect('localhost', '************', '******************'); 
mysql_select_db('*************'); 
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
} 
$header .= "POST /cgi-bin/webscr HTTP/1.1\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.sandbox.paypal.com', 443, $errno, $errstr, 30); 
$item_name = $_POST['item_name']; 
$item_number = $_POST['item_number']; 
$payment_status = $_POST['payment_status']; 
$payment_amount = $_POST['mc_gross']; 
$payment_currency = $_POST['mc_currency']; 
$txn_id = $_POST['txn_id']; 
$receiver_email = $_POST['receiver_email']; 
$payer_email = $_POST['payer_email']; 
if (!$fp) { 
} else { 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
if (strcmp ($res, "VERIFIED") == 0) { 
if ($payment_status != 'Completed') { 
    mail('**********************', 'ERROR', 'PayPal IPN Error: Payment Status INVALID'); 
    exit(); 
} 
if ($reciever_email != '***********************') { 
    mail('***********************', 'ERROR', 'PayPal IPN Error: Reciever Email INVALID'); 
    exit(); 
} 
if ($payment_currency != 'USD') { 
    mail('***********************', 'ERROR', 'PayPal IPN Error: CURRENCY INVALID'); 
    exit(); 
} 
mail('***********************', 'PAYPAL TRANSACTION COMPLETE', 'PayPal Transaction Complete! $' . $payment_amount); 
} 
else if (strcmp ($res, "INVALID") == 0) { 
mail('***********************', 'ERROR', 'PayPal IPN Error: RESPONSE INVALID'); 
exit(); 
} 
} 
fclose ($fp); 
} 
?> 

Странная вещь, если я заменю ssl://www.sandbox.paypal.com с ssl://www.paypal.com, сценарий кажется работать нормально. Любая помощь здесь очень ценится!

+0

пожалуйста, не используйте функцию mysqli_ *, см. Это http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php/14110189#14110189 –

ответ

0

Вы захватили POST, который вы получаете, и захватили то, что вы отправляете обратно, и сравнили эти два, чтобы убедиться, что они отправлены правильно и точно так, как есть. Также рассмотрите шаги по устранению неполадок IPN, опубликованные here. Они также могут помочь решить проблему.

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