仅在paypal交易成功后运行功能并重定向到我的页面

时间:2013-07-18 13:48:25

标签: php security paypal

我正在构建一个页面,其中包含一些我将通过paypal销售的商品。首先,我点击固定价格的通用按钮,点击后重定向到paypal页面,你的价值如下:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top" class="payPalBtn">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="test@gmail.com">
<input type="hidden" name="item_name" value="test">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/he_IL/IL/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

但这是危险的,因为客户可以改变金额值...而且它可能会产生一些问题。所以我选择使用他们的API - 这意味着,在服务器端发送一些价值,如价格,金额... ang回来token id。之后再次发送一些数据,最后付款转移,每件事都关闭。其中一个参数是:$ PayPalReturnURL,这是成功结果后的页面,用户重定向到。

现在,在我这样做并确认支付通行证后,我想启动一个私人程序来执行某些私人功能(每次我运行它都花了我钱),这应该只在付款通过后进行一次。我重定向的页面例如:payment.php,我只是启动我的功能。

问题是:我如何确定用户不会直接访问该PHP地址并自动启动此功能。我有什么选择保证这个函数只能在paypal重定向到我之后运行一次。

2 个答案:

答案 0 :(得分:1)

你让它变得复杂。以下是我进行paypal集成的方法。

单独使用输入价格在隐藏字段中发送交易否,如下所示。

<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="tx_id" value="1234">

在生成之前,此表单将插入一个数据库记录,其中事务状态为挂起,如下所示。

tx_id = 1234
amount = 10.00
tx_status = 0 // pending

当交易完成后,paypal将返回金额,您的tx_id和交易状态。使用SELECT查询,您可以检查返回的金额是否与数据库表中的金额相同。

SELECT amount FROM table_name WHERE tx_id = 1234

然后如果正确,则将tx_status更改为已付款。否则将其标记为欺诈。

答案 1 :(得分:0)

要保护您的按钮,您可以通过Payments Standard设置托管按钮,或者如果您熟悉使用网络服务,则可以集成Express Checkout API

至于自动订单后处理,您不希望在返回网址上执行此操作。即使您的PayPal帐户启用了自动退货功能,也无法保证页面会被点击。如果买方在重定向发生之前关闭浏览器,您的代码将永远不会运行,并且您的自动化将无法正常工作。

为了避免这种情况,并且为了防止人们直接访问您的返回网址,您可以使用Instant Payment Notification。无论用户是否将其返回到您的网站,每次付款都会触发此操作,您可以使用PayPal验证数据,以确保它实际来自他们,这样人们就不会试图偷偷摸摸地使用您的IPN脚本。