-2

嘿,我想问你一个特定的脚本,这里是:

http://www.phpbuilder.com/articles/application-architecture/shopping-carts/setting-up-paypal-ipn-in-php.html

我明白了一切,它的结构非常好,我真的很喜欢它,我看起来也很安全,但我对这个 else-part 有一个问题:

    } else {

        // PayPal payment is valid
        // Process order here

    }

我必须在这里做什么?在数据库中插入值??但这是以前做过的吗?!:

    } else {
        // Transaction not processed, store it in the database
        $payer_email  = mysql_real_escape_string($_POST[‘payer_email’]);
        $gross = mysql_real_escape_string($_POST[‘mc_gross’]);

问候 !

编辑:好的,我也可以用这个来防止重放攻击吗?:

    if($f[‘count’] > 0) {
        $errors[] = “Transaction already processed”;

    } else {
      if (count($errors) > 0)  {

        // IPN data is incorrect - possible fraud
        // It is a good practice to send the transaction details to your e-mail and investigate manually

        $message = "IPN failed fraud checks";
        mail(‘youremail@example.com’, 'IPN Fraud Warning', $message, $headers);
      } else {

        // Transaction not processed, store it in the database
        $payer_email  = mysql_real_escape_string($_POST[‘payer_email’]);
        $gross = mysql_real_escape_string($_POST[‘mc_gross’]);

        $insert = mysql_query(“INSERT INTO transactions (txt_id, payer_email, mc_gross) VALUES 
        (‘$txt_id’,’$payer_email’,’$mc_gross’)”);

      }
    }

你觉得这怎么样?

4

1 回答 1

0

上面有问题的代码是:

if (!$fp) {
// HTTP ERROR
} else {

您必须将所有内容都放在 else 中,因为如果$fp为 false,则表示无法建立与 Paypal 的 IPN 验证系统的连接。

接下来,我们可以看到 else 中有检查,它还检查付款(由 paypal 考虑)是否实际有效:

if (strcmp ($res, "VERIFIED") == 0) {
// PAYMENT VALID
}

IPN 的想法是这样的,当用户点击一个 html 按钮代码时,它会将他们链​​接到他们支付的 paypal 网站。

通常有一个隐藏值(或者如果您使用的是托管按钮,它会保存在贝宝的网站上),贝宝会回复说付款已通过。

确保客户端和服务器安全的下一步是仔细检查ping是否来自 Paypal。因此,您获得了事先下载的 SSL 证书,并在 https 上连接到 Paypal 进行检查。

下面的代码显示了什么也是有效if (count($errors) > 0) {的:else链接到这个。

我必须在这里做什么?在数据库中插入值??但这是以前做过的吗?!:

您处理信息。例如,如果用户为您的网站购买会员资格,您将在数据库中将他们的用户设置为升级状态。

付款已经记录在数据库中,这可以防止重放攻击

重放攻击

我想你已经回答了你自己的问题$errors[] = "Transaction already processed";

如果您查看上面的代码,您可以看到该脚本查询数据库以获取过去的交易。如果 id 匹配任何行,则它被视为无效。所以不行。只要您进行了这些检查,就不可能进行重放攻击。

于 2013-07-31T22:22:46.847 回答