From 98dd2d4ebef9d89c2ea7f75e3eebab0e28cd100c Mon Sep 17 00:00:00 2001 From: youpaishidifu <1@ypshidifu.cn> Date: Sat, 10 Oct 2026 13:26:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=9B=BA-11(P0-09):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20agent=20=E7=AB=AF=20tckm.html=20=E5=8D=A1=E5=AF=86?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E5=89=8D=E5=90=8E=E7=AB=AF=E5=A5=91?= =?UTF-8?q?=E7=BA=A6=E6=96=AD=E8=A3=82=EF=BC=88N2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代理端卡密管理页(agent/html/tckm.html)两个核心功能不可用: ① 状态开关 POST mod=fidkeystatus —— agent/ajax.php 只有复制自 admin 的 case 'tckeystatus'(admin 端 tckm.html 用的名字),UI 永远发不到, 落到文件尾 die('啊嘞嘞???'),开关失效; ② 导出/清空按钮 POST mod=FidKeyOperation 且 dataType:json,但服务端 5 个分支全部 die() 纯文本("您的卡密已就绪…"/"成功删除N行"), jQuery JSON 解析必失败,按钮全部报错。 修复(对齐同页 KeyOperation 既有的 makejson JSON 契约): - agent/ajax.php case 'tckeystatus' 改名 'fidkeystatus'(对齐 UI 契约名, keyid 强制 (int),保持 aid 作用域与 textbooltonum 语义;admin 端 tckeystatus 不受影响) - FidKeyOperation ExportNoUse/ExportAll → die(makejson(1,'success',array('sign'=>...))) (UI code===1 分支取 data.sign 走 download 会话下载) - DelNoUse/DelUse/DelAll → die(makejson(2,'success',array('nums'=>...))) (UI code===2 分支提示影响行数) - FidKeyOperation 补 default 分支:未知操作显式返回 makejson(-1), 不再静默落到文件尾「啊嘞嘞???」 回归(P0-09 22 项全 PASS,8082 内置服务器): - fidkeystatus:开关开/关正确落库(status 1<->0);他人 keyid 被拒; 旧名 tckeystatus 在 agent 端确认已不存在 - ExportNoUse/ExportAll:JSON code=1+sign,download 会话下载内容 正确(未用/全部卡密) - DelUse/DelNoUse:JSON code=2+nums,行数正确 - 未知操作:JSON code=-1 - 完整数据链(app->grade->fid->agent->creatfidkey)验证通过 --- agent/ajax.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/agent/ajax.php b/agent/ajax.php index e162c79..7c7c78c 100644 --- a/agent/ajax.php +++ b/agent/ajax.php @@ -1062,8 +1062,10 @@ switch ($_GET['mod']) { die(json_encode(array('code'=>'1','sign'=>$sign,'keys'=>'您的卡密如下:'.$keylist))); } break; - case 'tckeystatus': - if(!$db->update('sq_fidkey',array('ID'=>$_POST['keyid'],'aid'=>$_SESSION['agent_id']),'AND',array('status'=>textbooltonum($_POST['status'])))){ + case 'fidkeystatus': + // P0-09: 原 case 名 tckeystatus 与代理端 UI 契约(agent/html/tckm.html 发 mod=fidkeystatus)错位, + // 状态开关一直落到文件尾「啊嘞嘞???」而失效;改名对齐,保持 aid 作用域与 textbooltonum 语义 + if(!$db->update('sq_fidkey',array('ID'=>(int)$_POST['keyid'],'aid'=>$_SESSION['agent_id']),'AND',array('status'=>textbooltonum($_POST['status'])))){ die('更新失败'.$db->geterror()); }else{ die('成功'); @@ -1171,7 +1173,9 @@ switch ($_GET['mod']) { } $sign = rand_str(32); $_SESSION['cards'][$sign] = $keylist; - die('您的卡密已就绪,点击这里下载卡密'); + // P0-09: tckm.html 以 dataType:json 消费本模块(code===1 分支取 data.sign), + // 原纯文本 die 导致 jQuery JSON 解析必失败;对齐 KeyOperation 的 makejson 契约 + die(makejson(1, 'success', array('sign' => $sign))); break; case 'ExportAll': $result = $db->select_all_row('sq_fidkey','kami',array('fid'=>$_POST['fid'],'aid'=>$_SESSION['agent_id'],'status'=>1)); @@ -1181,21 +1185,24 @@ switch ($_GET['mod']) { } $sign = rand_str(32); $_SESSION['cards'][$sign] = $keylist; - die('您的卡密已就绪,点击这里下载卡密'); + die(makejson(1, 'success', array('sign' => $sign))); break; case 'DelNoUse': $db->delete('sq_fidkey',array('usetime'=>0,'fid'=>$_POST['fid'],'status'=>1,'aid'=>$_SESSION['agent_id']),'AND'); - die('成功删除'.(int)$db->affected_num().'行'); + die(makejson(2, 'success', array('nums' => (int)$db->affected_num()))); break; case 'DelUse': // P0-06: fid 裸拼进 DELETE SQL,强制整型 $db->delete('sq_fidkey', '`usetime` > 0 AND `fid` = '.(int)$_POST['fid'].' AND `aid` = '.(int)$_SESSION['agent_id'].' AND `status` = 1','AND'); - die('成功删除'.(int)$db->affected_num().'行'); + die(makejson(2, 'success', array('nums' => (int)$db->affected_num()))); break; case 'DelAll': $db->delete('sq_fidkey',array('fid'=>$_POST['fid'],'aid'=>$_SESSION['agent_id']),'AND'); - die('成功删除'.(int)$db->affected_num().'行'); + die(makejson(2, 'success', array('nums' => (int)$db->affected_num()))); break; + // P0-09: 未知操作显式返回 JSON 错误,不再静默落到文件尾「啊嘞嘞???」(dataType:json 必解析失败) + default: + die(makejson(-1, '未知操作:'.$_POST['operation'])); } break; case 'KeyOperation':