php-Paypal IPN库存控制
作者:互联网
我一直在开发在线零售商店.
它是用php编写的,并使用paypal和IPN来处理付款.
我已经写了我自己的购物车.当用户想要结帐时,他们单击结帐按钮,该按钮具有包裹在按钮周围的标准购物车上传功能,并且用户被带到贝宝完成付款.然后,贝宝(Paypal)向我发送IPN通知我付款情况.
我的问题是,我应该在什么时候存储订单,什么时候应该减少库存水平?
我现在拥有的标准流程如下:
>用户将项目添加到购物车.
>如果现在物品已售罄或添加的数量超过了可用数量,则会更新购物车以反映此情况.
>但是,添加到购物车中的库存不会减少库存水平.
>用户单击结帐.
>将购物车加载到数据库中的订单记录中,库存水平降低.
>用户被带到贝宝完成付款.
>(a)用户完成付款.
(b)用户无法通过返回网站或去其他地方/关闭浏览器来完成付款.
>(可选)用户单击返回网站.
>用户看到一个“谢谢,订单完成”的完整页面.
>由于贝宝仍然会发送IPN,因此不会处理与订单表有关的任何内容.
>贝宝发送IPN
>用交易状态更新订单
如您所见,此过程存在一些问题.如果客户未完成付款就离开Paypal页面,我将有一个“悬空”订单,由于库存水平也降低了,因此其他客户将无法使用该库存!解决方案是每隔一段时间手动“清理”数据库.
备择方案?
>选项I)在收到“已完成交易” IPN之前,请勿将订单存储在数据库中,然后使用会话中存储的购物车信息来创建订单并降低库存水平.但是,会话可能会过期,并且贝宝付款可能需要几天的时间,具体取决于付款方式.
>选项II)按原样存储订单,但在收到完成的交易IPN之前不要降低库存水平.这仍然存在订单悬而未决的问题,但是清理时至少无需再添加任何库存,我只需要删除订单即可.但是,与此有关的另一个问题是,如果多个人在相似的时间下订单,因此他们的订单总的来说数量超过库存.当系统收到完整的IPNS,然后将库存量减少到负数时,这可能会很混乱!
我在互联网上到处都在寻找某种帮助,但是在任何地方都没有提及!每个人都只是跳过应该如何处理IPN.我只是不明白其他人怎么可能没有这个问题?
请帮忙!
解决方法:
您正在处理航空公司预订系统存在的相同问题.使用相同的解决方案,即
1.用户点击结帐时(重定向到贝宝时)
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
标签:orders,php,paypal,paypal-ipn 来源: https://codeday.me/bug/20191207/2087149.html