如何验证PayPal返回数据?

时间:2013-01-22 05:07:11

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

我正在整合paypal,我已经正确完成了。我已经设置了返回网址,因此它会在网址$_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">

但是我使用了firebug并将其编辑到下面&amp;做了付款。

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

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

4 个答案:

答案 0 :(得分:1)

任何关键且需要数据库交互的事情都应该使用Paypals IPN来获取必须验证的数据。基本上,Paypal会在您的网站上发布带有数据的URL,您的脚本必须发回确切的数据以及验证数据确实正确的命令。在Paypal提供“已验证”回复后,您就会更新数据。

另一个替代方案是使用Paypal的快速​​结账,基本上您收到“确定”以向客户收取“x”金额,一旦客户同意支付金额,您将数据发布到Paypal与客户“协议”如果交易完成,您将收到回复。

https://www.paypal.com/ipn

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

答案 1 :(得分:0)

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

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

这是正确的做法。

答案 2 :(得分:0)

如果您想通知您是否从PayPal返回,而不是使用Paypal API而不是“立即购买”按钮API提供更多灵活性和权力来控制您的付款流程

答案 3 :(得分:0)

您可以尝试其中一些:

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?