事件 event(new OrderPaid($installment->order)),放到事务外?
app/Http/Controllers/InstallmentsController.php
use App\Events\OrderPaid;
use Carbon\Carbon;
//...
// 支付宝后端回调
public function alipayNotify()
{
//...
// 使用事务,保证数据一致性
\DB::transaction(function () use ($data, $no, $installment, $item) {
//...
// 如果这是第一笔还款
if ($item->sequence === 0) {
// 将分期付款的状态改为还款中
$installment->update(['status' => Installment::STATUS_REPAYING]);
// 将分期付款对应的商品订单状态改为已支付
$installment->order->update([
'paid_at' => Carbon::now(),
'payment_method' => 'installment', // 支付方式为分期付款
'payment_no' => $no, // 支付订单号为分期付款的流水号
]);
}
//...
});
// 如果这是第一笔还款
if ($item->sequence === 0) {
// 触发商品订单已支付的事件
event(new OrderPaid($installment->order));
}
return app('alipay')->success();
}
推荐文章: