walletService->createForUser($user); $deposit = WalletDeposit::query()->create([ 'wallet_id' => $wallet->id, 'amount' => $amount, 'status' => WalletDepositStatus::Pending, 'gateway' => PaymentGatewayDriver::Fake->value, ]); $paymentUrl = $this->gateway->initiate($deposit); return ['deposit' => $deposit, 'payment_url' => $paymentUrl]; } /** * @param array $callbackPayload */ public function handleCallback(WalletDeposit $deposit, array $callbackPayload): bool { if ($deposit->status !== WalletDepositStatus::Pending) { return $deposit->status === WalletDepositStatus::Paid; } if (! $this->gateway->verify($deposit, $callbackPayload)) { $deposit->update(['status' => WalletDepositStatus::Failed]); return false; } DB::transaction(function () use ($deposit): void { $this->walletService->credit($deposit->wallet, $deposit->amount, 'شارژ کیف پول'); $deposit->update(['status' => WalletDepositStatus::Paid]); }); return true; } }