Php 贝宝IPN库存控制

Php 贝宝IPN库存控制,php,paypal,paypal-ipn,orders,Php,Paypal,Paypal Ipn,Orders,我一直在开发一个在线零售商店 它是用php编写的,使用paypal和IPN来处理付款 我已经写了我自己的购物车。当用户想要结帐时,他们点击结帐按钮,该按钮具有标准购物车上传功能,用户被带到paypal完成付款。贝宝然后给我发送一个IPN通知我付款 我的问题是,我应该在什么时候存储订单,什么时候应该降低库存水平 我现在掌握的标准流程如下: 用户将项目添加到购物车 如果商品现已售罄或添加的数量超过可用数量,则会更新购物车以反映这一点 但是,添加到购物车的库存不会降低库存水平 用户点击结帐 购物

我一直在开发一个在线零售商店

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

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

我的问题是,我应该在什么时候存储订单,什么时候应该降低库存水平

我现在掌握的标准流程如下:

  • 用户将项目添加到购物车

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

    • 购物车被加载到数据库中的订单记录中,库存水平降低
    • 用户被带到paypal完成付款
  • (a) 用户完成付款

    (b) 用户无法通过返回网站或转到其他地方/关闭浏览器来完成付款

  • (可选)用户单击返回网站

    • 用户看到“谢谢,订单完成”完整页面
    • 由于paypal仍将发送IPN,因此未处理与订单表相关的任何内容。
  • 贝宝发送IPN
    • 使用交易状态更新订单
  • 正如您可能看到的,这个过程存在一些问题。如果客户未完成付款就离开paypal页面,我将收到一份“悬空”订单,由于库存水平也降低,其他客户将无法获得该库存!解决此问题的一个方法是每隔一段时间手动“清理”数据库

    替代品

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

    • 选项II)按现在的状态存储订单,但在收到完整的交易IPN之前,不要降低库存水平。这仍然有悬而未决的订单问题,但至少在清理时不需要再次添加库存,我只需要删除订单。然而,另一个问题是,如果多人在相似的时间订购,那么他们的订单总量超过了库存。当系统接收到完整的IPN,然后将库存水平降至负值时,这可能会非常混乱

    我在互联网上到处寻找帮助,但没有在任何地方提到!每个人都跳过了IPN应该如何处理的问题。我只是不明白为什么其他人不会有这个问题


    请帮忙

    作为一个商人和一个开发者,我更喜欢用IPN调整库存,即使那个IPN是待定的(例如eCheck)。两名顾客同时结帐并持有你最后一批剩余存货的几率通常很低。如果您确实有足够高的容量和较低的库存水平(为什么会这样?),那么您可能希望在购物车中执行一些操作,在会话超时期间锁定项目


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

    您处理的问题与航空公司预订系统多年来遇到的问题相同。使用相同的解决方案

    1.在用户单击“签出”时(重定向到Paypal时)

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

    change state of the order to permanent
    
    2b。有一个每隔几分钟运行一次的cron作业来跟踪临时订单。如果临时订单的时间超过您允许的时间(如20分钟),则:

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

    我也真的需要帮助!我只是必须手动删除选项,以购买该项目时,它是脱销。
    remove the temporary order from database
    undo the change in inventory count