做支付、订单相关功能时的注意点

不确定的一定要采取保守策略,不可以直接设置最终态。

  1. 调用第三方支付接口时,若出现网络异常,则记为「处理中」,而不是「处理失败」;
  2. 查询订单失败时,不能作为「交易失败」;
  3. 使用第三方服务时,确保「幂等」下才可重试;(如流水号可以确保幂等时,可以通过流水号不变来重试)
  4. 较短时间内查询第三方订单不存在或失败时,不能想当然认为订单失败,可能是第三方还没处理结束,要延长处理频次或人为干预,确保自己系统的健壮性;
  5. 后端防重时,可以采用有限状态机模式(数据库乐观锁+白名单);
  6. 状态尽量是单向流转(如已完成的订单,不可再变更为处理中)。

简言之,不确定的一定要采取保守策略,不可以直接设置最终态。