支付宝商品剩余数量为1的问题(语言无关)

我最猪头 2013-05-27 01:48:11
这个问题在群里和群友讨论了一下,没什么结果,特意上来问问!
问题是关于一个商品剩余数量为1,但是存在一种可能,就是两个用户都购买了这个数量为1的商品,下面听我说一下步骤和环境

环境:
商品A 数量为1
人物1
人物2

步骤:
1:人物1把商品A放入购物车,然后使用支付宝付款,到了付款输入密码的时候,人物1接到了老朋友的电话,然后跟朋友扯蛋去了.
2:人物2打开游览器,看到商品A,然后购买了商品A,放入购物车,然后支付宝付款,然后输入密码,付款了,成功了!
3:人物1打完了电话,回来输入密码(注意:人物1电脑游览器没动,一直保持在付款界面),支付成功了.

问题:
商品A剩余数量就为1?但是却有2个用户购买了?

难点:
到了支付宝付款界面,是到了支付宝官方网址,所以我的程序无法嵌入,也无法在付款的时候判断...

之前讨论的方案
方案1:当人物1放入购物车的时候,我就把商品数量减1
问题所在:那人物1如果不付款,这个商品tmd就一直被减着1,蛋疼吧!

方案2:在方案1的基础上加上一个超时判断,如果超过这个时间,那么商品数量就加1
问题所在:比如假设超时时间为30分钟,人物1到了输入密码付款的界面,然后和老朋友打电话去了,时间过了大概40分钟左右,人物2看了商品A,数量为1,然后购买,付款了!过了50分钟,人物1打电话结束了,然后输入密码,也付款了......蛋疼了吧...又成功了.....

方案3:在付款之后,支付宝会异步通知,利用这个通知来进行判断
问题所在:都说是付款之后才会异步通知的,人物2已经付款了.人物1在人物2之后付款,支付宝界面说:恭喜您,已经支付成功,然后触发回调,我告诉人物1说:虽然你的支付宝钱到我账户上了,但是我剩余数量不够,我还是退您钱吧.亲!...我++,就像你去买一个东西,已经付款了,成功了,钱也已经到商家手里了!然后商家告诉你说,缺货,我还是退你钱吧......

说说你们的解决方案吧!
...全文
202 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 9 楼 chinmo 的回复:
问题所在:比如假设超时时间为30分钟,人物1到了输入密码付款的界面,然后和老朋友打电话去了,时间过了大概40分钟左右 不过,这个我记得支付宝超过你超时了,就支付不了的
结贴,你是正确的. 支付宝默认85秒超时时间,这样的话可以采用方案2! 感谢!
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
可行的方案很多,但不在你的讨论范围里。你不是说“语言无关”吗?
你随便举一个例子能实现就行! 你所说的超时判断,不是我能控制的..你明白吗?我已经在支付宝付款界面了,这个界面也不是我设计的.用的也不是我的代码,所以我根本无法判断如果超时,我就刷新之类的操作!
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
可行的方案很多,但不在你的讨论范围里。你不是说“语言无关”吗?
我的意思是说出步骤,方法,或者原理就可以了.. 我的意思是,我发在php板块,但是实际上这个问题和语言无关的.
xuzuning 2013-05-27
  • 打赏
  • 举报
回复
可行的方案很多,但不在你的讨论范围里。你不是说“语言无关”吗?
  • 打赏
  • 举报
回复
引用 11 楼 zouhao619 的回复:
[quote=引用 9 楼 chinmo 的回复:] 问题所在:比如假设超时时间为30分钟,人物1到了输入密码付款的界面,然后和老朋友打电话去了,时间过了大概40分钟左右 不过,这个我记得支付宝超过你超时了,就支付不了的
如果是这样的话,那的确可以采用方案2. 那么这个超时时间是多少呢?我网上没查到[/quote] 你可以设计长点 我记得好像是1个小时吧
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 9 楼 chinmo 的回复:
问题所在:比如假设超时时间为30分钟,人物1到了输入密码付款的界面,然后和老朋友打电话去了,时间过了大概40分钟左右 不过,这个我记得支付宝超过你超时了,就支付不了的
如果是这样的话,那的确可以采用方案2. 那么这个超时时间是多少呢?我网上没查到
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
你没注意到 超时后重入第一步 吧? 如果重入了,那么支付页面就被刷新了
你怎么做到支付页面被刷新?这个页面是支付宝官方的页面,不是我写的程序!
  • 打赏
  • 举报
回复
问题所在:比如假设超时时间为30分钟,人物1到了输入密码付款的界面,然后和老朋友打电话去了,时间过了大概40分钟左右 不过,这个我记得支付宝超过你超时了,就支付不了的
  • 打赏
  • 举报
回复
使用第三方的支付,没办法解决的 必须加声明,然后人工处理这些事
xuzuning 2013-05-27
  • 打赏
  • 举报
回复
你没注意到 超时后重入第一步 吧? 如果重入了,那么支付页面就被刷新了
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 3 楼 PhpNewnew 的回复:
支付前再做一个库存矫正就行了...
方案1,方案2都算是库存前进行矫正!结果都失败!
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
检查商品存量,并加行锁(阻止其他人的任何操作) 启动超时计数,调用支付系统(超时后重入第一步) 完成修改库存,解行锁 期间其他用户至多等待一个预设的超时时段
这不就是方案2吗? 我加了行锁,人物1到了支付界面,去打电话..人物2等过了这个超时在去预订,预订成功了.人物1打完电话回来,输入密码也成功了! 人物1可以再超时之后再付款,你付款的时候做不了判断,也无法判断是否超时,只能再付款成功后回调,认为他超时了,这又和方案3一样了.
我最猪头 2013-05-27
  • 打赏
  • 举报
回复
引用 1 楼 snmr_com 的回复:
虚拟问题用现实方式解决,想想你现实生活中去超市买东西是怎样的就行 另: 1.现实生活中购物忽略订单一说(除了非实时交易),应该把这个考虑一下 2.自己增加免责条款,这些属于交易中出现的合理问题,可以通过一份预定的免责条款(应该不算霸王条款吧?)规避,或事后协商
第1个,我不是很明白 第2个,算是事后补救,还行吧!
黄袍披身 2013-05-27
  • 打赏
  • 举报
回复
支付前再做一个库存矫正就行了...
xuzuning 2013-05-27
  • 打赏
  • 举报
回复
检查商品存量,并加行锁(阻止其他人的任何操作) 启动超时计数,调用支付系统(超时后重入第一步) 完成修改库存,解行锁 期间其他用户至多等待一个预设的超时时段
ImN1 2013-05-27
  • 打赏
  • 举报
回复
虚拟问题用现实方式解决,想想你现实生活中去超市买东西是怎样的就行 另: 1.现实生活中购物忽略订单一说(除了非实时交易),应该把这个考虑一下 2.自己增加免责条款,这些属于交易中出现的合理问题,可以通过一份预定的免责条款(应该不算霸王条款吧?)规避,或事后协商

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