From 467c24543c8f56952add378320e3392f54fdee74 Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Tue, 6 Sep 2022 14:51:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/User/BalanceController.php | 41 +++++++++++++++---- resources/views/index.blade.php | 3 ++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/User/BalanceController.php b/app/Http/Controllers/User/BalanceController.php index 691f628..afed331 100644 --- a/app/Http/Controllers/User/BalanceController.php +++ b/app/Http/Controllers/User/BalanceController.php @@ -76,7 +76,7 @@ public function show(Request $request, Balance $balance) } try { - $result = AlipayFactory::payment()->page()->pay("支付", $balance->order_id, $balance->amount, route('balances.notify')); + $result = AlipayFactory::payment()->page()->pay("支付", $balance->order_id, $balance->amount, route('balances.return')); $responseChecker = new ResponseChecker(); @@ -95,6 +95,26 @@ public function show(Request $request, Balance $balance) return $this->success($balance); } + public function return(Request $request) + { + // 检测订单是否存在 + $balance = Balance::where('order_id', $request->out_trade_no)->with('user')->first(); + if (!$balance) { + return $this->notFound('balance not found'); + } + + // 检测订单是否已支付 + if ($balance->paid_at !== null) { + return $this->success('订单已支付'); + } + + if ($this->checkAndCharge($request->out_trade_no, $balance)) { + return redirect()->route('index')->with('success', '支付成功,非常感谢。'); + } else { + return redirect()->route('index')->with('error', '无法完成支付,请联系我们。'); + } + } + public function notify(Request $request) { // 检测订单是否存在 @@ -108,7 +128,16 @@ public function notify(Request $request) return $this->success('订单已支付'); } - $trade = AlipayFactory::payment()->common()->query($request->out_trade_no); + if ($this->checkAndCharge($request->out_trade_no, $balance)) { + return $this->success(); + } else { + return $this->error(); + } + } + + public function checkAndCharge($out_trade_no, Balance $balance) + { + $trade = AlipayFactory::payment()->common()->query($out_trade_no); if ($trade->code == "10000" && $trade->tradeStatus == "TRADE_SUCCESS") { $balance->paid_at = now(); @@ -121,16 +150,14 @@ public function notify(Request $request) DB::commit(); } catch (\Exception $e) { DB::rollBack(); - AlipayFactory::payment()->common()->refund($request->out_trade_no, $trade->totalAmount); + AlipayFactory::payment()->common()->refund($out_trade_no, $trade->totalAmount); return $this->error($e->getMessage()); } - return $this->success('订单支付成功'); + return true; } else { - return $this->error('订单支付失败'); + return false; } - - } // // 转换为 drops diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index cdedeab..df08640 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -25,6 +25,9 @@ @if (session('success'))

{{ session('success') }}

@endif + @if (session('error')) +

{{ session('error') }}

+ @endif @if (session('token'))

{{ session('token') }}