【问题标题】:How to validate PayPal return data?如何验证 PayPal 退货数据?
【发布时间】:2013-01-05 06:59:45
【问题描述】:

我正在集成贝宝,并且做得正确。我已经设置了返回 URL,所以它在 url $_GET 中给出了下面的结果集。

Array ( [tx] => 7XV08083GT683520Y [st] => Completed [amt] => 22.16 [cc] => USD [cm] => [item_number] => item_number )

我担心的是无法验证从 Paypal 返回的数据。我体验过其他支付网关。其他支付网关允许您执行hashMatch,这可以确保表单提交的数据未被编辑。

我的表格如下。

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" value="dasun_1358759028_biz@archmage.lk" name="business">
<!-- Specify a Buy Now button. -->
<input type="hidden" value="_xclick" name="cmd">
<!-- Specify details about the item that buyers will purchase. -->
<input type="hidden" value="AM Test Item" name="item_name">
<input type="hidden" value="22.16" name="amount">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" value="item_number" name="item_number">
<!-- Display the payment button. -->
<input type="image" name="submit" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif" alt="PayPal - The safer, easier way to pay online">
<img alt="" border="0" width="1" height="1" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" >
</form> 

我的php代码输出

 <input type="hidden" value="50.16" name="amount">

但我使用了萤火虫并将其编辑到下面并付款。

<input type="hidden" value="22.16" name="amount">

我仍然得到结果,因为它是Completed 付款,但它不应该是因为我手动进行了更改。任何有知识的人都可以编辑它们。我如何确保这是一笔有效的付款?如何确保不会像我一样编辑表单数据?

【问题讨论】:

    标签: php validation paypal payment-gateway paypal-sandbox


    【解决方案1】:

    你可以试试这些:

    1) 在 PayPal 网站上创建一个加密按钮

    2) 使用加密网站支付 (EWP) 动态加密按钮

    可在:http://www.paypalobjects.com/en_US/ebook/PP_WebsitePaymentsStandard_IntegrationGuide/encryptedwebpayments.html

    此外,此 SO 链接有一些详细信息: Dynamic PayPal button generation - isn't it very insecure?

    【讨论】:

      【解决方案2】:

      如果您想通知您是否从贝宝退回,那么您应该使用贝宝 API 而不是“立即购买”按钮 API 提供更多的灵活性和权力来控制您的支付流程

      【讨论】:

        【解决方案3】:

        对于必须验证的数据,任何重要且需要 DB 交互的内容都应使用 Paypals IPN。本质上,Paypal 将在您的网站上发布带有数据的 URL,而您的脚本必须将确切的数据发布回来,并加上一个命令来验证数据是否确实正确。在 Paypal 给出“已验证”响应后,您将更新您的数据。

        另一种选择是使用 Paypal 的快速结帐,本质上你得到一个“ok”来向客户收取“x”金额,一旦客户同意支付金额,你将数据发布到 Paypal 与客户的“协议”无论交易是否完成,您都会收到回复。

        https://www.paypal.com/ipn

        https://www.x.com/developers/paypal/documentation-tools/express-checkout/integration-guide/ECGettingStarted

        【讨论】:

          【解决方案4】:

          在重定向到 paypal 之前将您的数据存储在数据库中(product_id、金额、数量等)

          从payapl返回后,用你的数据库检查返回值。

          这是正确的做法。

          【讨论】:

          • 非常感谢。我想知道是否有其他支付网关一样的另一种方式。类似于 hashMatch
          • 我认为您可以将一些自定义值发送到贝宝,贝宝也会返回这些值,因此您也可以在这些值之间进行比较,但您仍然需要存储这些值,有些是在您的页面中(会话或数据库)。
          • 这不是我要找的。无论如何,非常感谢
          猜你喜欢
          • 2012-12-08
          • 2014-06-29
          • 2012-04-12
          • 2017-10-17
          • 2012-01-29
          • 2015-06-07
          • 1970-01-01
          • 2014-11-28
          相关资源
          最近更新 更多