
JensonWang
25 声望
中级技术 @ 天狮集团(天津总部)
暂无个人描述~
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
不防,,做好同一个订单多次付款后,自动对重复的进行退款操作。
我们线上业务遇到,请求了订单支付签名后,几个小时后这个货才***去付款,
严格来说无法预防,即便发起支付前取消其他支付渠道订单也会存在时间差,而且用户体验极差,做好兜底操作就行,在异步通知里面如果订单已支付,而且接收到的交易流水不一样,则认为多渠道支付,做退款处理即可
,这种情况几率很小,做限制影响用户体检得不偿失用分布式锁,看谁先竞争到。然后在支付的时候做好订单是否已支付的判断即可
避免重复支付,挺难的,支付后做检测退款,这个简单点
微信/支付宝/银联支付调起
不用任何限制,京东就是多次支付,会把第一次支付作为真实支付,剩下的退款。如果要限制也可以,以前看过微信支付里面有取消订单的API,调用其它支付前先取消订单。但是银联里面不知道是否有相关接口,而且以后扩展其它支付方式也不一定有相关接口。所以还是采用不限制的方法最为通用。
如果仅允许一次支付,可以将订单关联支付单写入数据库,通过在事务中判断是否存在有效的待支付数据来阻塞新支付单的生成。
从你的需求来看,你的业务要确保幂等性操作,从后端层面来做的话:
没办法做,重复了支付只能走退款,而且这种场景很少吧,哪有人会同时用两个支付软件去付两次钱?顶多是先选微信支付,微信没钱,退回到订单页面再去用银联支付
你对单点登录的理解有错误 :joy:
额,你这是业务逻辑没理清楚? 我用淘宝举例,我点击立刻下单,按道理应该是先生成订单,选择哪个支付的时候,按道理应该是请求后端,后端才能生成调起支付相关的操作(那么这个操作你就可以锁住这个订单就可以),但是这里还有个问题,不过我调起之后,不支付,回来选其他支付方式,按道理也是常理,应该也可以调起(不过正常操作的话,不应该很快,你可以锁定一段时间,这段时间重复调用就报错,让客户等一两分钟,按道理支付操作一分钟应该没啥问题也看你们对调起支付时设置的过期时间),当然如果有人恶意,那就让他慢慢走退款流程咯
如果是重复下单那就不是同一个订单,就不管