【问题标题】:Paypal IPN Inventory ControlPaypal IPN 库存控制
【发布时间】:2011-11-29 04:44:57
【问题描述】:

我一直在开发一家在线零售店。

它是用 php 编写的,使用 paypal 和 IPN 来处理付款。

我已经编写了自己的购物车。当用户想要结账时,他们点击结账按钮,该按钮具有标准的购物车上传功能,用户被带到贝宝完成付款。然后 Paypal 会向我发送一个 IPN 通知我付款。

我的问题是,我应该在什么时候存储订单以及什么时候应该减少库存水平?

我现在的标准流程如下:

  1. 用户将商品添加到购物车。

    • 如果商品现已售罄或添加的数量超过可用数量,则会更新购物车以反映这一点。
    • 但是,添加到购物车的库存不会降低库存水平。
  2. 用户点击结帐。

    • 购物车已加载到数据库中的订单记录中,并且库存水平降低。
    • 用户被带到贝宝完成付款。
  3. (a) 用户完成支付。

    (b) 用户没有通过返回网站或去其他地方/关闭浏览器来完成付款。

  4. (可选)用户点击返回网站。

    • 用户看到“谢谢,订单完成”完整页面。
    • 没有任何与订单表相关的处理,因为 paypal 无论如何都会发送 IPN。
  5. Paypal 发送 IPN
    • 使用交易状态更新订单

如您所见,此过程存在一些问题。如果客户在没有完成付款的情况下离开贝宝页面,我将有一个“悬空”订单,并且由于库存水平也降低了,其他客户将无法使用该库存!解决此问题的方法是每隔一段时间手动“清理”数据库。

替代方案?

  • 选项 I) 在收到“已完成交易”IPN 之前不要将订单存储在数据库中,然后使用会话中存储的购物车信息来创建订单并降低库存水平。但是,会话可能会过期,并且 paypal 付款可能需要几天时间,具体取决于付款情况。

  • 选项 II) 按原样存储订单,但在收到完成的交易 IPN 之前不要降低库存水平。这仍然存在悬空订单的问题,但至少在清理时无需重新添加库存,我只需删除订单即可。但是,另一个问题是,如果多人在相似的时间订购,因此他们的订单集体包含超过库存的数量。当系统收到完整的 IPNS 然后将库存水平降至负数时,这可能会非常混乱!

我在互联网上到处寻找某种帮助,但没有任何地方提及!每个人都只是跳到应该如何处理 IPN。我只是不明白其他人怎么可能没有这个问题?!

请帮忙!

【问题讨论】:

  • 我也真的需要帮助!我只需要在缺货时手动删除购买该商品的选项。

标签: php paypal paypal-ipn orders


【解决方案1】:

您面临的问题与航空公司预订系统多年来一直存在的问题相同。使用相同的解决方案,即

1.当用户点击结帐时(同时被重定向到 Paypal)

reduce inventory count
place a timestamp in the database along with a state that this order is temporary

2a。一旦您收到 IPN,即知道计费已成功

change state of the order to permanent

2b。有一个每隔几分钟运行一次的 cron 作业来跟踪临时订单。如果临时订单的时间超过您允许的时间,例如 20 分钟,那么:

remove the temporary order from database
undo the change in inventory count

【讨论】:

    【解决方案2】:

    作为商家和开发商,我更喜欢使用 IPN 调整库存,即使该 IPN 处于待处理状态(例如电子支票)。 2 位客户在您最后剩余库存的情况下同时结账的机会通常很低。如果您确实有足够高的数量和低库存水平(您为什么要这样做?)那么您可能想要在购物车中做一些事情以在会话超时期间锁定项目。 p>

    如果订单被取消或退回,请确保您的订单处理代码将库存退回库存。

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 2021-03-05
      • 2016-07-19
      • 2012-04-10
      • 2012-01-23
      • 1970-01-01
      • 2011-06-30
      • 2014-05-18
      • 2013-01-01
      相关资源
      最近更新 更多