知识分享

  • 首页
  • 市场分析
  • 需求分析
  • UI设计
  • 产品运营
  • 产品设计
  • 项目管理
  • 新玩意儿
不积跬步无以至千里
不要停留,欣赏沿途的风景
  1. 首页
  2. 产品设计
  3. 正文

想要解决支付掉单问题?这有两种系统设计方案

2021年1月7日 656点热度 0人点赞 0条评论

编辑导语:在订单支付的过程中,我们常常会遇到这样的问题:明明付了钱,也扣了款,但是订单却并没有成功。上文中,作者为我们分享了一次解决方案。在本篇文章中,作者又结合实际情况和案例,总结出了两种系统设计方案。

上次在文章《钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案》提到,支付过程会出现「掉单、卡单」的情况,这种情况对于用户来讲,体验非常差,明明自己付了钱,扣了款,但是订单却未成功。

上篇文章我们简单说了下解决方案,这次小黑哥就结合生产实际碰到的情况,给出两种详细设计的方案:

  1. 定时轮询补偿方案
  2. 延迟消息补偿方案

大家可以根据自己系统的实际情况,选择性参考。

「当然了,以下设计方案可能并不完美,如果各位读者还有其他解决方案,欢迎留言指出,一起讨论,一起成长~」

一、定时轮询补偿方案

1. 整体流程

这个方案主要采用定时任务,批量查询掉单记录,从而驱动查询具体支付支付结果,然后更新内部订单。

整体方案流程图如下:

定时任务补偿

前三步流程没什么好说的,正常的支付流程,咱们针对后面几步具体详细说下。

第三步调用支付通道之后,如果支付通道端返回「支付受理成功或者支付处理中」,我们就需要调用第四步,将这类订单插入掉单表。

如果支付直接成功了,那就正常流程返回即可。

复习一下,网关类支付,比如支付宝、微信支付、网银支付,这种支付模式,支付通道仅仅返回支付受理成功,具体支付结果需要接收支付通道端的支付通知,这类支付我们将其称为异步支付。

相应的还有同步支付,比如银行卡支付,微信、支付宝代扣类支付,这类支付,同步就能返回支付结果。

第五步,补单应用将会定时查询数据库,批量查询掉单记录;第六步,补单应用使用线程池,多线程异步的方式发起掉单查询;第七步,调用支付通道支付查询接口。

重点来了,如果第七步支付结果查询为以下状态:

  • 「支付结果为扣款成功」
  • 「支付结果为明确失败」
  • 「掉单记录查询达到最大次数」

「第八步就会删除掉单记录。」

最后,如果掉单查询依旧还是处理中,那么经过一定的延时之后,重复第五步,再次重新掉单补偿,直到成功或者查询到达最大次数。

2. 相关问题

「为什么需要新建一张掉单表?不能直接使用支付订单表,查询未成功的订单吗?」

这个问题,实际上确实可以直接使用的支付订单表,然后批量查询当天未成功的订单,补单程序发起支付查询。

那为什么需要新建一张掉单表?

主要是因为数据库查询效率问题,因为支付订单表每天都会大量记录新增,随着时间,这张表记录将会越来越多,越来越大。

「支付记录越多,批量范围查询效率就会变低,查询速度将会变慢。」

所以为了查询效率,新建一张掉单表。这张表里仅记录支付未成功的订单,所以数据量就会很小,那么查询效率就会很高。

另外,掉单表里的记录,不会被永久保存,只是临时性。当支付结果查询成功,或者支付结果明确失败,再或者查询次数到达规定最大次数,就会删除掉单记录。

「这就是第八步为什么需要删除掉单表的原因。」

如果需要保存每次掉单表查询详情,那么这里建议再新增一张掉单查询记录表,保存每一次的查询记录。针对这个方案,如果还有其他问题,欢迎留言。

3. 方案优缺点

定时轮询补偿方案,最大的优点可能就是系统架构方案比较简单,比较容易实施,那么这个方案的缺点主要在于「定时任务」上。定时任务轮询方案天然会存在以下不足:

  1. 「轮询效率稍低」;
  2. 每次查询数据库,已经被执行过记录,仍然会被扫描(补单程序将会根据一定策略决定是否发起支付通道查询),有「重复计算」的嫌疑;
  3. 「时效性不够好」,如果每小时轮询一次,最差的情况下,时间误差会达到1小时;
  4. 如果为了解决时效性问题,增加定时任务查询效率,那么 1 中查询效率跟 2 的重复计算问题将会更加明显。

二、延迟消息补偿方案

下面介绍另外一种掉单补偿方案,延迟消息补偿方案,这个方案整体流程与定时任务方案类似,最大区别可能在于,从一种「拉模式」变成一种「推模式」。

整体方案流程图如下:

这个方案主要流程跟定时方案类似,主要区别在于第四步、第五步、第八步。

第四步的流程从插入掉单表变更为往「延迟队列发送掉单消息」;第五步,补单程序接收掉单消息,然后触发支付掉单查询;第八步,如果第七步支付结果查询为以下状态:

  • 支付结果为扣款成功
  • 支付结果为明确失败
  • 掉单记录查询达到最大次数

