Browse Source

兼容修复

Tree 1 day ago
parent
commit
3535b81ea3

+ 162 - 0
app/Http/Controllers/Api/ApiController.php

@@ -39,6 +39,168 @@ class ApiController extends Controller
     public function log(Request $request){
         Util::WriteLog("log",$request->all());
     }
+    public function weblog(Request $request){
+        Util::WriteLog("weblog",$request->all());
+        return "OK";
+    }
+    public function sendfbevent(Request $request){
+        Util::WriteLog("sendfbevent",$request->all());
+        return "OK";
+    }
+    public function sendggevent(Request $request){
+        Util::WriteLog("sendggevent",$request->all());
+        return "OK";
+    }
+    public function inith5client(Request $request){
+        Util::WriteLog("inith5client",$request->all());
+        return "OK";
+    }
+    public function pushSubscribe(Request $request)
+    {
+        //{"fingerprint":"","userid":0,"subscibe_info":"{\"endpoint\":\"https://fcm.googleapis.com/fcm/send/eg7A5CJ_pyA:APA91bEZYZd92knXEH-qRzinP6H7kguaVDwmAvDjCFgwCPW-BMKOraXaQxBf5ONP5vMJu0jmZLOn0_f0wONxlmTOu3yBVmBlkQBFY4XrDofNhGJwnVxKbNh3sxWFqvptmCo97St9ZPSe\",\"expirationTime\":null,\"keys\":{\"p256dh\":\"BB8s_jUbX-0UPuy3aGLLxYbbNNdA0aEu7awsmK-Bxe0ZLX5lPItWHpRHVtTfxQnXDwVflEhbG6qnUSBLQxiLduA\",\"auth\":\"UnYCllcPM7nMmjj4XLXxZQ\"}}","channel":"100","web_site":"https://dev.winus777.com/pwa/landingpage2?pixel=2775919695949438&campaign=%7B%7Bcampaign.name%7D%7D+%28%7B%7Bcampaign.id%7D%7D%29&adgroup=%7B%7Badset.name%7D%7D+%28%7B%7Badset.id%7D%7D%29&creative=%7B%7Bad.name%7D%7D+%28%7B%7Bad.id%7D%7D%29&fbclid=","platform":"Android","installed":0}
+//        {"publicKey":"BEKE0qlrGMp-XyUHppeFMscDiJg-sL98jr4b51glbvicHnD69oNZ9JiLHKIQ9_3K0ImSZlo0Ggw-RE3FxYOUwJo","privateKey":"VPFE6_2QL-pFHENBuhbp2WH-8DeBbK92WIwZg6BPJtc"}
+        try {
+            $fpid = $request->input('fingerprint');
+            $userid = $request->input('userid');
+            $subscibe_info = $request->input('subscibe_info');
+            $channel = $request->input('channel');
+            $web_site = $request->input('web_site');
+            $platform = $request->input('platform');
+            $installed = $request->input('installed', 0);
+
+            // 验证必填字段
+            if (empty($fpid) || empty($subscibe_info)) {
+                return apiReturnFail(__('messages.api.common.missing_info'));
+            }
+
+            // 解析订阅信息
+            if (is_string($subscibe_info)) {
+                $subscibe_info = json_decode($subscibe_info, true);
+                if (json_last_error() !== JSON_ERROR_NONE) {
+                    return apiReturnFail('Invalid subscription info format');
+                }
+            }
+
+            // 提取endpoint作为唯一标识
+            $endpoint = $subscibe_info['endpoint'] ?? '';
+            if (empty($endpoint)) {
+                return apiReturnFail('Missing endpoint in subscription info');
+            }
+
+            // 检查是否已存在该订阅
+            $existing = DB::table('QPAccountsDB.dbo.WebPushSubscriptions')
+                ->where('Endpoint', $endpoint)
+                ->first();
+
+            $data = [
+                'FPID' => $fpid,
+                'UserID' => $userid ?? 0,
+                'SubscriptionInfo' => json_encode($subscibe_info),
+                'Endpoint' => $endpoint,
+                'Channel' => $channel ?? '',
+                'WebSite' => $web_site ?? '',
+                'Platform' => $platform ?? 'Other',
+                'Installed' => $installed,
+                'Status' => 1, // 1=激活, 0=禁用
+                'UpdatedAt' => date('Y-m-d H:i:s')
+            ];
+
+            if ($existing) {
+                // 更新现有订阅
+                DB::table('QPAccountsDB.dbo.WebPushSubscriptions')
+                    ->where('ID', $existing->ID)
+                    ->update($data);
+
+                return apiReturnSuc(['message' => 'Subscription updated', 'id' => $existing->ID]);
+            } else {
+                // 创建新订阅
+                $data['CreatedAt'] = date('Y-m-d H:i:s');
+                $id = DB::table('QPAccountsDB.dbo.WebPushSubscriptions')->insertGetId($data);
+
+                return apiReturnSuc(['message' => 'Subscription created', 'id' => $id]);
+            }
+
+        } catch (\Exception $e) {
+            Log::error('Push subscribe error: ' . $e->getMessage(), [
+                'request' => $request->all(),
+                'trace' => $e->getTraceAsString()
+            ]);
+            return apiReturnFail('Subscription failed: ' . $e->getMessage());
+        }
+    }
+
+    /**
+     * 上传订阅状态
+     * 记录用户对Web Push订阅的响应结果
+     */
+    public function uploadSubscribeState(Request $request)
+    {
+        try {
+            $userid = $request->input('userid', 0);
+            $result = $request->input('result'); // 1=接受, 2=未接受, 3=不支持, 4=拒绝
+            $machineserial = $request->input('machineserial'); // FPID
+            $ish5 = $request->input('ish5', 0); // 0=app(w2a), 1=h5(pwa)
+            $p_source = $request->input('p_source'); // channel
+
+            // 验证必填字段
+            if (empty($machineserial) || !in_array($result, [1, 2, 3, 4])) {
+                return apiReturnFail(__('messages.api.common.missing_info'));
+            }
+
+            // 状态映射
+            $statusMap = [
+                1 => 'accepted',    // 接受
+                2 => 'not_accepted', // 未接受
+                3 => 'not_supported', // 不支持
+                4 => 'denied'       // 拒绝
+            ];
+
+            $status = $statusMap[$result] ?? 'unknown';
+
+            // 检查是否已存在记录
+            $existing = DB::table('QPAccountsDB.dbo.WebPushSubscribeStates')
+                ->where('FPID', $machineserial)
+                ->where('UserID', $userid)
+                ->orderBy('ID', 'desc')
+                ->first();
+
+            $data = [
+                'UserID' => $userid,
+                'FPID' => $machineserial,
+                'Result' => $result,
+                'Status' => $status,
+                'IsH5' => $ish5,
+                'Channel' => $p_source ?? '',
+                'UserAgent' => substr($request->header('user-agent') ?? '', 0, 500),
+                'ClientIP' => $request->ip(),
+                'UpdatedAt' => date('Y-m-d H:i:s')
+            ];
+
+            if ($existing) {
+                // 如果状态没有变化,只更新时间
+                if ($existing->Result == $result) {
+                    DB::table('QPAccountsDB.dbo.WebPushSubscribeStates')
+                        ->where('ID', $existing->ID)
+                        ->update(['UpdatedAt' => date('Y-m-d H:i:s')]);
+
+                    return apiReturnSuc(['message' => 'State updated', 'id' => $existing->ID]);
+                }
+            }
+
+            // 插入新记录
+            $data['CreatedAt'] = date('Y-m-d H:i:s');
+            $id = DB::table('QPAccountsDB.dbo.WebPushSubscribeStates')->insertGetId($data);
+
+            return apiReturnSuc(['message' => 'State recorded', 'id' => $id, 'status' => $status]);
+
+        } catch (\Exception $e) {
+            Log::error('Upload subscribe state error: ' . $e->getMessage(), [
+                'request' => $request->all(),
+                'trace' => $e->getTraceAsString()
+            ]);
+            return apiReturnFail('Upload state failed: ' . $e->getMessage());
+        }
+    }
 
     public function checkLocale(Request $request){
         $UserID=$request->input("UserID");

+ 9 - 2
app/Http/Controllers/Game/ActivityController.php

@@ -1237,8 +1237,15 @@ class ActivityController extends Controller
                 }
             } else {
                 // 第二轮及之后:只统计本轮新增部分(再充值100、再下注500)
-                $baseRecharge = $taskData['stage3_recharge_base'] ?? $rechargeTotal;
-                $baseBet      = $taskData['stage3_bet_base'] ?? $totalBetAmount;
+
+                // 兼容老数据:如果还没有基准值,第一次进入新逻辑时将当前总充值/总流水作为基准
+                if (!isset($taskData['stage3_recharge_base']) || !isset($taskData['stage3_bet_base'])) {
+                    $taskData['stage3_recharge_base'] = $rechargeTotal-100;
+                    $taskData['stage3_bet_base']      = $totalBetAmount-300;
+                }
+
+                $baseRecharge = $taskData['stage3_recharge_base'];
+                $baseBet      = $taskData['stage3_bet_base'];
 
                 $taskData['stage3_recharge_progress'] = max(0, $rechargeTotal - $baseRecharge);
                 $taskData['stage3_bet_progress']      = max(0, $totalBetAmount - $baseBet);