diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 12b1ac4..737030b 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -6,6 +6,7 @@ use App\Console\Commands\CalcModule; use App\Console\Commands\SuspendUserAllHosts; use App\Console\Commands\UnbanUser; +use App\Jobs\CheckAndChargeBalance; use App\Jobs\HostCost; use App\Jobs\ClearTasks; use App\Jobs\DeleteHost; @@ -48,5 +49,7 @@ protected function schedule(Schedule $schedule) $schedule->job(new ClearTasks())->weekly(); $schedule->job(new DeleteHost())->hourly(); + + $schedule->job(new CheckAndChargeBalance())->hourly(); } } diff --git a/app/Http/Controllers/User/BalanceController.php b/app/Http/Controllers/User/BalanceController.php index 5433d21..8491d44 100644 --- a/app/Http/Controllers/User/BalanceController.php +++ b/app/Http/Controllers/User/BalanceController.php @@ -78,6 +78,11 @@ public function show(Request $request, Balance $balance) return $this->error('订单已支付'); } + + if (now()->diffInDays($balance->created_at) > 1) { + return $this->error('订单已失效'); + } + try { $result = AlipayFactory::payment()->page()->pay("支付", $balance->order_id, $balance->amount, route('balances.return')); @@ -115,7 +120,7 @@ public function return(Request $request) return $this->success('订单已支付'); } - if ($this->checkAndCharge($request->out_trade_no, $balance)) { + if ($this->checkAndCharge($balance)) { return view('pay_success'); } else { return view('pay_error'); @@ -139,16 +144,16 @@ public function notify(Request $request) return $this->success('订单已支付'); } - if ($this->checkAndCharge($request->out_trade_no, $balance)) { + if ($this->checkAndCharge($balance)) { return $this->success(); } else { return $this->error(); } } - public function checkAndCharge($out_trade_no, Balance $balance) + public function checkAndCharge(Balance $balance) { - $trade = AlipayFactory::payment()->common()->query($out_trade_no); + $trade = AlipayFactory::payment()->common()->query($balance->order_id); if ($trade->code == "10000" && $trade->tradeStatus == "TRADE_SUCCESS") { $balance->paid_at = now(); @@ -160,13 +165,13 @@ public function checkAndCharge($out_trade_no, Balance $balance) try { $balance->user->increment('balance', $trade->totalAmount); - $description = '充值 ' . $trade->totalAmount . ' 元,对端订单号: ' . $out_trade_no; + $description = '充值 ' . $trade->totalAmount . ' 元'; $transaction->addIncomeBalance($balance->user_id, 'alipay', $trade->totalAmount, $description); DB::commit(); } catch (\Exception $e) { DB::rollBack(); - AlipayFactory::payment()->common()->refund($out_trade_no, $trade->totalAmount); + AlipayFactory::payment()->common()->refund($balance->order_id, $trade->totalAmount); return $this->error($e->getMessage()); } @@ -185,7 +190,8 @@ public function checkAndCharge($out_trade_no, Balance $balance) // } - public function transactions() { + public function transactions() + { $transactions = Transaction::thisUser()->latest()->simplePaginate(30); return $this->success($transactions); diff --git a/app/Jobs/CheckAndChargeBalance.php b/app/Jobs/CheckAndChargeBalance.php new file mode 100644 index 0000000..c011c53 --- /dev/null +++ b/app/Jobs/CheckAndChargeBalance.php @@ -0,0 +1,50 @@ +chunk(100, function ($balances) use ($bc) { + foreach ($balances as $balance) { + if (!$bc->checkAndCharge($balance)) { + if (now()->diffInDays($balance->created_at) > 1) { + $balance->delete(); + } + } + } + }); + + // Balance::chunk(100, function ($balances) use ($bc) { + // foreach ($balances as $balance) { + + // $bc->checkAndCharge($balance); + // } + // }); + } +}