Tree hace 2 semanas
padre
commit
2e7d32ce6c

+ 112 - 11
app/Game/GlobalUserInfo.php

@@ -47,18 +47,54 @@ class GlobalUserInfo extends Model
             return strstr(env('VALID_LOCALE','en,es,pt,ru'),$locale)?$locale:$default;
         }
     }
+
+    /**
+     * @param $request
+     * @return GlobalUserInfo|null
+     */
+    public static function GetRecentLogin($request){
+        $FF = $request->input("ff", "");
+        $LastLogonIP=IpLocation::getRealIp();
+        $ua=$request->userAgent();
+
+        $data1=Redis::get('UpdateLoginCheck_'.$FF);
+        $data2=Redis::get('UpdateLoginCheck_'.$LastLogonIP);
+
+        if($data1){
+            $data=json_decode($data1,true);
+            if($data['LastLogonIP']==$LastLogonIP){
+                return self::getGameUserInfo('UserID',$data['UserID']);
+            }
+        }
+        if($data2){
+            $data=json_decode($data2,true);
+            if($data['FF']==$FF){
+                return self::getGameUserInfo('UserID',$data['UserID']);
+            }else if($data['ua']==$ua){
+                return self::getGameUserInfo('UserID',$data['UserID']);
+            }
+        }
+        $user=GlobalUserInfo::query()->where('LastLogonIP',$LastLogonIP)->where('FF',$FF)->first();
+        return $user;
+    }
     public static function UpdateLoginDate($request,$forceLogin=false)
     {
         if(self::$me) {
             $UserID=self::$me->UserID;
             $LastLogonDate = date('Y-m-d H:i:s');
             $LastLogonIP=IpLocation::getRealIp();
+            $FPID = $request->input("bfp", "");
+            $FF = $request->input("ff", "");
             if(!Redis::exists('UpdateLoginCheck_'.$UserID)||$forceLogin) {
-                Redis::setex('UpdateLoginCheck_'.$UserID,600,$UserID);
-                $FPID = $request->input("bfp", "");
-                GameTask::dispatch(['UpdateLogin', [$UserID, $LastLogonDate, $LastLogonIP,$FPID]]);
-                Util::WriteLog('24680dispatch', ['UpdateLogin', [$UserID, $LastLogonDate, $LastLogonIP]]);
+                GameTask::dispatch(['UpdateLogin', [$UserID, $LastLogonDate, $LastLogonIP,$FPID,$FF]]);
+                Util::WriteLog('24680dispatch', ['UpdateLogin', [$UserID, $LastLogonDate, $LastLogonIP,$FPID,$FF]]);
             }
+            //无论是否通知后端更新,都要记录最新的数据,方便及时取回
+            $ua=$request->userAgent();
+            $saved=json_encode(compact('UserID','FPID','FF','LastLogonDate','LastLogonIP','ua'));
+            Redis::setex('UpdateLoginCheck_'.$UserID,300,$saved);
+            Redis::setex('UpdateLoginCheck_'.$FF,1200,$saved);
+            Redis::setex('UpdateLoginCheck_'.$LastLogonIP,1200,$saved);
         }
     }
 
