【问题标题】:Run function only after paypal transaction success and redirected to my page仅在贝宝交易成功并重定向到我的页面后才运行功能
【发布时间】:2013-07-17 12:17:03
【问题描述】:

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

【问题讨论】:

    标签: php security paypal


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

    【讨论】:

    • 你说对了@Dasun,但我选择使用那里的 API,因为客户端基本上可以更改 tx_if 和 amount,并使用这些值...
    • tx_id 由您生成,仅供参考。
    • 如果用户更改它,您的验证将失败。所以没有问题
    • 您有网站示例吗?我想仔细检查一下
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 2018-11-24
      • 2016-04-22
      • 2016-02-19
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      相关资源
      最近更新 更多