订单超时之后的支付如何处理?如何让支付宝拒绝用户的支付请求?
遇到一种情况是,用户点击了订单的去支付宝支付,可能临时有事走开了,在支付页面停留了很长时间,直到订单超时了才回到电脑前继续完成支付,商品被恢复的库存可能已经被别的用户买走了,没有足够库存了,却生成了新的订单,这种情况怎么处理呢?怎么让支付宝对超时订单拒绝支付请求呢?
@leo
@ruke
解决了,先感谢两位的回应。
yansongda/pay的close方法只能关闭已经创建的订单,即便参数传递的正确,因为用户下单后没有点“支付宝支付”这个按钮,支付宝单号就没有创建,对没有创建的支付宝单号就会返回上面说的 该交易不存在的 错误。
支付宝的官方文档中 提到 了 time_express参数,在用户点击“支付宝支付”创建支付宝网页支付的方法中添加这个参数就可以做到限时支付,超时支付宝网页会自动跳转到 该支付单号已关闭的页面。
图中参数30m(30分钟,参数支持单位m(分钟) 、d(天),更详细的查看支付宝文档),是以用户点击了“支付宝支付”这一刻算起的,如果想以订单下单时间为起点计算,可以考虑两种方案:
1、需要自己用php的时间函数计算一下用户点击“支付宝支付”时 距离结束时间的 分钟数,再赋值给time_express就行了。
2、参照了一下淘宝的做法,当用户下单的时候,直接设置超时时间,并跳转到支付宝支付页面,不让用户自己选择点击“支付宝支付”的时间节点。
我下面的回复帖子里也有讨论这两个方案,觉得都不是最佳方案,希望有大佬们能帮忙想想更好的方案,感谢留言啊。
--------------2019-4-2 更新一下---------------------------------
有个在大型电商网站的朋友告诉我分两种情况:
一、支付宝/微信的二维码超时了,用户就不能付款了,这种就不用担心了
二、如果二维码本身没有超时,订单超时了,用户会成功支付,电商后台程序也会成功更新付款数据,这种情况直接让用户找客服就好了。
总结:开发程序,不能完全抱着程序员思维,要多思考业务场景,像这个问题中的情况,本来就是极小众的情况,万一真的遇到了,让客户打电话就可以给处理,万一客户懒,嫌退款麻烦,就让你们业务人员直接按已付款处理了,直接发货,作为公司又多了一单,何乐而不为?
不要死钻牛角尖,非要在程序逻辑上做到100%完美!折磨自己不说,还让公司少了一个单子!