使用非托管 PayPal 按钮时如何使用 IPN 验证 PayPal 数据

Posted

技术标签:

【中文标题】使用非托管 PayPal 按钮时如何使用 IPN 验证 PayPal 数据【英文标题】:How to validate PayPal data with IPN when using non-hosted PayPal button 【发布时间】:2017-02-25 04:13:30 【问题描述】:

我对 php 和添加支付网关比较陌生

但是,我想学习并在一家小商店尝试一下,该商店有一个 Paypal 立即购买按钮,该按钮链接到 PHP cookie 购物车

它工作正常并显示购物车中的物品列表,但我担心它不够安全,有人可能会更改金额或添加他们的电子邮件地址以便他们收到资金

我想集成即时支付通知(IPN):https://www.paypal.com/uk/cgi-bin/webscr?cmd=p/acc/ipn-info-outside

除了按照上述说明在商家帐户中创建 IPN 之外,我还需要做更多的事情吗?

我对 POST 代码的含义以及如何将其集成到我的按钮代码中感到有些困惑

请有人解释一下我需要在下面的 Paypal 按钮代码中进行哪些更改,以确保支付系统的安全?我一直在打破它

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1">
<!--input type="hidden" name="item_name_1" value="Something Cool">
<input type="hidden" name="quantity_1" value="5">
<input type="hidden" name="amount_1" value="1"-->
<?php
$i = 0;
foreach (json_decode($_COOKIE['cart_items_cookie']) as $key => $value) 
    $i++;
    echo '<input type="hidden" name="item_name_'.$i.'" value="'.$value->name.'">';
    echo '<input type="hidden" name="amount_'.$i.'" value="'.$value->price.'">';
 
?>
<input type="hidden" name="upload" value="1">
<input type="hidden" name="business" value="me@mysite.com">
<input type="hidden" name="item_name" value="Order#21874">
<input type="hidden" name="currency_code" value="GBP">
<!--<input type="hidden" name="amount" value="<?php //echo $_GET['total'];?    > "> -->
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" >
<img  border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif"  >
</form>

非常感谢任何帮助或指出正确方向!

【问题讨论】:

【参考方案1】:

最好的办法是使用Express Checkout API 而不是付款标准(html 表单)。这需要更多的编程和使用 API 调用,但是,我有一个PayPal PHP class library,您可以使用它来使所有调用变得非常快速和轻松。

Express Checkout 完全隐藏了有关付款的所有信息,而且它提供的功能比 Standard 多得多。

如果您想坚持使用标准,您可以通过在您的 PayPal 帐户中创建按钮来构建托管按钮,并确保选择“将按钮保存在 PayPal”选项。这就是它被托管的原因。

然后,您仍然可以将 HTML 粘贴到您希望显示付款按钮的网站中,但它只有几行,其中一行将显示“hosted_button_id”。

这可以防止按钮像您提到的那样被篡改,但通常会限制您可以对结帐进行的自定义。

【讨论】:

嘿,感谢您的帮助,很抱歉回复晚了。在我问了这个问题之后,我实际上意识到我应该使用结帐 API,现在正在努力,谢谢你的链接,我会看看,你认为我能用有限的 PHP 知识做到这一点吗?我想说的是基本水平。我有很多 html 和 css 知识,但我只是在学习大多数东西。我使用的是非托管的,我可以将按钮链接到我的购物车,就像你说的那样定制是有限的

以上是关于使用非托管 PayPal 按钮时如何使用 IPN 验证 PayPal 数据的主要内容,如果未能解决你的问题,请参考以下文章

Paypal:托管按钮付款失败,代码=AMOUNT_ERROR

Paypal 动态按钮和 IPN 链接

如何在不使用“立即购买”按钮的情况下为自定义购物车集成 Paypal IPN

如何传递 Paypal ipn 自定义和发票变量?

Paypal 支付按钮和 IPN:如何唯一地链接用户?

Paypal Smart Buttons V2 和 IPN - 如何将智能按钮中的字段与 IPN 匹配