@@ -100,7 +136,7 @@ class GlobalUserInfo extends Model
     public static function faceidToAvatar($faceID)
     {
 //        return "https://cdn.moeda777.com/24680/assets/avatar/2/avatar_$faceID.png";
-        return "https://24680.imgix.net/24680/assets/avatar/2/avatar_$faceID.png?auto=format,compress&cs=srgb";
+        return "https://24680.imgix.net/24680/assets/avatar/5/avatar_$faceID.webp?auto=format,compress&cs=srgb";
     }
 
     /**
@@ -110,8 +146,33 @@ class GlobalUserInfo extends Model
      */
     public static function getGameUserInfo($key, $value)
     {
-        return self::query()->where($key, $value)->first();
+        if(self::$useCache) {
+            $cacheKey = "GlobalUserInfo:{$key}:{$value}";
+
+            // 尝试从缓存获取
+            $cached = Redis::get($cacheKey);
+            if ($cached !== null && $cached !== false) {
+                $data = json_decode($cached, true);
+                if ($data) {
+                    $instance = new self();
+                    $instance->exists = true;
+                    $instance->setRawAttributes($data, true);
+                    return $instance;
+                }
+            }
+        }
+
+        // 从数据库查询
+        $user = self::query()->where($key, $value)->first();
+
+        if(self::$useCache) {
+            // 缓存结果(300秒 = 5分钟)
+            if ($user) {
+                Redis::setex($cacheKey, 300, json_encode($user->getAttributes()));
+            }
+        }
 
+        return $user;
     }
 
     /**
@@ -131,13 +192,19 @@ class GlobalUserInfo extends Model
      */
     public static function toWebData(GlobalUserInfo $user,$makeBB=false)
     {
+        if(is_array($user)){
+            if(isset($user['Score'])) return $user;
+            if(isset($user['UserID'])){
+                $user = self::getGameUserInfo('UserID', $user['UserID']);
+            }
+        }
         $data = false;
         if ($user) {
             $u = $user->toArray();
-            $existKey = ['UserID', 'GameID', 'GlobalUID','Email', 'Phone','DefaultLanguage', 'NickName', 'FaceID', 'Gender', 'RegisterDate', 'RegisterLocation', 'InsurePass', 'Level', 'Exp', 'UserRight','Channel'];
+            $existKey = ['UserID', 'GameID', 'GlobalUID','Email', 'Phone','DefaultLanguage', 'NickName', 'FaceID', 'Gender', 'RegisterDate', 'RegisterLocation', 'InsurePass', 'Level', 'Exp', 'UserRight','Channel','PwaInstalled'];
             $data = [];
             foreach ($existKey as $key) {
-                $data[$key] = $u[$key];
+                if(isset($u[$key]))$data[$key] = $u[$key];
             }
             if (!empty($data['InsurePass'])) $data['InsurePass'] = 1;
             $data['sign'] = self::genGuuidSign($user);
@@ -152,9 +219,9 @@ class GlobalUserInfo extends Model
 
             $data['Score'] = $scoreData['Score'];
             $data['InsureScore'] = $scoreData['InsureScore'];
-            if($makeBB){
-                $data['bb']=['token'=>(new BetbyService())->getDefaultJWT($u)];
-            }
+//            if($makeBB){
+//                $data['bb']=['token'=>(new BetbyService())->getDefaultJWT($u)];
+//            }
             $data['vip'] = VipService::calculateVipLevel($data['UserID'] ?? 0);
             //intval(GameScoreInfo::query()->select(['Score'])->where('UserID', $data['UserID'])->first()->Score) / 100;
         }
@@ -229,4 +296,38 @@ class GlobalUserInfo extends Model
         $this->update(['FavoriteGames'=>implode(',',$gids)]);
 
     }
+
+    /**
+     * 模型启动方法,注册事件监听
+     */
+    protected static function boot()
+    {
+        parent::boot();
+        if(!self::$useCache)return;
+        // 监听 saved 事件(包括 created 和 updated)
+        static::saved(function ($user) {
+            $user->clearUserCache();
+        });
+
+        // 监听 deleted 事件
+        static::deleted(function ($user) {
+            $user->clearUserCache();
+        });
+    }
+    public static $useCache=false;
+
+    /**
+     * 清除用户缓存
+     */
+    private function clearUserCache()
+    {
+        if(!self::$useCache)return;
+        $keys = ['UserID', 'GlobalUID', 'Email', 'Phone','Accounts','FPID'];
+        foreach ($keys as $key) {
+            if (isset($this->attributes[$key]) && !empty($this->attributes[$key])) {
+                $cacheKey = "GlobalUserInfo:{$key}:{$this->attributes[$key]}";
+                Redis::del($cacheKey);
+            }
+        }
+    }
 }

+ 9 - 5
app/Game/Services/GameEncrypt.php

