user(); if (!$user) { return response()->json(['message' => 'Unauthorized'], 401); } try { $validated = $request->validate([ 'amount' => ['required', 'numeric', 'min:1000'], 'description' => ['nullable', 'string', 'max:500'], ]); } catch (ValidationException $e) { return response()->json([ 'message' => 'Validation failed', 'errors' => $e->errors(), ], 422); } $wallet = $user->wallet()->first(); if (!$wallet) { $wallet = Wallet::create([ 'user_id' => $user->id, 'balance' => 0, ]); } $result = $this->gateway->requestPayment( $user, $validated['amount'], $validated['description'] ?? 'شارچ کیف پول' ); if (!$result['success']) { return response()->json($result, 400); } return response()->json([ 'message' => 'درخواست پرداخت ایجاد شد', 'authority' => $result['authority'], 'payment_url' => $result['payment_url'] ?? null, 'mock' => $result['mock'] ?? false, ]); } public function callback(Request $request): JsonResponse { $authority = $request->query('Authority'); $status = $request->query('Status'); if (!$authority) { return response()->json(['message' => 'Authority not provided'], 400); } if ($status !== 'OK') { return response()->json([ 'message' => 'پرداخت لغو شد.', 'status' => $status, ]); } $result = $this->gateway->verifyPayment($authority); if (!$result['success']) { return response()->json($result, 400); } return response()->json([ 'message' => $result['message'], 'ref_id' => $result['ref_id'], 'amount' => $result['amount'], ]); } public function status(Request $request, string $authority): JsonResponse { $result = $this->gateway->checkPayment($authority); if (!$result['success']) { return response()->json($result, 404); } return response()->json($result); } }