Tree il y a 4 semaines
Parent
commit
135de7c8e2

+ 4 - 0
app/Console/Commands/ExemptReview.php

@@ -135,6 +135,10 @@ class ExemptReview extends Command
                 if($value->PixType == 2){
 //                    $agent = 101;
                     rand(1,100)>60?$agent = 99:$agent = 101;
+
+                    if(($value->WithDraw/NumConfig::NUM_VALUE)>800){
+                        $agent = 101;
+                    }
                 }else{
                     if(($value->WithDraw/NumConfig::NUM_VALUE)<40){
                         $agent = 99;

+ 8 - 6
app/Game/Logics/SendCodeLogic.php

@@ -4,6 +4,7 @@
 namespace App\Game\Logics;
 
 
+use App\Game\Services\RouteService;
 use App\Http\helper\HttpCurl;
 use App\Http\logic\api\BaseApiLogic;
 use App\Models\GamePhoneVerityCode;
@@ -232,11 +233,11 @@ class SendCodeLogic extends BaseApiLogic
     {
 
         // 如果之前发送过验证码并且还没使用,还返回之前的验证码
-        $query = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
-            ->where('PhoneNum', $phone)
-            ->first();
-
-        if ($query) return $query->Code;
+//        $query = DB::connection('write')->table('QPTreasureDB.dbo.GamePhoneVerityCode')
+//            ->where('PhoneNum', $phone)
+//            ->first();
+//
+//        if ($query) return $query->Code;
 
 
         $length = $this->config['lengthNum'] ?: 4;
@@ -269,9 +270,10 @@ class SendCodeLogic extends BaseApiLogic
                 return false;
             }
         }
-
+        $config=RouteService::getChannelConfig();
         $first = DB::connection('write')->table('QPAccountsDB.dbo.AccountPhone')
             ->where('PhoneNum', $phone)
+            ->where('RegionID', $config->isRegionUnique())
             ->first();
 
         // 注册发送验证码 -- 已经绑定过不允许发送

+ 18 - 6
app/Game/Services/RouteService.php

@@ -10,6 +10,7 @@ use App\Game\GlobalUserInfo;
 use App\Game\Route;
 use App\Game\RouteModel;
 use App\Game\WebChannelConfig;
+use App\Game\WebRegionConfig;
 use App\Models\AccountsInfo;
 use Illuminate\Http\Request;
 
@@ -133,16 +134,27 @@ class RouteService
             }
         }
 
-
+        //TODO 根据域名获取渠道
         //默认站点
         if(!isset($Channel)||!$Channel||$Channel==env('REGION_24680_DEFAULT_CHANNEL',100)) {
-            if (strstr($origin, "24680.pro") || strstr($origin, "localhost")) {
-                $Channel = 100;
-            } else {
-                $Channel = env('REGION_24680_DEFAULT_CHANNEL',100);
+
+            $region = WebRegionConfig::where('DomainUrl', $origin)->first();
+
+            if ($region) {
+                $bindChannels = is_array($region->BindChannels) ? $region->BindChannels : [];
+                if ($bindChannels) {
+                    $Channel = @$bindChannels[0];
+                }
             }
+//
+//
+//            if (strstr($origin, "24680.pro") || strstr($origin, "localhost")) {
+//                $Channel = 100;
+//            } else {
+//                $Channel = env('REGION_24680_DEFAULT_CHANNEL',100);
+//            }
         }
-        return $Channel;
+        return $Channel??env('REGION_24680_DEFAULT_CHANNEL',100);
     }
     public static function isTestSite()
     {

+ 1 - 1
app/Game/WebRegionConfig.php

@@ -12,7 +12,7 @@ class WebRegionConfig extends Model
     protected $connection = 'mysql';
 
     protected $fillable = [
-        'RegionID', 'DomainUrl', 'LogoUrl', 'IconUrl', 'BindChannels', 'GroupID'
+        'RegionID', 'DomainUrl', 'LogoUrl', 'IconUrl', 'BindChannels', 'GroupID','GameDesc'
     ];
 
     protected $casts = [

+ 1 - 1
app/Http/Controllers/Admin/WithdrawalController.php

@@ -635,7 +635,7 @@ class WithdrawalController extends BaseController
             'OrderId' => $first->OrderId,
             'admin_id' => $admin_id
         ];
-        DB::table('QPAccountsDB.dbo.WithDrawRecovery')->insert($data);
+//        DB::table('QPAccountsDB.dbo.WithDrawRecovery')->insert($data);
 
         // 添加提现记录
         $RecordData = [

+ 124 - 57
app/Http/Controllers/Game/LoginController.php

@@ -86,7 +86,8 @@ class LoginController extends Controller
         }
         if($onlyVerify)return true;
 
-        $user = GlobalUserInfo::getGameUserInfo("Phone",  $Phone);
+        $config = RouteService::getChannelConfig($request);
+        $user = GlobalUserInfo::query()->where('RegionID', $config->isRegionUnique())->where("Phone", $Phone)->first();
         if ($user) {
             $user = GlobalUserInfo::toWebData($user);
             return response()->json(apiReturnSuc($user, ['login.success', 'Login bem-sucedido, bem-vindo de volta!']));//->withCookie($this->setLoginCookie($user['sign']));
@@ -138,20 +139,25 @@ class LoginController extends Controller
 
         $verifyCode = GamePhoneVerityCode::verifyCode($Phone, $PhoneCode);
 
-        //TODO 上线前去掉测试
         if ($verifyCode != trim($PhoneCode)) {
             SetNXLock::release($redisKey);
             Log::info("web.verify.code_incorrect_or_expired BindPhone $verifyCode",[$Phone,$PhoneCode]);
             return apiReturnFail(['web.verify.code_incorrect_or_expired', 'O código está incorreto ou o tempo passou']);
         }
 
-
+        $config = RouteService::getChannelConfig($request);
         // 查看手机号是否已经绑定
-        $first = DB::connection('write')->table('QPAccountsDB.dbo.AccountPhone')
-            ->where('PhoneNum', $Phone)
-//            ->where('Channel', $user->Channel)
-            ->orWhere('UserID', $user->UserID)
-            ->first();
+//        $first = DB::connection('write')->table('QPAccountsDB.dbo.AccountPhone')
+//            ->where('PhoneNum', $Phone)
+////            ->where('Channel', $user->Channel)
+//            ->orWhere('UserID', $user->UserID)
+        $first = GlobalUserInfo::query()->where(function ($query) use ($Phone, $user, $config) {
+            $query->where(function ($q) use ($Phone, $config) {
+                $q->where('RegionID', $config->isRegionUnique())->where('Phone', $Phone);
+            })->orWhere(function ($q) use ($user) {
+                $q->where('UserID', $user->UserID)->where('Phone', '<>', '');
+            });
+        })->first();
 
         if ($first) {
             SetNXLock::release($redisKey);
@@ -167,7 +173,7 @@ class LoginController extends Controller
 
         $PhoneNum = $Phone;
 
-        $Phone = $this->checkPhone($PhoneNum, $RegisterLocation);
+        $Phone = $this->checkPhone($PhoneNum, $RegisterLocation, $request);
         //有错误返回
         if (is_array($Phone)){
             Log::info(json_encode($Phone),[$Phone,$PhoneCode]);
@@ -181,8 +187,9 @@ class LoginController extends Controller
         $BindDate = Carbon::now()->toDateTimeString();
         $LogonPass = $request->password??$PhoneCode;
         $Channel = $user->Channel;
+        $RegionID = $user->RegionID;
         // 绑定手机号
-        AccountPhone::insert(compact('UserID', 'PhoneNum', 'BindDate', 'Channel'));
+        AccountPhone::insert(compact('UserID', 'PhoneNum', 'BindDate', 'Channel','RegionID'));
         GlobalUserInfo::where('GlobalUID', $user->GlobalUID)->update([ 'Phone' => $Phone, 'RegisterLocation' => $RegisterLocation]);
         Log::info('绑定手机号'.'-'.$user->GlobalUID.'-' . $Phone . '-' . $LogonPass . '-' . $UserID);
         // --绑定手机赠送金币
@@ -196,7 +203,6 @@ class LoginController extends Controller
 
         AgentService::recordPerformance($UserID, 0,1);
 
-
         SetNXLock::release($redisKey);
         return apiReturnSuc(GlobalUserInfo::getGameUserInfoToWeb('UserID', $UserID));
         /**
@@ -269,7 +275,7 @@ class LoginController extends Controller
         $user = $request->globalUser;
         $user = GlobalUserInfo::toWebData($user);
         self::CheckTimeBonus($user);
-        
+
         // 计算VIP等级
         //$user['vip'] = VipService::calculateVipLevel($user['UserID'] ?? 0);
 
@@ -741,14 +747,16 @@ class LoginController extends Controller
         $type=$request->input('type','id');
         $FPID = $request->input("bfp", "");
         $user=null;
+
+        $config = RouteService::getChannelConfig($request);
         if($type=='guest'){
             //游客模式打开,随时可以登录
             //$user=GlobalUserInfo::where('FPID',$FPID)->where('Phone','')->where('Email','')->first();
-            $user=GlobalUserInfo::where('FPID',$FPID)->first();
+            $user=GlobalUserInfo::where('FPID',$FPID)->where('RegionID',$config->isRegionUnique())->first();
             if(!$user){
                 return $this->registerUser($request);
             }else{
-               return $this->guestLogin($user);
+                return $this->guestLogin($user);
             }
         }
 
@@ -763,11 +771,11 @@ class LoginController extends Controller
         $RegisterLocation = $request->country ?? env('COUNTRY_CODE','55');
 
         if (strstr($request->account, '@')) {
-            $user = GlobalUserInfo::getGameUserInfo("Email", $request->account);
-        } else if(is_numeric($request->account)){
-            $user = GlobalUserInfo::getGameUserInfo("Phone", $RegisterLocation . $request->account);
-        }else{
-            $user = GlobalUserInfo::getGameUserInfo("Accounts", $request->account);
+            $user = GlobalUserInfo::query()->where('RegionID', $config->isRegionUnique())->where("Email", $request->account)->first();
+        } else if (is_numeric($request->account)) {
+            $user = GlobalUserInfo::query()->where('RegionID', $config->isRegionUnique())->where("Phone", $RegisterLocation . $request->account)->first();
+        } else {
+            $user = GlobalUserInfo::query()->where('RegionID', $config->isRegionUnique())->where("Accounts", $request->account)->first();
         }
 
 
@@ -813,7 +821,14 @@ class LoginController extends Controller
         }
 
         if (!empty($Phone)) {
-            $isExist = GlobalUserInfo::query()->where("Phone", $Phone)->orWhere('Accounts',$OrgPhone)->first();
+
+            $config = RouteService::getChannelConfig($request);
+            $isExist = GlobalUserInfo::query()
+                ->where('RegionID', $config->isRegionUnique())
+                ->where(function ($query) use ($Phone, $OrgPhone) {
+                    $query->where("Phone", $Phone)->orWhere('Accounts', $OrgPhone);
+                })
+                ->first();
             //账户查重
             if ($isExist) {
                 if ($request&&Hash::check($request->password, $isExist->LogonPass)) {
@@ -831,9 +846,9 @@ class LoginController extends Controller
 
         $accs=[];
         for($i=0;$i<100;$i++) {
-            $acc = $this->makeGustAccount();
+            $acc = $this->makeGuestAccount();
             while(QuickAccountPassStore::where("account", $acc['account'])->exists()) {
-                $acc = $this->makeGustAccount();
+                $acc = $this->makeGuestAccount();
             }
             QuickAccountPassStore::create($acc);
             $accs[]=$acc;
@@ -856,7 +871,7 @@ class LoginController extends Controller
         }
         return $acc->toArray();
     }
-    public function makeGustAccount()
+    public function makeGuestAccount()
     {
 
 // 词库
@@ -865,20 +880,26 @@ class LoginController extends Controller
 
 // 生成账号和密码
 
-            $word1 = $words[array_rand($words)];
+        $word1 = $words[array_rand($words)];
 //            $word2 = $words[array_rand($words)];
-            $number = str_pad($numbers[array_rand($numbers)], 2, '0', STR_PAD_LEFT);
+        $number = str_pad($numbers[array_rand($numbers)], 2, '0', STR_PAD_LEFT);
 
-            $account= $word1 . $number ;
+        $account= $word1 . $number ;
 
-            $word = $words[array_rand($words)];
-            $number = str_pad($numbers[array_rand($numbers)], 2, '0', STR_PAD_LEFT);
-            $password= $word . $number;
+        $word = $words[array_rand($words)];
+        $number = str_pad($numbers[array_rand($numbers)], 2, '0', STR_PAD_LEFT);
+        $password= $word . $number;
 
 
         return compact('account', 'password');
 
 
+    }
+    public function getUserByFPID($FPID)
+    {
+
+        $user=GlobalUserInfo::getGameUserInfo('FPID', $FPID);
+        return $user;
     }
     private $maxFpsidLimit=2;
     public function registerUser(Request $request, $regByGuest = false)
@@ -917,9 +938,18 @@ class LoginController extends Controller
             return apiReturnFail(['web.reg.fail_phone_exist', 'O número de telefone já existe, altere-o e tente se cadastrar novamente!']);
         }
 
-
+        //获取默认配置
+        $config = RouteService::getChannelConfig($request);
+        //游客注册检查是否已经注册
         if($type=='guest'){
-            $guestUser=GlobalUserInfo::where('FPID',$FPID)->where('Phone','')->where('Email','')->first();
+            $where = [];
+            $where[] = ['FPID', $FPID];
+            $where[] = ['Phone', ''];
+            $where[] = ['Email', ''];
+            $where[] = ['RegionID', $config->isRegionUnique()];
+
+            $guestUser=GlobalUserInfo::where($where)->first();
+
             if($guestUser){
                 //存在,直接返回去
                 return $this->guestLogin($guestUser);
@@ -962,9 +992,9 @@ class LoginController extends Controller
         //保持邀请和被邀请的渠道序列统一
         $ActCode = $request->input('act');
         if(strstr($ActCode,'http')){
-           $ActCode=explode('http',$ActCode)[0];
+            $ActCode=explode('http',$ActCode)[0];
         }
-        $Package = 'com.uswin.game777';
+
         $ReferrType = 0;
         if ($ActCode) {
             //使用邀请的Code来保持邀请被邀请的用户注册渠道一致性
@@ -979,8 +1009,6 @@ class LoginController extends Controller
         }
         if(!$Channel){
 
-            //获取默认配置
-            $config = RouteService::getChannelConfig($request);
             //非游客注册
             while($config->isGuestOpen()&&!$regByGuest){
                 RouteService::clearChannelConfig();
@@ -1071,6 +1099,7 @@ class LoginController extends Controller
             $globalUserInfo = new GlobalUserInfo([
                 'UserID'           => $UserID,
                 'GameID'           => $GameID,
+                'FF'               => $request->input('ff', ''),
                 'FPID'             => $FPID,
                 'LastFPID'         => $FPID,
                 'ShortHashID'      => $ShortHashID,
@@ -1086,6 +1115,7 @@ class LoginController extends Controller
                 'ServerRegion'     => $ServerRegion,
                 'DefaultLanguage'  => $Language,
                 'Channel'          => $Channel??99,
+                'RegionID'         => $config->isRegionUnique(),
                 'ReferrType'       => $ReferrType,
                 'RegisterDate'     => date('Y-m-d H:i:s'),
                 'InsurePass'       => '',
@@ -1110,8 +1140,8 @@ class LoginController extends Controller
             Util::WriteLog('c99',json_encode($_SERVER));
         }
         //注册钱数要归0
-        $newRegGolds=$config->isRegZeroMoneyOpen()?0:$config->BONUS_REG();
-        GameScoreInfo::query()->where('UserID', $UserID)->update(['Score'=>$newRegGolds]);
+//        $newRegGolds=$config->isRegZeroMoneyOpen()?0:$config->BONUS_REG();
+//        GameScoreInfo::query()->where('UserID', $UserID)->update(['Score'=>$newRegGolds]);
 
         $agentUser = AgentService::SetUserAgent($GlobalUID, $UserID, $ActCode);
         SetNXLock::release($redisKey);
@@ -1133,6 +1163,42 @@ class LoginController extends Controller
             $guser['password'] = $password;
         }
 
+        $defaultGameId = 931;
+        $recommendGame = '/game/' . $defaultGameId;
+        // 如果用户信息存在,根据GameID的最后一位数字查询映射关系
+        if ($guser && isset($guser['GameID'])) {
+            $gameId = (string)$guser['GameID'];
+            $lastDigit = (int)substr($gameId, -1); // 获取最后一位数字
+
+            // 查询映射关系(带缓存)
+            $cacheKey = 'game_number_mapping:' . $lastDigit;
+            $mapping = null;
+            // 尝试从缓存获取
+            $cached = Redis::get($cacheKey);
+            if ($cached !== null) {
+                $decoded = json_decode($cached, true);
+                if (is_array($decoded) && !empty($decoded)) {
+                    $mapping = (object)$decoded;
+                }
+            }
+            if(!$mapping){
+                $mapping = DB::table('agent.dbo.game_number_mapping')
+                    ->where('number', $lastDigit)
+                    ->first();
+
+                Redis::setex($cacheKey, $mapping ? 86400 : 300, json_encode($mapping ?: []));
+            }
+
+            if ($mapping && isset($mapping->game_id) && $mapping->game_id) {
+                $defaultGameId = $mapping->game_id;
+                $recommendGame = '/game/' . $mapping->game_id;
+            }
+        }
+        $guser['recommendGame'] = $recommendGame;
+
+        AccountsInfo::where('UserID', $UserID)->update(['UserMedal' => $defaultGameId ]);
+
+        Util::WriteLog('register_params',[$request,$guser]);
 
         return response()->json(apiReturnSuc($guser, ['reg.success', 'Registro realizado com sucesso!']));//->withCookie($this->setLoginCookie($guser['sign']));
     }
@@ -1148,7 +1214,19 @@ class LoginController extends Controller
             return apiReturnFail(['web.reg.fail_phone_exist', 'O número de telefone já existe, altere-o e tente se cadastrar novamente!']);
         }
 
-        $guestUser=GlobalUserInfo::where('FPID',$FPID)->first();
+//        $guestUser=GlobalUserInfo::where('FPID',$FPID)->first();
+        $config = RouteService::getChannelConfig($request);
+
+
+        $where = [];
+        $where[] = ['FPID', $FPID];
+//        $where[] = ['Phone', ''];
+//        $where[] = ['Email', ''];
+        $where[] = ['RegionID', $config->isRegionUnique()];
+
+        $guestUser=GlobalUserInfo::where($where)->first();
+
+
         if($guestUser){
             //存在,直接返回去
             return $this->guestLogin($guestUser);
@@ -1174,7 +1252,6 @@ class LoginController extends Controller
         if(strstr($ActCode,'http')){
             $ActCode=explode('http',$ActCode)[0];
         }
-        $Package = 'com.uswin.game777';
         $ReferrType = 0;
         if ($ActCode) {
             //使用邀请的Code来保持邀请被邀请的用户注册渠道一致性
@@ -1190,7 +1267,7 @@ class LoginController extends Controller
         if(!$Channel){
 
             //获取默认配置
-            $config = RouteService::getChannelConfig($request);
+//            $config = RouteService::getChannelConfig($request);
             //非游客注册
 //            while($config->isGuestOpen()&&!$regByGuest){
 //                RouteService::clearChannelConfig();
@@ -1260,6 +1337,7 @@ class LoginController extends Controller
             $globalUserInfo = new GlobalUserInfo([
                 'UserID'           => $UserID,
                 'GameID'           => $GameID,
+                'FF'               => $request->input('ff', ''),
                 'FPID'             => $FPID,
                 'LastFPID'         => $FPID,
                 'ShortHashID'      => $ShortHashID,
@@ -1274,7 +1352,8 @@ class LoginController extends Controller
                 'RegisterLocation' => $RegisterLocation,
                 'ServerRegion'     => $ServerRegion,
                 'DefaultLanguage'  => $Language,
-                'Channel'          => $Channel??99,
+                'Channel'          => $Channel??100,
+                'RegionID'         => $config->isRegionUnique(),
                 'ReferrType'       => $ReferrType,
                 'RegisterDate'     => date('Y-m-d H:i:s'),
                 'InsurePass'       => '',
@@ -1305,22 +1384,10 @@ class LoginController extends Controller
         $agentUser = AgentService::SetUserAgent($GlobalUID, $UserID, $ActCode);
         SetNXLock::release($redisKey);
 
-//        if ($regByGuest) {
-//            return GlobalUserInfo::getGameUserInfo("UserID", $UserID);
-//        }
-
         $guser = GlobalUserInfo::toWebData($globalUserInfo,true);
 
-//        if($agentUser->Higher1ID){
-//            //获取邀请者信息
-//            $inviter=AccountsInfo::where('UserID',$agentUser->Higher1ID)->first();
-//        }
         $guser['reg'] = 1;
-//
-//        if($type=='guest'){
-//            $guser['account'] = $account;
-//            $guser['password'] = $password;
-//        }
+
 
         $defaultGameId = 931;
         $recommendGame = '/game/' . $defaultGameId;
@@ -1334,7 +1401,7 @@ class LoginController extends Controller
             $cacheKey = 'game_number_mapping:' . $lastDigit;
             $mapping = null;
             $cacheHit = false;
-            
+
             // 尝试从缓存获取
             $cached = Redis::get($cacheKey);
             if ($cached !== null) {
@@ -1349,14 +1416,14 @@ class LoginController extends Controller
                     $mapping = null;
                 }
             }
-            
+
             // 缓存未命中,查询数据库
             if (!$cacheHit) {
                 $mapping = DB::connection('write')
                     ->table('agent.dbo.game_number_mapping')
                     ->where('number', $lastDigit)
                     ->first();
-                
+
                 // 存入缓存,24小时过期
                 if ($mapping) {
                     Redis::setex($cacheKey, 86400, json_encode($mapping));

+ 163 - 56
app/Http/Controllers/Game/WebRouteController.php

@@ -16,6 +16,8 @@ use App\Game\Services\RouteService;
 use App\Game\Services\TelegramAppService;
 use App\Game\Style;
 use App\Game\WebChannelConfig;
+use App\Game\WebRegionConfig;
+use App\Http\Controllers\Api\ApiController;
 use App\Http\Controllers\Controller;
 use App\Http\helper\NumConfig;
 use App\IpLocation;
@@ -40,78 +42,84 @@ class WebRouteController extends Controller
     {
         $this->routeService = $routeService;
     }
+
     public function Routes(Request $request)
     {
 
-        GlobalUserInfo::UpdateLoginDate($request,true);
-        $FPID=$request->input("bfp","");
-        $inApp=$request->input('ia',0);
+        GlobalUserInfo::UpdateLoginDate($request, true);
+        $FPID = $request->input("bfp", "");
+        $inApp = $request->input('ia', 0);
 
         // 仅加载顶层路由,并预加载所有嵌套子路由
-        $routes= RouteModel::whereNull('parent_id')
+        $routes = RouteModel::whereNull('parent_id')
             ->whereRaw(RouteService::getStateToWhereRaw($request))
             ->with('subs.subs.subs')  // 根据实际层级深度调整
             ->orderBy('index')
             ->get();
 
-        $styles=Style::all();
-        $blocks=Block::all();
+        $styles = Style::all();
+        $blocks = Block::all();
 
-        $config=RouteService::getChannelConfig($request);
+        $config = RouteService::getChannelConfig($request);
 
-        $guestOpen=$config->isGuestOpen();
-        $disablePromote=$config->isDisablePromote();
+        $guestOpen = $config->isGuestOpen();
+        $disablePromote = $config->isDisablePromote();
         //在fb内,节省时间,不快速注册
         //if($inApp)$guestOpen=false;
 
-        $upgradeBonus=intval($config->BONUS_VERIFY_PHONE());
-        if($guestOpen&&!$upgradeBonus) {
+        $upgradeBonus = intval($config->BONUS_VERIFY_PHONE());
+        if ($guestOpen && !$upgradeBonus) {
             //游客模式打开,随时可以登录
             $upgradeBonus = SystemStatusInfo::OnlyGetCacheValue('BindPhoneReward') ?? 500;
         }
-        $user=GlobalUserInfo::$me;//LoginController::checkLogin($request);
-
-        $hashadd=$request->input("hashadd","");
-        $isreg=0;
-        if(!empty($hashadd)){
-            try{
-                $hashadd=json_decode($hashadd,true);
-                if($hashadd['type']=='tele'){
-                    $teleUser=TelegramAppService::decodeHash($hashadd['data']);
-                    if(intval($teleUser->UserID)){
-                        if(!$user||$user->UserID!=$teleUser->UserID) {
-                            $user = GlobalUserInfo::getGameUserInfo('UserID',$teleUser->UserID);
+        $user = GlobalUserInfo::$me;//LoginController::checkLogin($request);
+
+        $hashadd = $request->input("hashadd", "");
+        $isreg = 0;
+        if (!empty($hashadd)) {
+            try {
+                $hashadd = json_decode($hashadd, true);
+                if ($hashadd['type'] == 'tele') {
+                    $teleUser = TelegramAppService::decodeHash($hashadd['data']);
+                    if (intval($teleUser->UserID)) {
+                        if (!$user || $user->UserID != $teleUser->UserID) {
+                            $user = GlobalUserInfo::getGameUserInfo('UserID', $teleUser->UserID);
                         }
-                    }else{
+                    } else {
                         //不存在用户
-                        if(!$user){
+                        if (!$user) {
 
-                            $guestUser=(new LoginController())->registerUser($request,true);
-                            if(!is_array($guestUser)){
-                                $guestUser->NickName=$teleUser->first_name;
+                            $guestUser = (new LoginController())->registerUser($request, true);
+                            if (!is_array($guestUser)) {
+                                $guestUser->NickName = $teleUser->first_name;
                                 $guestUser->save();
                                 $isreg = 1;
-                                $user=$guestUser;
+                                $user = $guestUser;
                             }
 
                         }
-                        if($user){
+                        if ($user) {
                             //绑定现有用户
-                            $teleUser->UserID=$user->UserID;
-                            $teleUser->GlobalUID=$user->GlobalUID;
+                            $teleUser->UserID = $user->UserID;
+                            $teleUser->GlobalUID = $user->GlobalUID;
                             $teleUser->save();
                         }
                     }
 
                 }
-            }catch (\Exception $e){
+            } catch (\Exception $e) {
 
             }
         }
 
-        if(!$user){
+        if (!$user) {
+            $loginController = new LoginController();
             //游客模式打开,随时可以登录
-            $user=GlobalUserInfo::getGameUserInfo('FPID',$FPID);
+            $user = $loginController->getUserByFPID($FPID);
+//            if (!$user) {
+//                $user = $loginController->registerUser($request, true);
+//            }
+
         }
 
         $FF=$request->input('ff', '');
@@ -122,6 +130,7 @@ class WebRouteController extends Controller
             $user=GlobalUserInfo::GetRecentLogin($request);
         }
         //转换成web数据
+        //转换成web数据
         if ($user){
             $user = GlobalUserInfo::toWebData($user);
             $config=WebChannelConfig::getByChannel($user['Channel']);
@@ -142,9 +151,7 @@ class WebRouteController extends Controller
         if(env('CONFIG_24680_NFTD_99',0)==0)if($config->Channel==99)$firstBonus=0;
 
         $registerBonus = SystemStatusInfo::OnlyGetCacheValue('GrantScoreCountNew') ?? 1000;
-        $chat = DB::connection('write')->table('QPAccountsDB.dbo.SystemStatusInfo')
-            ->where('StatusName', 'Telegram')
-            ->first();
+        $chat = SystemStatusInfo::OnlyGetCacheValue('Telegram') ?? "https://m.me/930365713484502";
 
         // 默认推荐游戏
         $defaultGameId = 931;
@@ -152,6 +159,34 @@ class WebRouteController extends Controller
         $popPwaBonus=$user?(Redis::get('pwa_bonus:'.$user['UserID'])??0):0;
         $ChannelPackageName = DB::table('QPPlatformDB.dbo.ChannelPackageName')->where('Channel',$config->Channel??100)
             ->first();
+
+
+        // slotsPartner: 与 WebChannelConfig 通过 RegionID 关联且 RegionID 不为空的区域,且当前 $config 的 Channel 不在该区域的 BindChannels 中(即其他“伙伴”区域)
+        $currentChannel = $config->Channel;
+        $slotsPartner = WebRegionConfig::query()
+            ->where('RegionID', '!=', '')
+            ->whereIn('RegionID', function ($q) use ($currentChannel) {
+                $q->select('RegionID')
+                    ->from((new WebChannelConfig())->getTable())
+                    ->where('RegionID', '!=', '')
+                    ->where('Channel', '!=', $currentChannel);
+            })
+            ->get()
+//            ->filter(function ($region) use ($currentChannel) {
+//                $bindChannels = $region->BindChannels;
+//                return !is_array($bindChannels) || !in_array((int)$currentChannel, $bindChannels);
+//            })
+            ->map(function ($region) {
+                return [
+                    'DomainUrl' => $region->DomainUrl ?? '',
+                    'LogoUrl'   => $region->LogoUrl ?? '',
+                    'GameDesc'  => $region->GameDesc ?? '',
+                ];
+            })
+            ->values()
+            ->all();
+
+
         $data['conf']=[
             'hall'=>env("CONFIG_24680_HALL")??GameBasicConfig::$HallServer,
             'DOLLAR'=>env("CONFIG_24680_DOLLAR")??GameBasicConfig::$DOLLAR,
@@ -173,7 +208,7 @@ class WebRouteController extends Controller
 
             'getStateToWhereRaw' =>RouteService::getStateToWhereRaw($request),
 
-            'serviceLink' => $chat?$chat->StatusString:'',
+            'serviceLink' => $chat,
             'vipConfig' => VipService::getVipLevelConfig(),
 
             'popWheel'=>0,
@@ -184,14 +219,15 @@ class WebRouteController extends Controller
             'popPwaBonus'  => $popPwaBonus,
             'download'=>['light'=>$config->LightApk,'full'=>$config->FullApk,'bonus'=>$config->BONUS_PWA()],
             'registerOpen'=>$config->RegOpen??env('CONFIG_REG_OPEN','sms,mail'),//id,phone,sms,mail,guest
-            'loginOpen'=>$config->LoginOpen??'id,phone,sms,mail,guest'
+            'loginOpen'=>$config->LoginOpen??'id,phone,sms,mail,guest',
+            'slotsPartner' => $slotsPartner
         ];
 
 
         $data['conf']['pf']=['type'=>$config->PlatformName,'id'=>$config->PlatformID];
 
 //        if (!$user){
-            Util::WriteLog('routes_rs',[$data['conf']['pf'],$user]);
+        Util::WriteLog('routes_rs',[$data['conf']['pf'],$user]);
 //        }
 
 //        $data['request']=$request->all();
@@ -240,6 +276,14 @@ class WebRouteController extends Controller
             return apiReturnFail('领取失败:' . $e->getMessage());
         }
     }
+    public function log(Request $request)
+    {
+        Util::writeLog("gamelog", [
+            'user'    => $request->user(),
+            'request' => $request->all()
+        ]);
+        return apiReturnSuc();
+    }
 
     public function checkApkInstall(Request $request)
     {
@@ -247,7 +291,7 @@ class WebRouteController extends Controller
 
         $FPID = $request->input("bfp", "");
         $ff=$request->input('ff', '');
-        $url_sign = $request->get('us') ?? "tf";
+        $url_sign = $request->input('us',RouteService::getChannel($request));
 
         $UserID = $user ? $user->UserID : "";
         $ip = $request->ip();
@@ -273,19 +317,18 @@ class WebRouteController extends Controller
             $agent = substr($agent, 0, $lastSemicolon);
         }
 
-        if (isset($UserID) && !empty($UserID)) {
-            $cookieExist = ApkService::loadCookie($UserID,$FPID,$ff);
-            if ($cookieExist && is_array($cookieExist)) {
-                $data = [];
-                $data['cookie'] = $cookieExist['Cookie'] ?? "";
-                $data['params'] = $cookieExist['Params'] ?? "";
-                $data['url_sign'] = $cookieExist['UrlSign'] ?? "";
-                $data['type'] = $cookieExist['Platform'] ?? "";
-                $data['agent'] = $cookieExist['ClickUA'] ?? "";
-                $data['origin'] = $_SERVER['HTTP_ORIGIN'] ?? $_SERVER['HTTP_REFERER'] ?? '*';
-                Util::writeLog("apkload", "existUser:::".json_encode($data));
-                return apiReturnSuc($data);
-            }
+        $cookieExist = ApkService::loadCookie($UserID,$FPID,$ff);
+        if ($cookieExist && is_array($cookieExist)) {
+            $data = [];
+            $data['cookie'] = $cookieExist['Cookie'] ?? "";
+            $data['params'] = $cookieExist['Params'] ?? "";
+            $data['ls'] = $cookieExist['LocalStorage'] ?? "";
+            $data['us'] = $cookieExist['UrlSign'] ?? "";
+            $data['type'] = $cookieExist['Platform'] ?? "";
+            $data['agent'] = $cookieExist['ClickUA'] ?? "";
+            $data['origin'] = $_SERVER['HTTP_ORIGIN'] ?? $_SERVER['HTTP_REFERER'] ?? '*';
+            Util::writeLog("apkload", "existUser:::".json_encode($data));
+            return apiReturnSuc($data);
         }
         $datas = [];
         if (Redis::exists($key)) {
@@ -323,6 +366,71 @@ class WebRouteController extends Controller
         return apiReturnFail("");
 
     }
+    public function saveEnv(Request $request)
+    {
+        $user = $request->user();
+        $FPID = $request->input("bfp", "");
+        $ff=$request->input('ff', '');
+        $url_sign = $request->input('us',RouteService::getChannel($request));
+
+        $UserID = $user ? $user->UserID : "";
+        $ip = IpLocation::getRealIp();
+        $agent = $request->userAgent();
+        $alen = strlen($agent);
+        $key = "apktmp_{$url_sign}_$ip";
+
+
+        ///gg or fb
+        $type=$request->get('type')??"fb";
+        $cookie=$request->get('cookie')??'';
+        $localStorage=$request->get('ls')??'';
+        $params=$request->get('params')??'';
+
+        $origin = $_SERVER['HTTP_ORIGIN'] ??$_SERVER['HTTP_REFERER']?? '*';
+        $time=time();
+
+
+        $locale=$request->get('locale')??'';
+
+        $data=compact('ip','agent','cookie','type','url_sign','time','params','locale','origin','ff','localStorage');
+
+        $cookieExist = ApkService::loadCookie($UserID,$FPID,$ff);
+        if (!$cookieExist ) {
+            ApkService::saveCookie($UserID,$data,$FPID,$ff);
+
+            $key = "apktmp_{$url_sign}_$ip";
+            $datas = [];
+            if (Redis::exists($key)) {
+                $datas = json_decode(Redis::get($key), true);
+                //防止重复压入
+                foreach ($datas as $v) {
+                    if ($data['agent'] == $v['agent'] && $data['type'] == $v['type']) {
+                        return apiReturnSuc(1);
+                    }
+                }
+            }
+            array_unshift($datas, $data);
+
+            Redis::set($key, json_encode($datas));
+            Redis::expire($key, 7200);
+
+            //压入最近记录
+            ApkService::addRecentsNew($data, $url_sign);
+            //写入快手
+            if($type=='kw'){
+                ApkService::sendToKwai(json_decode($cookie,true),ApkService::KWAI_EVENT['EVENT_DOWNLOAD']);
+            }
+
+            Util::WriteLog("saveEnv",$data);
+
+
+        }
+
+
+
+
+        return apiReturnSuc(1);
+    }
 
     public function SaveRoutes(Request $request)
     {
@@ -370,5 +478,4 @@ class WebRouteController extends Controller
         return apiReturnSuc("");
     }
 
-
 }