0

我正在建立一个页面,其中包含一些我要出售的物品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 - 这意味着,在服务器端发送一些值,如价格、金额......以及返回token id。之后再次发送一些数据,最后付款被转移,一切都结束了。其中一个参数是: $ PayPalReturnURL,这是成功后的页面,用户重定向到。

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

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

4

2 回答 2

1

你让它变得复杂。这是我进行贝宝集成的方式。

与输入价格一起在隐藏字段中发送交易编号,如下所示。

<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 更改为已付款。否则将其标记为欺诈。

于 2013-07-18T13:58:23.950 回答
0

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

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

为避免这种情况,并防止人们直接访问您的返回 URL,您可以使用即时付款通知。这将在每次付款时触发,无论用户是否返回您的网站,您可以使用 PayPal 验证数据以确保它确实来自他们,这样人们就不会试图偷偷摸摸使用您的 IPN 脚本。

于 2013-07-19T08:52:35.790 回答