只有在贝宝交易成功并重定向到我的页面后才运行该功能


Run function only after paypal transaction success and redirected to my page

我正在构建一个页面,其中包含一些将通过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地址并自动启动这个函数。我有什么选项可以保证这个函数在贝宝重定向到我之后只运行一次。

您正在使它变得复杂。以下是我如何进行贝宝集成。

与输入价格单独发送交易号在一个隐藏字段如下。

<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

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

SELECT amount FROM table_name WHERE tx_id = 1234

然后,如果正确,请将tx_status更改为payed。否则就把它标记为欺诈。

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

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

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