PayPal IPN txn_check затем обработать платеж - PullRequest
0 голосов
/ 04 февраля 2012

Пару дней назад я задал вопрос о чеке PayPal IPN txn_id и получил информативный ответ.Для тех, кто хочет узнать, какова роль txn_id, можно проверить, не была ли ранее обработана транзакция.Итак, теперь мой вопрос: после проверки и проверки того, что он не существует, вы сохраняете его (txn_id) в базе данных, а затем обрабатываете платеж, но как PayPal узнает, что платеж в порядке, и вы нашли 0строки с txn_id?

<?php
// PHP 4.1

// 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);

// assign posted variables to local variables
$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) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Хм, не знаете, что вы имеете в виду, но PayPal вроде как отправляет вам эту информацию для начала?Они сообщают вам, прошел платеж или нет, и, следовательно, знают об этом, очевидно.Они просто сообщают вам, чтобы вы могли делать все, что вы хотите сделать с этой информацией.

1 голос
/ 04 февраля 2012

Они отправляют вам эту информацию, чтобы вы могли передавать их обратно и проверять, является ли эта информация реальной, а не просто кем-то, кто отправляет дерьмовую информацию на ваш сервер.txn_id является абсолютно уникальным идентификатором «номер» для этой транзакции в PayPal, поэтому вы должны видеть его только один раз (теоретически).Это служит двум целям:

  1. Позволяет проверить с помощью PayPal, отправив обратно всю информацию.Существует только одна транзакция с этим идентификатором, поэтому каждый фрагмент информации, который вы отправляете обратно, должен соответствовать тому, что находится в файле для этой транзакции.Затем они отправляют Yay или Nay о том, было ли это действительно.Если это Nay, вы знаете, что это фальшивая информация.

  2. Позволяет вам определить, была ли транзакция уже обработана вами, и не позволяет пользователям многократно отправлять дублирующую информацию на ваш сервер.Да, транзакция действительна, но вы не хотите, чтобы они получали 10 товаров, когда они платили только за один.

0 голосов
/ 05 февраля 2012

IPN (мгновенное уведомление о платеже) не имеет ничего общего с обработкой платежей. IPN вступает в игру только после совершения транзакции. Идентификатор транзакции - это идентификатор транзакции, которая произошла.

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

...