基于微信支付、退款的一个取消预约的方案

本文探讨了在微信非付款码支付中,用户预约后取消支付的业务场景。当用户在支付回调通知前取消订单,由于无法区分支付状态,系统必须允许取消并面临是否退款的问题。方案提出在前端允许用户取消,后台通过支付回调判断是否退款。为解决并发导致的退款遗漏,引入定时任务进行最后的退款检查,确保业务流程的完整性和用户权益。
摘要由CSDN通过智能技术生成

一、前提

本方案是基于 「微信非付款码支付」 进行设计的。

二、业务场景

首先,大家先大概了解下「预约」和「取消预约」两个流程。

  1. 预约
    在这里插入图片描述
  2. 取消预约
    在这里插入图片描述

三、遇到的问题

试想如下场景:

用户预约,拉起微信支付后选择支付,但是在支付回调通知前,用户又发起了取消。此时该如何实现取消逻辑呢?

此时,订单的状态处于 “待支付”,是允许取消还是不允许取消呢?首先,说下 “不允许取消” 这种情况在业务上是不可能成立的,为什么这么说呢?因为,只有那些处于 “支付中” 状态的订单不允许取消才合理,而我们只有 “待支付”、“支付成功” 状态,我们无法得到 “支付中” 这个状态。

所以,只能允许取消!!!!

如果允许取消的话,是退款还是不退款呢?通过当前订单状态 “待支付”,我们也没办法判断用户是取消支付了(未发生真正的支付不需要进行退款),还是支付了但我方系统还未得到支付回调通知(发生了真正的支付需要进行退款)。

分别在 “取消支付”、“支付了我方系统还未得到支付回调通知” 两个场景下分别进行 退款、不退款 都会出现那些问题呢?

操作订单状态取消支付支付了我方系统还未得到支付回调通知
不退款待支付 => 取消因为根本没发生实际的支付,所以不退款是合理的订单虽然成功取消了,但由于不退款,造成用户无法得到退款的钱
退款待支付 => 取消因为根本没发生实际的支付,所以所有退款都会失败1、退款失败(那些在微信端还在支付中的订单);2、退款成功(刚好支付完成且成功)

四、方案设计

  1. 用户在前端触发「取消」
    在这里插入图片描述

  2. 支付回调通知
    在这里插入图片描述
    判断 “支付成功” 的交易是否有对应的「由于取消产生的待退款任务」,如果存在,则需要进行退库退款。

    至此,通过以上 2 步,我们来看看可能会出现的所有场景,如下:
    在这里插入图片描述
    这里需要重点说明的是 场景四。由于并发的情况,会造成一个本该被处理的「由于取消产生的待退款任务」可能永远都无法被处理的情况产生。

  3. 定时任务

    为了解决 场景四 的问题,我们还需要一个定时任务来进行最后的兜底处理。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cab5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值