补单程序将会告知延迟队列消费成功,延迟队列将会删除这条掉单消息。其他状态将会告知消费失效,延迟队列将会在一定延时之后,再次发送掉单消息,然后继续重复第五步。

方案优缺点:

延迟消息的方案相对于定时轮询方案来讲:

  • 无需再查询全部订单
  • 效率高时效性较好

不过延迟消息这种方案,需要基于「延迟队列」,实现起来比较复杂,目前开源实现也比较少。

三、小结

支付掉单、卡单是支付过程中经常会碰到的事,我们可以采用异步补偿的方案,解决该问题,异步补偿方案可以采用如下两种:

  1. 定时轮询补偿方案
  2. 延迟消息补偿方案

定时轮询补偿方案实现起来比较简单,但是时效性稍差。而延迟消息补偿方案总体来说比较优秀,但是实现起来比较复杂。如果没有自定义的延迟时间的需求,可以直接采用 RocketMQ 延迟消息,简单快捷。

另外「延迟队列」使用场景还是比较多,不仅仅能用在掉单补偿上,还可以用于支付关单等场景。所以有能力开发的团队,可以开发一个通用的延迟队列。

历史支付文章推荐:

1. “轻轻一扫,立刻扣款”,解读付款码背后的原理

2. 产品设计:解读银行卡支付背后的原理

3. 手机没网了,却还能支付,这是什么原理?

4. 钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案

5. 一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?

 

作者:楼下小黑哥;微信公号@程序通事,支付行业,后端技术

本文由 @楼下小黑哥 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

给作者打赏,鼓励TA抓紧创作!

标签: 暂无
最后更新:2021年1月7日

小虾米

同理心,洞察力!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
最新 热点 随机
最新 热点 随机
产品周报254期 | 苹果MR产品明年发售,多地对网约车按下“暂停键” AIGC抢了电商打工人的饭碗? 听歌看广告还不够,QQ音乐会员也要涨价了 Axure高保真教程:通过输入框动态维护可视化图表 “重启天涯”直播义卖为什么会失败? 抖音、高德、小红书加入群聊,本地生活谁说了算? 【高级产品经理的门槛系列】必备技能 – 制定产品的规范标准 社交模块里的动态卡片,怎么设计? 策略产品经理必读系列—搜广推业务中如何对预估CTR进行校准 造“风”的AIGC,“吹灭”了元宇宙? 从“最难618”到“最卷618”,电商购物节画上句号? 美国社交电商再起波澜:TikTok商城开张,Meta却要闭门做生意 视频号到赚钱的时候了吗?有人月GMV3000万,有人看不懂要放弃 卖烤肠,年轻人“少走20年弯路”? 互联网平台广告收入增长转正背后的「五个信号」 直播电商:终局远未到来 单月补贴高达7万?抄淘宝作业,京东开始抢主播 没有大V、没有喊单,苹果在淘宝开了一场“冷直播” 十六番旅游app产品分析 关于刷屏的“苹果Vision Pro”,如何冷静地看待?
被集市收割、被买家嫌弃,“摆摊后浪”有点惨蓝领用工招聘平台的数字化建设思路干货分享:WMS系统—PDA的应用iOS 17,能否守住「iOS神话」?系统功能设计:网络加速器系统产品需求设计电商扫盲第一讲:GMV的底层逻辑打造一个基于本地社区的闲置交易平台,你看好吗?东南亚出海洞察:去东南亚为直播电商开荒,没有超头主播,货品供给不足……定金+尾款模式背后的套路天涯老用户的自救,让我明白情怀是最不值钱的东西抖音上线酒店日历房,其他平台会慌吗?从需求到设计开发,产品质量问题如何分析靠咱们看腻的电视剧,爱奇艺和腾讯在东南亚成了顶流如何让你的“对内B端产品”看起来有价值?设计走查知多少产品思考:视觉冲击!以图片展示金额,“省钱卡”这样玩就对了多多买菜为什么比美团买菜要便宜?都在骂网暴,为什么网暴一直没有停过韩国漂流记:明星在面前,咖啡在手里,中国互联网公司在广告墙自动驾驶风口退潮的深层逻辑
读懂05后 |《2021 未成年人互联网兴趣洞察报告》发布 详解|「双钻设计模型」最全解析!手把手带你理解和应用! 资本背后的“洪门”暗影 互动视频对PUGC中视频产品具备的典型价值(二) 新零售SaaS架构:组织管理的底层逻辑与架构设计 “下沉市场”的金矿,怎么挖? 4种来源,教你如何发现新产品的机会 为什么市面上没有很成功的大型付费提问社区? 能不能转SaaS,这4点最关键 为啥直播间就一定要最低价? 详解|用户体验地图,到底该如何使用? 被“凝视”的童年——儿童视频中的消费图鉴 智能穿戴类APP游戏化方案 每日优鲜崩塌始末 互联网,并未消失 何为Saas产品的标准化?-Saas产品之路(3) 「B端设计」的4个误区 补贴大战下,社区团购没有羊毛、只有鸡毛 产品从0到1都经历了什么——商业化设计篇 当微信向淘宝打开大门

COPYRIGHT © 2023 知识分享. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang