加固-11(P0-09): 修复 agent 端 tckm.html 卡密管理页前后端契约断裂(N2)

代理端卡密管理页(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)验证通过
This commit is contained in:
youpaishidifu
2026-10-10 13:26:15 +08:00
parent a688a24993
commit 98dd2d4ebe
+14 -7
View File
@@ -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('您的卡密已就绪,<a href="../ajax.php?mod=download&sign='.$sign.'">点击这里下载卡密</a>');
// 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('您的卡密已就绪,<a href="../ajax.php?mod=download&sign='.$sign.'">点击这里下载卡密</a>');
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':