订单取消的时候,客户支付了。怎么处理好?

流程是 A 发起一个订单 需要B去接单。 如果B长时间不接单,C客服有权介入取消订单。
示例:
A:发起了一个订单。
过去了一个小时,C打电话 B没接。
然后C去取消订单,但是此时B已经在接单过程中了。 当C准备去点击取消订单的时候,B处在输入支付密码的过程。C取消了,然后B也刚好输入完成了密码支付成功了。
这种情况 一般怎么处理比较好呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

从描述中可知:

  1. 支付是第三方异步回调来的,所以收到支付回调就代表用户已经支付完成。
  2. 问题中说的同时可以理解成处理支付回调和处理取消请求是同时

那么可以通过加锁的方式做以下处理:

  1. 正在处理支付回调的时候,进来了新的取消请求,驳回取消,保证支付
  2. 正在处理取消请求的时候,进来了新的支付回调,回滚取消,保证支付
  3. 刚处理完支付回调,进来了新的取消请求,按正常流程,取消即可
  4. 刚处理完取消请求,进来了新的支付回调,进行退款,同时添加警告日志,重点跟进该类订单
2周前 评论
qufo 2周前
xiaofeishu (楼主) 2周前
snakelis (作者) 2周前
qufo 2周前
snakelis (作者) 2周前
讨论数量: 35
AloneUtopia

加锁

2周前 评论

1、 关闭订单时关闭支付宝、微信平台的订单,使订单不能再被支付(有这个接口的,不过该方案不完全可靠,重点看方案2)。

2、 自动退款,凡是带有支付的系统都应该具备自动对账退款功能,而不是接受支付成功通知后修改一下订单就完事。 (你可以试试美团外卖,支付宝拉起来之后不支付也不关闭,然后微信支付该订单,最后又把支付宝订单支付掉,过几分钟支付宝订单会被美团检测到自动退款给你)

2周前 评论
没有哆啦A梦的大雄 (作者) 2周前
xiaofeishu (楼主) 2周前
misyuan 2周前
xiaofeishu (楼主) 2周前
没有哆啦A梦的大雄 (作者) 2周前
xiaofeishu (楼主) 2周前
没有哆啦A梦的大雄 (作者) 2周前
没有哆啦A梦的大雄 (作者) 2周前

取消订单前我们都会去支付宝或者微信查一下,如果支付了就改状态,如果没支付就调用他们的关单防止客户支付

2周前 评论
xiaofeishu (楼主) 2周前

回调的时候,如果不能接受把取消的订单变成正常订单,只有一种解决方式: 退款

2周前 评论
xiaofeishu (楼主) 2周前
Adachi 2周前

取消订单的时候会去尝试把它相关的各种渠道的支付关闭一下,如果关闭不了并且已经支付的话就不能关闭了

2周前 评论
xiaofeishu (楼主) 2周前
高延迟战神 (作者) 2周前
xiaofeishu (楼主) 2周前
高延迟战神 (作者) 2周前
xiaofeishu (楼主) 2周前

我说下我目前的方法。一直也是觉得不是很好。所以想看看大家的。当要取消这个订单的时候,首先看看这个用户的登录日志和操作日志。如果是处在支付页面。此时要慎重,或者再打一次电话。或者等几分钟。或者和网友说的一样去渠道关闭订单。

2周前 评论
hongfs 2周前
xiaofeishu (作者) (楼主) 2周前

从描述中可知:

  1. 支付是第三方异步回调来的,所以收到支付回调就代表用户已经支付完成。
  2. 问题中说的同时可以理解成处理支付回调和处理取消请求是同时

那么可以通过加锁的方式做以下处理:

  1. 正在处理支付回调的时候,进来了新的取消请求,驳回取消,保证支付
  2. 正在处理取消请求的时候,进来了新的支付回调,回滚取消,保证支付
  3. 刚处理完支付回调,进来了新的取消请求,按正常流程,取消即可
  4. 刚处理完取消请求,进来了新的支付回调,进行退款,同时添加警告日志,重点跟进该类订单
2周前 评论
qufo 2周前
xiaofeishu (楼主) 2周前
snakelis (作者) 2周前
qufo 2周前
snakelis (作者) 2周前

回调加判断就好了吧,如果是取消就再走一个原路退回,记录起来

2周前 评论

支付前应该是要请求支付参数的吧,这个服务端肯定会保存这些数据的比如支付的订单号。 取消前可以判断一下这个,没有可以直接取消,有的话就再另外一种情况。 如果已经有支付订单生成了可以再考虑几种解决方案,1、判断这个支付订单n分钟内有没有支付完成,一般支付这个动作2分钟内就能完成了吧,所以可以判断是不是这个支付订单是不是已经生成超过2分钟了,超了直接取消。(这样 支付完成 同时 订单被取消 的可能性已经很低了,估计几千个出不了一个,等客户找客服解决就行了吧 :joy:)。2、. . .

2周前 评论

大概看了一下,你这个根本问题是:订单的状态的变化。
我的想法是,用户支付的优先级最高,所以在支付回调那里加一个锁好了。如果客服取消动作先执行了,那么支付回调那里就可以覆盖掉这个状态。
如果支付回调先执行了,上一个锁,让客服取消动作无法执行。

1周前 评论

如果用户支付了之后,回调查询订单状态是取消,那直接调用退款接口,把钱退给用户不就好了

1周前 评论

订单支付状态单独一个字段记录,收到支付成功的回调就更新为已付款。如果订单被取消就可以根据支付状态自动退款或者人工退款

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!