paypal ipn开发人员脚本要长吗?

时间:2013-07-31 22:19:18

标签: php paypal paypal-ipn

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

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

我理解了一切,结构非常好,我非常喜欢它,我看起来也非常安全,但我有一个关于这个问题的问题 -

    } 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’)”);

      }
    }
你怎么看待这个?

1 个答案:

答案 0 :(得分:0)

以上代码是:

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

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

通过后,我们可以看到其他内部有支票,还会检查付款(由PayPal考虑)是否确实有效:

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

IPN的想法就是这样,当用户关注html按钮代码时,它会将它们链接到paypal的网站上。

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

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

以下代码显示了有效内容:if (count($errors) > 0) { else与此相关联。

  

我该怎么办?在数据库中插入值?但这是在之前完成的?! :

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

付款已记录在数据库中,这会阻止replay attack

重播攻击

我认为您已使用$errors[] = "Transaction already processed";

回答了自己的问题

如果查看上面的代码,可以看到脚本在数据库中查询过去的事务。如果id匹配任何行,则认为它无效。所以不行。只要你有这些检查,就不可能进行重播攻击。