0- 什么是幂等性
举个例子:
投资理财的案例,用户可以充值、投资、提现,使用第三方支付进行充值,过程如下:
step1:用户网站中输入充值金额
step2:后端创建充值订单入库,此时订单是待支付状态
step3:跳转到第三方支付页面,输入银行卡,然后确认支付
step4:第三方支付通过我方提供的回调接口异步将充值结果告知我方
问题出在了step4,逻辑如下:
//返回通知处理结果,true:处理成功;false:处理失败,第三方会继续重试
public boolean rechargeNotice(第三方支付充值结果){
try{
//第三方充值结果中包含了我方的订单id,从db中获取充值订单信息
OrderModel order = this.getOrderById(订单id); //@1
//判断订单状态是否是待支付状态
if(订单状态 == 待支付状态){
//@2
//将订单状态置为充值成功
order.status(充值成功);
orderService.update(order);
//用户账户可用余额增加
this.accountService.incrBalance(用户id,充值金额);
return tru