evoplayService = $evoplayService; $this->projectId = env('EVOPLAY_PROJECT_ID', ''); $this->secretKey = env('EVOPLAY_SECRET_KEY', ''); $this->currency = env('CONFIG_24680_CURRENCY'); } /** * 游戏启动页面 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function gameLunch(Request $request) { // 获取请求参数 $gid = $request->input('gid'); $user = $request->user(); $userId = $user->UserID; $globalUID = $user->GlobalUID; // 检查用户渠道权限 (如果需要) if ($user->Channel != 99 && $user->Channel != 44) { http_response_code(404); exit(); } // 找到游戏卡片 GameCard::$enableStateCheck = false; $gamecard = GameCard::where('gid', $gid)->first(); // 检查用户当前游戏状态 $inGameId = OuroGameService::getUserInGame($userId, $globalUID); if ($inGameId != intval($gamecard->id)) { Util::WriteLog('24680game', compact('inGameId', 'gamecard', 'user')); } // 记录游戏点击 $gamecard = GameCard::where('gid', $gid)->where('brand', 'Evoplay')->first(); $gamecard->increment('play_num', 1); LogGamecardClick::recordClick($gamecard->id, $userId); // 获取用户语言 $lang = GlobalUserInfo::getLocale(); $supportedLangs = ['en', 'zh', 'ru', 'ja', 'ko', 'th', 'vi', 'id', 'ms', 'fr', 'es', 'de', 'tr', 'pt', 'ar']; if (!in_array($lang, $supportedLangs)) { $lang = 'en'; } // 关闭加载动画 echo ""; // 设置缓存控制头 header("Cache-Control: no-cache, no-store, must-revalidate"); header("Expires: 0"); try { // 使用服务获取游戏启动URL $gameUrl = $this->evoplayService->getGameUrl($gid, $globalUID, $lang); if ($gameUrl) { $htmlContent = ""; echo $htmlContent; exit(); } else { echo ""; exit(); } } catch (\Exception $e) { Util::WriteLog('evoplay_error', $e->getMessage()); echo ""; exit(); } } /** * 获取游戏列表 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function gameList(Request $request) { try { // 使用服务获取游戏列表 $result = $this->evoplayService->getGamesList(); return response()->json($result); } catch (\Exception $e) { Util::WriteLog('evoplay_error', $e->getMessage()); return response()->json([ 'error' => $e->getMessage() ], 500); } } /** * 回调接口 - 用户验证 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function verifyPlayer(Request $request) { $data = $request->all(); Util::WriteLog('evoplay', [$data, $request->header()]); // 验证签名 if (!$this->verifyRequest($request)) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'INVALID_SIGNATURE', 'message' => 'Invalid signature' ] ], 401); } $userId = $data['user_id'] ?? null; if (!$userId) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'MISSING_PARAMETER', 'message' => 'Missing user_id parameter' ] ], 400); } if (!ServerService::IsLocalUser($userId)) { return $this->evoplayService->callSubApi($userId, $request); } // 验证用户 return response()->json($this->evoplayService->validateUser($userId)); } /** * 回调接口 - 获取余额 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getBalance(Request $request) { $data = $request->all(); Util::WriteLog('evoplay', $data); // 验证签名 if (!$this->verifyRequest($request)) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'INVALID_SIGNATURE', 'message' => 'Invalid signature' ] ], 401); } $userId = $data['user_id'] ?? null; if (!$userId) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'MISSING_PARAMETER', 'message' => 'Missing user_id parameter' ] ], 400); } if (!ServerService::IsLocalUser($userId)) { return $this->evoplayService->callSubApi($userId, $request); } // 获取余额 return response()->json($this->evoplayService->getBalance($userId)); } /** * 回调接口 - 下注 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function bet(Request $request) { $data = $request->all(); Util::WriteLog('evoplay', $data); // 验证签名 if (!$this->verifyRequest($request)) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'INVALID_SIGNATURE', 'message' => 'Invalid signature' ] ], 401); } $userId = $data['user_id'] ?? null; $gameId = $data['game_id'] ?? null; $amount = $data['amount'] ?? 0; $transactionId = $data['transaction_id'] ?? null; $roundId = $data['round_id'] ?? null; // 验证必须的参数 if (!$userId || !$transactionId || !$gameId || $amount <= 0) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'MISSING_PARAMETER', 'message' => 'Missing required parameters' ] ], 400); } if (!ServerService::IsLocalUser($userId)) { return $this->evoplayService->callSubApi($userId, $request); } // 处理下注 return response()->json($this->evoplayService->bet($userId, $gameId, $amount, $transactionId, $roundId)); } /** * 回调接口 - 赢钱 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function win(Request $request) { $data = $request->all(); Util::WriteLog('evoplay', $data); // 验证签名 if (!$this->verifyRequest($request)) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'INVALID_SIGNATURE', 'message' => 'Invalid signature' ] ], 401); } $userId = $data['user_id'] ?? null; $gameId = $data['game_id'] ?? null; $amount = $data['amount'] ?? 0; $transactionId = $data['transaction_id'] ?? null; $roundId = $data['round_id'] ?? null; $betTransactionId = $data['bet_transaction_id'] ?? null; // 验证必须的参数 if (!$userId || !$transactionId || !$gameId || $amount <= 0) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'MISSING_PARAMETER', 'message' => 'Missing required parameters' ] ], 400); } if (!ServerService::IsLocalUser($userId)) { return $this->evoplayService->callSubApi($userId, $request); } // 处理赢钱 return response()->json($this->evoplayService->win($userId, $gameId, $amount, $transactionId, $roundId, $betTransactionId)); } /** * 回调接口 - 回滚交易 * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function rollback(Request $request) { $data = $request->all(); Util::WriteLog('evoplay', $data); // 验证签名 if (!$this->verifyRequest($request)) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'INVALID_SIGNATURE', 'message' => 'Invalid signature' ] ], 401); } $userId = $data['user_id'] ?? null; $transactionId = $data['transaction_id'] ?? null; $rollbackTransactionId = $data['rollback_transaction_id'] ?? null; // 验证必须的参数 if (!$userId || !$transactionId || !$rollbackTransactionId) { return response()->json([ 'status' => 'error', 'error' => [ 'code' => 'MISSING_PARAMETER', 'message' => 'Missing required parameters' ] ], 400); } if (!ServerService::IsLocalUser($userId)) { return $this->evoplayService->callSubApi($userId, $request); } // 处理回滚 return response()->json($this->evoplayService->rollback($userId, $transactionId, $rollbackTransactionId)); } /** * 验证请求的真实性 * * @param Request $request * @return bool */ private function verifyRequest(Request $request) { // 在测试环境可以跳过验证 if (env('APP_ENV') === 'local' || env('APP_ENV') === 'testing') { return true; } $signature = $request->header('X-Signature'); if (empty($signature)) { Util::WriteLog('evoplay', 'Missing signature header'); return false; } // 获取请求数据 $data = $request->all(); // 从请求中移除签名字段 if (isset($data['signature'])) { unset($data['signature']); } // 生成预期的签名 $expectedSignature = $this->evoplayService->generateSignature($data); // 比较签名 $isValid = ($signature === $expectedSignature); Util::WriteLog('evoplay', [ 'received_signature' => $signature, 'expected_signature' => $expectedSignature, 'is_valid' => $isValid ]); return $isValid; } }