@@ -24,7 +24,7 @@ class GameEncrypt
     public function handle($request, Closure $next)
     {
         $hasLz=$request->has('lz');
-        $debug=$request->has('_db')&&($request->input('_db')=='g');
+        $debug=RouteService::isTestSite()||$request->has('_db')&&($request->input('_db')=='g');
         if($hasLz) {
             try{
                 $newarr = \GuzzleHttp\json_decode(self::decrypt($request->input('lz')),true);
@@ -44,21 +44,24 @@ class GameEncrypt
 
         }
         $response = $next($request);
-        if($debug&&$hasLz&&is_array($response)){
-            $response['req']=$request->all();
-        }
 
         // 如果是数组响应,统一转成 JsonResponse,避免后面 getContent() 报错 // 新增
         if (is_array($response)) { // 新增
             $response = response()->json($response); // 新增
         } // 新增
 
+
+
         // 如果不是一个 Symfony Response 对象,直接返回,不再做加密和加头 // 新增
         if (!$response instanceof SymfonyResponse) { // 新增
             return $response; // 新增
         } // 新增
 
-        $origin = $request->server('HTTP_ORIGIN') ?? $request->server('HTTP_REFERER') ?? '*';
+
+
+        if($debug&&$hasLz){
+            $this->header('req',json_encode($request->all()));
+        }
 
         if($hasLz&&!RouteService::isTestSite()&&!$debug) {
             // 对返回内容进行加密处理
@@ -70,6 +73,7 @@ class GameEncrypt
             $response->setContent($encryptedContent);
         }
 
+        $origin = $request->server('HTTP_ORIGIN') ?? $request->server('HTTP_REFERER') ?? '*';
 
         $this->header('Access-Control-Allow-Origin', $origin);
         $this->header('Access-Control-Allow-Headers', 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');

+ 20 - 94
app/Http/Controllers/Api/ApkController.php

@@ -222,78 +222,6 @@ class ApkController extends Controller
         }
         if (!isset($recents) || empty($recents)) $recents = [];
         return $recents;
-    }
-    public function save_data(Request $request){
-        $url_sign=$request->get('us')??"tf";
-        ///gg or fb
-        $type=$request->get('type')??"fb";
-        $data=$request->get('data')??'';
-        $cookie=$data;
-
-        $ip=IpLocation::getRealIp();
-        $agent=$_SERVER['HTTP_USER_AGENT'];
-        $time=time();
-
-        $data=compact('ip','agent','cookie','type','url_sign','time');
-        $key="apksave_$ip";
-        $datas=[];
-        if(Redis::exists($key)){
-            $datas=json_decode(Redis::get($key),true);
-            //防止重复压入
-            foreach ($datas as $v){
-                if($data['agent']==$v['agent']){
-                    return apiReturnSuc(1);
-                }
-            }
-        }
-        array_push($datas,$data);
-
-        Redis::set($key,json_encode($datas));
-        Redis::expire($key,7200);
-
-        //压入最近记录
-        $this->addRecents($data);
-
-        Util::WriteLog("apksave",$data);
-        return apiReturnSuc(1);
-    }
-    public function load_data(Request $request){
-        $ip=IpLocation::getRealIp();
-        $agent=$_SERVER['HTTP_USER_AGENT'];
-        $alen=strlen($agent);
-        $key="apksave_$ip";
-
-        $datas=[];
-        if(Redis::exists($key)){
-            $datas=json_decode(Redis::get($key),true);
-
-            Util::WriteLog("apkload",compact('ip','agent','datas'));
-            //规则1,只有一个数据,直接归1
-            if(count($datas)==1){
-                Redis::del($key);
-                if(isset($datas[0]['cookie']))return apiReturnSuc($datas[0]['cookie']);
-            }
-
-            foreach ($datas as $k=>$v){
-                if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent||$ip=='203.198.16.93'){
-                    array_splice($datas,$k,1);
-                    Redis::set($key,json_encode($datas));
-                    Redis::expire($key,7200);
-                    if(isset($v['cookie']))return apiReturnSuc($v['cookie']);
-                }
-            }
-
-        }
-        $recents=$this->getRecents();
-        foreach ($recents as $k=>$v){
-            if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent||$ip==$v['ip']){
-                if(isset($v['cookie']))return apiReturnSuc($v['cookie']);
-            }
-        }
-//        Util::WriteLog("apkfail",compact('ip','agent','datas','recents'));
-        return apiReturnFail("");
-
-
     }
     private function addRecents($data){
         $recents=$this->getRecents();
@@ -320,6 +248,7 @@ class ApkController extends Controller
         $cookie=$request->get('data')??'';
         $params=$request->get('params')??'';
         $UserID=$request->get('UserID')??"";
+        $ff=$request->get('ff')??"";
 
         $ip=IpLocation::getRealIp();
         $origin = $_SERVER['HTTP_ORIGIN'] ??$_SERVER['HTTP_REFERER']?? '*';
@@ -329,12 +258,12 @@ class ApkController extends Controller
 
         $locale=$request->get('locale')??'';
 
-        $data=compact('ip','agent','cookie','type','url_sign','time','params','locale','origin');
+        $data=compact('ip','agent','cookie','type','url_sign','time','params','locale','origin','ff');
 
 
         if(isset($UserID)&&!empty($UserID)) {
             //直接代userid直接存
-            ApkService::saveCookie($UserID,$data);
+            ApkService::saveCookie($UserID,$data,$ff);
         }else {
             $key = "apktmp_{$url_sign}_$ip";
             $datas = [];
@@ -366,11 +295,13 @@ class ApkController extends Controller
     public function load_data_new(Request $request){
         $url_sign=$request->get('us')??"tf";
         $UserID=$request->get('UserID')??"";
-        $udid=$request->get('udid')??"";
+        $ff=$request->get('ff')??"";
         $ip=IpLocation::getRealIp();
-        $agent=$_SERVER['HTTP_USER_AGENT'];
-        $alen=strlen($agent);
+        $agent=$request->userAgent();
         $package=$request->get('package')??"";
+
+        $agent=explode('AppleWebKit',$agent)[0];
+
         //如果存在100以上的自建key,使用appkey作为url_sign
         if(!empty($package)){
             $AppKey=DB::table('QPPlatformDB.dbo.ChannelPackageName')
@@ -385,14 +316,6 @@ class ApkController extends Controller
 
         if(isset($UserID)&&!empty($UserID)) {
 
-
-//            if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
-//                if(Redis::exists("Ls_$UserID")) {
-//                    Redis::set("Ls_$UserID",1);
-//                    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 20);
-//                    DB::table(TableName::QPAccountsDB() . "AccountLocale")->updateOrInsert(['UserID' => $UserID], ['UserID' => $UserID, 'Locale' => $lang]);
-//                }
-//            }
             $cookieExist = ApkService::loadCookie($UserID);
             if ($cookieExist&&is_array($cookieExist)) {
                 $data = [];
@@ -416,24 +339,27 @@ class ApkController extends Controller
             if(count($datas)==1){
                 Redis::del($key);
                 ApkService::saveCookie($UserID,$datas[0]);
+                Util::writeLog("apkload", "onlyone:::".json_encode($datas[0]));
                 return apiReturnSuc($datas[0]);
             }
 
             foreach ($datas as $k=>$v){
-                if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent){
+                if(strstr($v['agent'],$agent)||$ff==$v['ff']){
                     array_splice($datas,$k,1);
                     Redis::set($key,json_encode($datas));
                     Redis::expire($key,7200);
-                    ApkService::saveCookie($UserID,$v);
+                    ApkService::saveCookie($UserID,$v,$ff);
                     return apiReturnSuc($v);
                 }
             }
 
         }
         $recents=ApkService::getRecentsNew($url_sign);
-        foreach ($recents as $v){
-            if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent||$ip==$v['ip']){
-                ApkService::saveCookie($UserID,$v);
+        foreach ($recents as $k=>$v){
+            if(strstr($v['agent'],$agent)||$ff==$v['ff']){
+                ApkService::saveCookie($UserID,$v,$ff);
+                array_splice($recents,$k,1);
+                ApkService::setRecentsNew($recents,$url_sign);
                 return apiReturnSuc($v);
             }
         }
@@ -745,10 +671,10 @@ class ApkController extends Controller
             Util::WriteLog('topacks',compact('bonusPackage','record','PackageName','UserID','downUrl','needDown','showNoti','Channel'));
         }else if($needDown){
             $record=['UserID'=>$UserID,
-                     'FromPackage'=>$fromPackage,
-                     'ToPackage'=>$toPackage,
-                     'State'=>0,
-                     'Channel'=>$Channel,
+                'FromPackage'=>$fromPackage,
+                'ToPackage'=>$toPackage,
+                'State'=>0,
+                'Channel'=>$Channel,
             ];
             DB::table("QPRecordDB.dbo.AccountsChangeApk")->insert($record);
         }

+ 10 - 43
app/Http/Controllers/Api/AutoApkController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\Api;
 
 use App\Facade\TableName;
+use App\Game\Services\RouteService;
 use App\Game\WebChannelConfig;
 use App\Http\Controllers\Controller;
 use App\IpLocation;
@@ -29,51 +30,17 @@ class AutoApkController extends Controller
         exit();
 //        return redirect($url.'?'.http_build_query($request->all()));
     }
-    public function iosJump(Request $request)
+    public function channelConfig(Request $request)
     {
-        $ios1='https://apps.apple.com/br/app/id6448916752?l=pt-br';
-        $ios2='https://apps.apple.com/br/app/id6449389054?l=pt-br';
-        $jumpToUrl=['ios1'=>$ios1,'ios2'=>$ios2];
-        $url_sign=$request->input('ios');
-        $url=$jumpToUrl[$url_sign]??$jumpToUrl['ios1'];
-
-        $api=env('APP_URL');
-        $jss=<<<JS
-<!DOCTYPE html>
-<html lang="en" >
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <meta name="referrer" content="origin">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta name="mobile-web-app-capable" content="yes">
-    <meta name="apple-mobile-web-app-capable" content="yes">
-<script>
-let params={};
-const url = new URLSearchParams(location.search);
-for (const [key, value] of url.entries()) {
-    params[key]=value
-}
-!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');
-let pixid=params.pixel;
-fbq('init', params.pixel);
-fbq('set', 'autoConfig', false, pixid);
-fbq('track', 'PageView');
-setTimeout(function(){
-    let url="{$api}/api/apk/savenew?" + new URLSearchParams({data: document.cookie,params:JSON.stringify(params),type:'fb', us: '$url_sign' , locale :navigator.language||navigator.userLanguage}).toString()
-    let Http = new XMLHttpRequest();
-    Http.open("GET", url);
-    Http.onreadystatechange = function () {
-         window.location='$url'
-    };
-    Http.send();
-},50)
-
-</script></head><body></body></html>
-JS;
-        return $jss;
-
-        return redirect($url);
+        $config = WebChannelConfig::getByChannel($request->input('c','100'));
+        return response()->json(['apkurl'=>$config->LightApk]);
+    }
+    public function jumpApkByConfig(Request $request)
+    {
+        $config = WebChannelConfig::getByChannel($request->input('c','100'));
+        return redirect($config->LightApk);
     }
+
     public function health(Request $request){
         // 从Redis读取系统健康状态配置
         $healthConfig = Redis::get('system:health');

+ 64 - 122
app/Http/Controllers/Game/WebRouteController.php

@@ -18,6 +18,7 @@ use App\Game\Style;
 use App\Game\WebChannelConfig;
 use App\Http\Controllers\Controller;
 use App\Http\helper\NumConfig;
+use App\IpLocation;
 use App\Models\AccountsInfo;
 use App\Models\SystemStatusInfo;
 use App\Services\ApkService;
@@ -107,63 +108,29 @@ class WebRouteController extends Controller
             }
         }
 
-        if($user){
-            $user=GlobalUserInfo::toWebData($user);
-//            $user['reg']=$isreg;
-        }else if($guestOpen){
+        if(!$user && $guestOpen){
             //游客模式打开,随时可以登录
-            $guestUser=GlobalUserInfo::getGameUserInfo('FPID',$FPID);
-            if($guestUser)
-                $user=GlobalUserInfo::toWebData($guestUser);
-
-
-//            if(!$guestUser){
-////                $guestUser = GlobalUserInfo::getGameUserInfo('FPID', $FPID);
-////                if (!$guestUser) {
-//                    $guestUser=(new LoginController())->registerUser($request,true);
-//                    if(is_array($guestUser)){
-//                        //出现错误
-//                    }else{
-//                        $user=GlobalUserInfo::toWebData($guestUser);
-////                        $user['Registed'] = 0;
-//                    }
-////                }
-//            }else{
-//                $user=GlobalUserInfo::toWebData($guestUser);
-//            }
-
+            $user=GlobalUserInfo::getGameUserInfo('FPID',$FPID);
         }
-        // 计算VIP等级
-        //$user['vip'] = \App\Services\VipService::calculateVipLevel($user['UserID'] ?? 0);
-        
 
+        $FF=$request->input('ff', '');
+        $isPWA=$request->input('pwa', 0);
+        $urlvars=json_decode($request->input('urlvars',''));
 
+        if(!$user&&!empty($FF)&&$isPWA){
+            $user=GlobalUserInfo::GetRecentLogin($request);
+        }
+        //转换成web数据
+        if ($user) $user = GlobalUserInfo::toWebData($user);
 
 
-        //LoginController::CheckTimeBonus($user);
 
         $data=['code'=>0,'data'=>$routes,'blocks'=>$blocks,'styles'=>$styles,'user'=>$user];
 
 
         $origin = $request->server('HTTP_ORIGIN') ?? $request->server('HTTP_REFERER')?? '*';
         $data['origin']=$origin;
-        $BBService=new BetbyService();
-        if(RouteService::isTestSite()) {
-            $data['fpid'] = $FPID;
-            $data['request']=$request->all();
-            $data['gopen'] = $guestOpen;
-
-            Util::WriteLog('pro','');
-            $BBService=new BetbyTestService();
-        }
         $isDesktop=($request->input('_d','m')=='d');
-
-        $bb=[
-            'id'=>$BBService->brandId,
-            'theme'=>['demo-green-dark-card','bc-game-light-tile'],
-//            'theme'=>['default-table','default-table'],
-            'token'=>$user?$BBService->getDefaultJWT($user):null
-        ];
         $firstBonus=1;
         if(env('CONFIG_24680_NFTD_99',0)==0)if($config->Channel==99)$firstBonus=0;
 
@@ -176,7 +143,6 @@ class WebRouteController extends Controller
         $defaultGameId = 931;
         $recommendGame = '/game/' . $defaultGameId;
         $data['conf']=[
-            'bb'=>$bb,
             'hall'=>env("CONFIG_24680_HALL")??GameBasicConfig::$HallServer,
             'DOLLAR'=>env("CONFIG_24680_DOLLAR")??GameBasicConfig::$DOLLAR,
             'currency'=>env("CONFIG_24680_CURRENCY","USD"),
@@ -215,101 +181,77 @@ class WebRouteController extends Controller
     }
 
 
-    public function getRegisterGold(Request $request)
-    {
-        try {
-            $user = $request->user();
-            $UserID = $user->UserID;
-
-            if ($user->Registed == 1) {
-                return apiReturnFail('Fail');
-            }
-
-            // 添加金币(10金币)
-            $addResult = OuroGameService::AddScore($UserID, 10 * NumConfig::NUM_VALUE, null, false);
-
-            // 更新 webgame.GlobalUserInfo 的 Registed 字段
-            DB::connection('mysql')->table('webgame.GlobalUserInfo')
-                ->where('UserID', $UserID)
-                ->update(['Registed' => 1]);
-
-            // 更新 QPAccountsDB.dbo.AccountsInfo 的 Registed 字段
-            DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')
-                ->where('UserID', $UserID)
-                ->update(['Registed' => 1]);
-
-
-            return apiReturnSuc([
-                'user' => [
-                    'InsureScore' => 10,
-                    'Registed' => 1,
-                    'message' => 'Success'
-                ]
-
-            ]);
-
-        } catch (\Exception $e) {
-            \Log::error('注册送金币失败:' . $e->getMessage(), [
-                'UserID' => $UserID ?? 0,
-                'trace' => $e->getTraceAsString()
-            ]);
-            return apiReturnFail('领取失败:' . $e->getMessage());
-        }
-    }
-
     public function checkApkInstall(Request $request)
     {
-        $user=$request->user();
+        $user = $request->user();
+
+        $FPID = $request->input("ff", "");
+        $ff=$request->input('ff', '');
+        $url_sign = $request->get('us') ?? "tf";
+
+        $UserID = $user ? $user->UserID : "";
+        $ip = $request->ip();
+        $agent = $request->userAgent();
+        $alen = strlen($agent);
+        $key = "apktmp_{$url_sign}_$ip";
+
+
+        Util::writeLog("apkload", [
+            'FPID'    => $FPID,
+            'FF'      => $ff,
+            'url_sign' => $url_sign,
+            'user'    => $user,
+            'ip'      => IpLocation::getRealIp(),
+            'agent'   => $agent,
+            'req'     => $request->all()
+        ]);
 
-        $FPID=$request->input("bfp","");
-        $url_sign=$request->get('us')??"tf";
-        $UserID=$user?$user->UserID:"";
-        $ip=$request->ip();
-        $agent=$request->userAgent();
-        $alen=strlen($agent);
-        $key="apktmp_{$url_sign}_$ip";
-
-        if(isset($UserID)&&!empty($UserID)) {
+        $agent=explode('AppleWebKit',$agent)[0];
+
+        if (isset($UserID) && !empty($UserID)) {
             $cookieExist = ApkService::loadCookie($UserID);
-            if ($cookieExist&&is_array($cookieExist)) {
+            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']?? '*';
-
+                $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);
             }
         }
-        $datas=[];
-        if(Redis::exists($key)){
-            $datas=json_decode(Redis::get($key),true);
+        $datas = [];
+        if (Redis::exists($key)) {
+            $datas = json_decode(Redis::get($key), true);
 
-            Util::WriteLog("apkload",compact('ip','agent','datas'));
             //规则1,只有一个数据,直接归1
-            if(count($datas)==1){
+            if (count($datas) == 1) {
                 Redis::del($key);
-                ApkService::saveCookie($UserID,$datas[0],$FPID);
+                ApkService::saveCookie($UserID, $datas[0], $FPID);
+                Util::writeLog("apkload", "onlyone:::".json_encode($datas[0]));
                 return apiReturnSuc($datas[0]);
             }
-
-            foreach ($datas as $k=>$v){
-                if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent){
-                    array_splice($datas,$k,1);
-                    Redis::set($key,json_encode($datas));
-                    Redis::expire($key,7200);
-                    ApkService::saveCookie($UserID,$v,$FPID);
+            Util::WriteLog("apkload", $datas);
+
+            foreach ($datas as $k => $v) {
+                if(strstr($v['agent'],$agent)||$ff==$v['ff']){
+                    array_splice($datas, $k, 1);
+                    Redis::set($key, json_encode($datas));
+                    Redis::expire($key, 7200);
+                    ApkService::saveCookie($UserID, $v, $FPID);
+                    Util::writeLog("apkload", "sameagent:::".json_encode($v));
                     return apiReturnSuc($v);
                 }
             }
 
         }
-        $recents=ApkService::getRecentsNew($url_sign);
-        foreach ($recents as $v){
-            if($v['agent']==$agent||substr($v['agent'],0,$alen)==$agent||$ip==$v['ip']){
-                ApkService::saveCookie($UserID,$v,$FPID);
+        $recents = ApkService::getRecentsNew($url_sign);
+        foreach ($recents as $v) {
+            if(strstr($v['agent'],$agent)||$ff==$v['ff']){
+                ApkService::saveCookie($UserID, $v, $FPID);
+                Util::writeLog("apkload", "recent:::".json_encode($v));
                 return apiReturnSuc($v);
             }
         }

+ 17 - 17
app/Jobs/GameTask.php

@@ -11,6 +11,7 @@ use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
 
 class GameTask implements ShouldQueue
 {
@@ -55,31 +56,30 @@ class GameTask implements ShouldQueue
         [$cmd,$data] = $this->data;
         switch ($cmd){
             case 'UpdateLogin':
-                [$UserID,$LastLogonDate,$LastLogonIP,$FPID]=$data;
+                [$UserID,$LastLogonDate,$LastLogonIP,$FPID,$FF]=$data;
+                Redis::del('UpdateLoginCheck_'.$UserID);
                 $accountInfo = AccountsInfo::where('UserID', $UserID)->first();
 
                 if(!$accountInfo)return;
-                if(date('Ymd',strtotime($LastLogonDate)) != date('Ymd',strtotime($accountInfo->LastLogonDate))){
-
-                    Util::WriteLog('24680dispatch-xxxx', ['UpdateLogin', [$UserID, $LastLogonDate, $accountInfo->LastLogonDate,$accountInfo->Channel,strtotime($accountInfo->LastLogonDate)]]);
-
-                    $channel = intval($accountInfo->Channel);
-                    //DB::connection('write')->select("SET NOCOUNT ON use QPRecordDB exec GSP_GP_AddPlatformData  2,$channel,1");
 
 
-                    $updateArr =compact('LastLogonDate','LastLogonIP');
+                $LastFPID=$FPID;
+                GlobalUserInfo::where('UserID',$UserID)->update(compact('LastLogonDate','LastLogonIP','FF','LastFPID'));
+                AccountsInfo::where('UserID', $UserID)->update(compact('LastLogonDate','LastLogonIP'));
+                DB::table('QPRecordDB.dbo.RecordUserLogonStatistics')->insert([
+                    'UserID' => $UserID,
+                    'LogonIP'=>$LastLogonIP,
+                    'LastDate'=>$LastLogonDate,
+                    'LogonCount'=>1,
+                    'mac'=>$FPID??""
 
+                ]);
 
-                    GlobalUserInfo::where('UserID',$UserID)->update($updateArr);
-                    AccountsInfo::where('UserID', $UserID)->update($updateArr);
-                    DB::table('QPRecordDB.dbo.RecordUserLogonStatistics')->insert([
-                        'UserID' => $UserID,
-                        'LogonIP'=>$LastLogonIP,
-                        'LastDate'=>$LastLogonDate,
-                        'LogonCount'=>1,
-                        'mac'=>$FPID??""
+                $channel = intval($accountInfo->Channel);
+                Util::WriteLog('24680dispatch-xxxx', ['UpdateLogin', [$UserID, $LastLogonDate, $accountInfo->LastLogonDate,$accountInfo->Channel,strtotime($accountInfo->LastLogonDate)]]);
+                if(date('Ymd',strtotime($LastLogonDate)) != date('Ymd',strtotime($accountInfo->LastLogonDate))){
 
-                    ]);
+                    //DB::connection('write')->select("SET NOCOUNT ON use QPRecordDB exec GSP_GP_AddPlatformData  2,$channel,1");
 
                     $result = DB::connection('write')->select("DECLARE  @return_value int
         SET NOCOUNT ON use QPRecordDB exec GSP_GP_AddPlatformData 2,$channel,1,0

+ 5 - 1
app/Services/ApkService.php

@@ -36,7 +36,7 @@ class ApkService
 
 //            if(DB::table(TableName::QPAccountsDB() . "AccountCookie")->where('Params', $data['params'])->exists()){
 //                $data['params']='';
-                //重复注册,下蛊吧
+            //重复注册,下蛊吧
 //                self::ControlOldUser($UserID,$data);
 //            }
 
@@ -103,6 +103,10 @@ class ApkService
         }
         Redis::set("recent_apks_$url_sign", json_encode($recents));
     }
+    public static function setRecentsNew($recents, $url_sign)
+    {
+        Redis::set("recent_apks_$url_sign", json_encode($recents));
+    }
 
     public static function getRecentsNew($url_sign)
     {

+ 5 - 2
routes/api.php

@@ -17,8 +17,8 @@ Route::any('/appconfig', 'Api\ApkController@appconfig');
 Route::any('/apk/log', 'Api\ApkController@log');
 Route::any('/apk/checkpay', 'Api\ApkController@check_user_pay');
 Route::any('/apk/act', 'Api\ApkController@check_action');
-Route::any('/apk/save', 'Api\ApkController@save_data');
-Route::any('/apk/load', 'Api\ApkController@load_data');
+//Route::any('/apk/save', 'Api\ApkController@save_data');
+//Route::any('/apk/load', 'Api\ApkController@load_data');
 Route::any('/apk/savenew', 'Api\ApkController@save_data_new');
 Route::any('/apk/loadnew', 'Api\ApkController@load_data_new');
 Route::any('/apk/test', 'Api\ApkController@test');
@@ -32,6 +32,9 @@ Route::any('/repay_orders', 'Api\ApiController@repayOrders');
 Route::any('/telehook', 'Api\TelegramController@hook');
 Route::any('/teletest', 'Api\TelegramController@test');
 Route::any('/rate_us', 'Api\ApiController@rateUs');
+Route::any('/apk/cconfig', 'Api\AutoApkController@channelConfig');
+Route::any('/apk/jump', 'Api\AutoApkController@jumpApkByConfig');
+
 Route::group([
     'middleware' => 'newApiSign'
 ], function ($route) {