Skip to content

怎么保证订单不会重复提交?

  • 我们用的是token机制,用户进入页面的时候我们会产生一个token存入redis为5分钟,然后下单的时候会传入toekn,我们会从redis查一下,如果token存在我们删除token,执行任务,如果不存在直接抛出异常给用户一个提示为请求重复
  • 加分布式锁也可以解决

支付你是怎么做的啊?

第三方支付一般包含3个接口,下单,回调,根据订单号主动查询信息,为了避免出息丢单,我们一般是先要保存一笔交易流水(状态为处理中),再调第三方接口,然后会跳到第三方支付去付款,付完款后,第三方会给我们一个回调通知,有些网络不是很好的情况下,三方通知没收到,我们还有定时任务补偿,每过一段时间去查询所有交易状态为处理中的,然后去调用三方接口查结果,得到明确的结果修改支付状态和订单状态。

假如你这边没有收到第三方回调怎么办?

我们可以通过定时任务去查询交易流水表为处理中的,然后循环去调用支付宝那边根据交易流水号去查询支付状态同步结果,保证数据的最终一致性

假如第三方给你回调的过程中,数据被篡改怎么办?

这个时候我们需要去验签一下,第三方回调中有一个sign,我们需要验签避免被篡改

假如第三方回调有延迟,如何避免用户出现重复支付?

因为我们在支付之前就保存了一笔交易流水为处理中,一笔订单正常情况只有有一笔交易成功的记录,在用户发支付之前我们需要根据订单号查询下,如果该订单存在一笔处理中或者支付成功的记录,我们给他友好的提示,不让他支付

假如用户在订单过期的前一秒发起支付,三方结果没同步过来,延迟队列触发取消?

这个时候延迟队列需要根据单号去查询,先查我们的交易状态的状态,如果是处理中我们还需要查询第三方的交易结果,如果失败直接取消,如果是成功或者处理中不能触发取消