如果order.PaymentProcessing()方法之后的代码报错了,订单未支付,但状态已改为Processing,此时该订单不能重新提交支付
来源:13-7 【应用】模拟支付

慕莱坞0578141
2020-11-23
如果order.PaymentProcessing()方法之后的代码报错了,订单未支付,但状态已改为Processing,此时该订单不能重新提交支付,需把状态改为Pending才能重新支付。
对于此种情况应该如何处理呢
1回答
-
阿莱克斯刘
2020-11-25
hello 同学,你的问题非常有水平!如果在PaymentProcessing的时候报错,我们的状态的确应该rollback回到pending,而且这个步骤应该是自动的不需要人工参与。但问题是rollback的逻辑应该放在哪里比较好呢?而我们怎么会知道哪里、哪一步报错呢?这就要结合异常处理才能完成了。
给个例子:
1)第一步,给oder FSM 的Processing状态加一个Permit
_machine.Configure(OrderStateEnum.Processing)
.Permit(OrderStateTriggerEnum.Approve, OrderStateEnum.Completed)
.Permit(OrderStateTriggerEnum.Reject, OrderStateEnum.Declined)
.Permit(OrderStateTriggerEnum.回到pending, OrderStateEnum.Pending);
2)第二步,在services中给payment处理加上 try...catch
try{
order.PaymentProcessing()
}catch {
//如果报错,不管任何错误,只要是支付不成功,我们就rollback。当然,你要细化也可以
order.回到pending()
// 继续向上抛出异常,让异常被controller接住,返回状态码500,并在log中记录此次异常
throw exception("支付系统内部错误")
}
20
相似问题