在电子商务系统中涉及到的支付的问题,由于支付操作不能在事务中,怎么保证原子性?

理由
举报 取消

在电子商务系统中涉及到的支付的问题,由于支付操作不能在事务中,怎么保证原子性?最近做了一个项目涉及到了支付和库存。在支付成功后,库存减少。但是由于支付是调用第三方(微信)服务,并不受事务控制。假如我在输入密码的过程中,库存的最后一件已经被买走了。那我支付成功后反而无货了。如果我在发起支付的时候就锁住一定数量的库存,但是在我还没输入完密码时手机故障。那这些库存就永远被锁住而不能销售了。大家在做电子商务的时候一定也遇到这样的问题。怎么解决呢?大家除了了定时释放被锁定库存的策略外,没有别的做法么?(其实定时释放库存这种方法有个弊端,就是我长时间停留在支付窗口,这时候后台却释放了库存,而发生不希望看到哦的异常,解决方法就是释放库存的同时调用支付服务的关单接口。)

2017年10月7日 9 条回复 1188 次浏览

回复 ( 9 )

  1. 李拉东
    理由
    举报 取消

    只能是这个办法,在本地数据库中通过锁库实现事务的强一致,通过超时机制(可以给用户倒计时时钟提示)来完成支付事务。

    这里的问题看起个技术问题,其实是个业务设计的问题,一些业务变通一下,技术的难度就会大大降低。

  2. 用户头像
    理由
    举报 取消

    目前没有强一致性的解决方案,都是把下单和支付分开来做,因为用户支付时间是不可控的,只能给足一定的时间,没有支付再释放库存

  3. 王鸿飞
    理由
    举报 取消

    用户下单以后,商品库存就减少1,用户支付以后再发货。如果用户不支付,30分钟后释放库存,此订单关闭。这样就不存在事务不事务的问题了。

    第三方支付服务应该都支持订单过期时间的

  4. 杨森
    理由
    举报 取消

    锁定库存,限时支付,超时释放

  5. 杨杰
    理由
    举报 取消

    这和12306的卖票场景基本一样,当订单生成的时候要锁定一张票,超时未支付再把这张票释放出来,这是最make sense的解决方案了。我记得支付宝是支持商户自定义交易有限时间的,1分钟到15天都可以,微信不知道是否也支持,如果支持就不用商户自己处理订单失效的问题了。

  6. 李峰
    理由
    举报 取消

    谢邀

    把逻辑理清了很简单,分两步:

    1. 当用户下单时(或加入购物车),会事先锁定库存。锁库存的时间由产品经理来制定。支付完成减掉库存。

    2. 写个定时跑的程序,如果限定时间内没有完成支付,就释放掉该库存。再支付时则需要重新下单。

  7. jie sun
    理由
    举报 取消

    分情况:1. 无限库存的(就是 可以 随时补货),锁定库存的时间长点。 2. 不能及时补货的。限制付款时间,锁定库存。

    总结:锁定库存的时间长短不同。

  8. 云游四海
    理由
    举报 取消

    定时程序check订单是否超时,超时释放库存

我来回答

Captcha 点击图片更换验证码