where('gateway_transaction_id', $gatewayTransactionId) ->first(); if ($payment === null || $payment->status !== PaymentStatus::Pending) { return $payment; } $verified = $this->paymentService->verify($method, $gatewayTransactionId); if ($verified->status === PaymentStatus::Pending) { return $payment; } return DB::transaction(function () use ($payment, $verified) { $payment->update([ 'status' => $verified->status, 'gateway_payload' => $verified->gatewayPayload, 'completed_at' => now(), ]); match ($verified->status) { PaymentStatus::Completed => PaymentCompleted::dispatch($payment), PaymentStatus::Failed => PaymentFailed::dispatch($payment), PaymentStatus::Pending => null, }; return $payment; }); } }