【问题标题】:PayPal IPN txn_check then process paymentPayPal IPN txn_check 然后处理付款
【发布时间】:2012-02-03 23:17:45
【问题描述】:

几天前,我问了一个关于 PayPal IPN txn_id check 的问题,我得到了一个信息丰富的回复。对于那些想了解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);
}
?>

【问题讨论】:

    标签: php paypal paypal-ipn


    【解决方案1】:

    嗯,不知道你的意思,但 PayPal 是那种一开始就向你发送这些信息的人?他们是告诉您付款是否已完成的人,因此显然知道这一点。他们只是让您知道,以便您可以对这些信息做任何想做的事情。

    【讨论】:

    • 哦,这是有道理的,我看着//处理付款感到困惑,并想我应该如何处理付款?现在我知道了,谢谢。
    【解决方案2】:

    他们会向您发送此信息,以便您可以将信息发回给他们并验证信息是否真实,而不仅仅是有人向您的服务器发布垃圾信息。 txn_id 是 PayPal 上该交易的一个完全唯一的 ID“编号”,因此您应该只看到一次(理论上)。这有两个目的:

    1. 允许您通过发回所有信息来验证 PayPal。此 ID 仅存在一个交易,因此您发送回给他们的每一条信息都应与该交易的文件相匹配。然后他们发送是否有效的“是”或“否”。如果是 Nay,你就知道这是假信息。

    2. 允许您确定交易是否已由您处理,并防止用户一遍又一遍地将重复信息发布到您的服务器。交易是有效的,是的,但您不希望他们在只支付一个产品的情况下获得 10 个产品。

    【讨论】:

    • 我的问题是,如何将所有信息发回贝宝?
    • 这就是您提供的代码的作用。它将所有发布到您的变量转储到一个字符串中,并将该信息发送回 PayPal 进行验证。如果您的服务器返回 VERIFIED 是准确的,INVALID 表示它不是。除此之外,您可以只运行您的 INSERT 命令,如果 MySQL 返回错误,则捕获它并对其进行处理,因为它很可能是“条目已存在具有唯一键 ---”的错误,这意味着它是重复的。
    【解决方案3】:

    IPN(即时付款通知)与付款处理无关。 IPN 仅在交易发生后才发挥作用。交易ID是已经发生的交易的ID。

    If you are trying to prevent duplicate payments, you should utilize PayPal's invoice ID and duplicate payment settings within your PayPal account's profile.

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2013-09-26
      • 2023-03-19
      • 2017-08-01
      • 2014-01-23
      • 2012-11-07
      • 2014-08-31
      • 2014-04-23
      • 2013-04-06
      相关资源
      最近更新 更多