Я настроил Paypal уведомления счетов URL для перехода к этому сценарию:Paypal IPN отказ
// Read the notification from PayPal which comes in the form of a POST array and create the acknowledgement response
$req = 'cmd=_notify-validate'; // add 'cmd' to beginning of the acknowledgement you send back to PayPal
foreach ($_POST as $key => $value)
{ // Loop through the notification NV pairs
$value = urlencode(stripslashes($value)); // Encode the values
$req .= "&$key=$value"; // Add the NV pairs to the acknowledgement
}
// Assign the paypal payment notification values to local variables
if($_POST){
$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'];}
//Set up the acknowledgement request headers (this is the updated version for http 1.1)
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.paypal.com\r\n";
$header .= "Connection: close\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
//Open a socket for the acknowledgement request
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
if(!$fp){
echo "HTTP ERROR";
}
else
{//start 1
// Post request back to PayPal for validation
fputs ($fp, $header . $req);
//once paypal receives the acknowledgement response, another message will be send containing the single word VERIFIED or INVALID
while (!feof($fp))
{ //start 2, while not EndOfFile
$res = fgets ($fp, 1024); // Get the acknowledgement response
$res = trim($res);
if (strcmp ($res, "VERIFIED") == 0)
{// start 3, Response is OK
if ($payment_status == "Completed")
{//start 4
//send email announcing success
$from = "Rupert Heath Literary Agency";
$to = $payer_email;
$subject = "Ebook";
$body = "It works";
mail($to, $subject, $body, $from);
}//end 4
}//end 3
else if(strcmp ($res, "INVALID") == 0)
{//start 5
//send email announcing failure
//$error_log .= 'Line 57'
$from = "Guide Test Page";
$to = $payer_email;
$subject = "INVALID IPN";
$body = "Doesn't work";
mail($to, $subject, $body, $from);
}//end 5
} //end 2
fclose ($fp); //close file pointer
} //end 1
который основан на ряде размещенных в Интернете примеров и обслуживает обновления до HTTP 1.1
Сценарий, как тест, отправляет либо сообщение об успехе, либо сообщение об отказе в зависимости от того, какой из ответов вы получили VERIFIED или INVALID от Paypal. Проблема в том, что я всегда получаю INVALID-адрес электронной почты и не могу понять, почему. Я просмотрел историю IPN Paypal, а код ответа HTTP - 200, который, похоже, указывает, что обмен IPN работал правильно, поэтому, возможно, Paypal отвечает VERIFIED, но у моего скрипта есть ошибка.
Подробности История IPN являются:
Моментальная оплата Уведомление (IPN) детали
сообщение ID69025489S2598613V
Дата/время created18/07/2013 23:22 PDT
Оригинал/Resent Оригинал
Последняя дата поставки/время поставки 18/07/2013 23:22 PDT
Уведомление URL http://www.rupertheath.com/ipn/ipn_script
код ответа HTTP 200
Статус доставки Направлено
Количество повторных попыток 0
Сделка ID4D0877596N038120Y
IPN typeTransaction сделал
IPN Сообщение mc_gross = 0,01 & protection_eligibility = Приемлемые & address_status = подтвердил & payer_id = C3USV8A4Q2QDW & налог = 0,00 & address_street = Рэмси Дом 34 Fowlers Дорога & PAYMENT_DATE = 23: 22: 44 18 июля 2013 PDT & payment_status = Завершено & кодировок = Windows- 1252 & address_zip = SP1 2QU & first_name = Michael & mc_fee = 0,01 & address_country_code = GB & address_name = Майкл Хит & notify_version = 3,7 & пользовательские = & payer_status = проверено & [email protected] & address_country = Великобритания & address_city = Salisbury & количество = 1 & verify_sign = AhKyCHsfiy2frgZNNoQmGHQ3LhKMAboweJqZzYCdqp30Hb7b99tF.04a & [email protected] & txn_id = 4D0877596N038120Y & payment_type = мгновенная & last_name = Хит & address_state = Уилтшир & receiver_email = emailagency @ rupertheath.ком & payment_fee = & receiver_id = BRM2TYMP4ACZ8 & txn_type = web_accept & item_name = Ebook & mc_currency = GBP & ITEM_NUMBER = & residence_country = GB & handling_amount = 0,00 & transaction_subject = Ebook & payment_gross = & доставка = 0,00 & ipn_track_id = b0a3b4ae3c51c
Может ли кто-нибудь помочь мне отладить эту проблему?
Откуда у вас этот код подтверждения? –
Paypal имеет страницу истории IPN, и если вы нажмете на конкретное событие IPN, вы получите все эти данные. По имеющимся данным, Paypal думает, что все прошло хорошо, поэтому я подозрительно отношусь к моему сценарию, несмотря на то, что перестал это сто раз! – Perkin5