加固-12(P0-10): fracture 折率 0 折免费开卡封堵(N3 两端校验 + N4 死代码清理)
fracture 折率若为 0/负数,代理端金额 = price × num × fracture 恒 ≤0, 余额检查形同虚设,零余额代理可无限免费开卡/开商品(2024 引入的新业务风险 N3); creatfidkey 中 N4 复制粘贴死代码(金额检查误写成第二次数量检查,永远不可达) 正是该隐患的源头。 修复(入库端 + 使用端双保险): - admin/ajax.php addgrade:grade_present 必须为 >0 的数字,否则拒绝入库 - admin/ajax.php changegrade:mod=fracture 修改时同规则下限校验(防后台改出 0 折) - agent/ajax.php creatfidkey:levelinfo 取出后 fracture<=0 直接拒绝 (code=-5「代理等级折率配置异常」),堵住 0 折存量数据; 同时删除 N4 死代码(误复制的数量检查,提示语为"卡密金额") - agent/ajax.php buy_submit(商品购买):同位置同规则折率下限守卫 回归(P0-10 22 项全 PASS,8082 内置服务器): - addgrade:0/-0.5/非数字 全部拒绝且未入库;0.85 正常 - changegrade:fracture=0/非数字 拒绝;0.9 正常落库 - 折率=0 存量等级:creatfidkey 拒绝(code=-5),无卡密生成; buy_submit 拒绝(code=-5) - 折率=0.9 且余额 0:creatfidkey 余额不足被拒(code=-10); buy_submit 余额不足被拒(原 0 折下此处直接免费成功/下单) - 有余额成功路径无回归:creatfidkey 正常生成 2 张、余额 100->98.2; buy_submit 正常下单,订单 paymoney=0.9(折率正确计入) - 已知残留(另行排期):creatkey/creatfidkey/buyagent 的扣款与插入 仍无事务(插入失败钱照扣,2019 遗留)
This commit is contained in:
+10
-1
@@ -472,6 +472,10 @@ switch ($_GET['mod']){
|
|||||||
if (empty($_POST['gid'])){
|
if (empty($_POST['gid'])){
|
||||||
die('等级ID不能为空');
|
die('等级ID不能为空');
|
||||||
}
|
}
|
||||||
|
// P0-10: 折率修改下限校验(同 addgrade,防 0 折免费开卡)
|
||||||
|
if ($_POST['mod'] == 'fracture' && (!is_numeric($_POST['value']) || (float)$_POST['value'] <= 0)){
|
||||||
|
die('折率必须为大于0的数字');
|
||||||
|
}
|
||||||
if (!$db->update('sq_level',array('ID'=>$_POST['gid']),'AND',array($_POST['mod']=>$_POST['value']))){
|
if (!$db->update('sq_level',array('ID'=>$_POST['gid']),'AND',array($_POST['mod']=>$_POST['value']))){
|
||||||
die('修改失败'.$db->geterror());
|
die('修改失败'.$db->geterror());
|
||||||
}else{
|
}else{
|
||||||
@@ -609,7 +613,12 @@ switch ($_GET['mod']){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'addgrade':
|
case 'addgrade':
|
||||||
if(!$db->insert_back_id('sq_level',array('lname'=>$_POST['grade_name'],'appid'=>$_POST['app'],'fracture'=>$_POST['grade_present'],'price'=>$_POST['grade_price'],'discount'=>'1'))){
|
// P0-10: 折率入库端校验(必须 >0 的数字)——零/负折率会使代理端
|
||||||
|
// spendmoney 恒 ≤0、余额检查形同虚设(0 折免费开卡)
|
||||||
|
if (!is_numeric($_POST['grade_present']) || (float)$_POST['grade_present'] <= 0){
|
||||||
|
die('折率必须为大于0的数字');
|
||||||
|
}
|
||||||
|
if(!$db->insert_back_id('sq_level',array('lname'=>$_POST['grade_name'],'appid'=>$_POST['app'],'fracture'=>(float)$_POST['grade_present'],'price'=>$_POST['grade_price'],'discount'=>'1'))){
|
||||||
die('添加失败:'.$db->geterror());
|
die('添加失败:'.$db->geterror());
|
||||||
}else{
|
}else{
|
||||||
die('代理级别添加成功!');
|
die('代理级别添加成功!');
|
||||||
|
|||||||
+9
-3
@@ -431,6 +431,10 @@ switch ($_GET['mod']) {
|
|||||||
if (!$levelinfo = $db->select_first_row('sq_level', '*', array('ID' => $agentinfo['levelid']), 'AND')) {
|
if (!$levelinfo = $db->select_first_row('sq_level', '*', array('ID' => $agentinfo['levelid']), 'AND')) {
|
||||||
die(json_encode(array('code' => -2, 'msg' => '代理对应的等级信息获取失败!')));
|
die(json_encode(array('code' => -2, 'msg' => '代理对应的等级信息获取失败!')));
|
||||||
}
|
}
|
||||||
|
// P0-10: 折率下限校验(同 creatfidkey)——0/负折率会 0 元开卡
|
||||||
|
if ((float)$levelinfo['fracture'] <= 0){
|
||||||
|
die(json_encode(array('code' => -5, 'msg' => '代理等级折率配置异常(≤0),请联系管理员修复')));
|
||||||
|
}
|
||||||
$applist = explode(',', $levelinfo['appid']);
|
$applist = explode(',', $levelinfo['appid']);
|
||||||
$backinfo = array();
|
$backinfo = array();
|
||||||
if (!in_array($fidinfo['appid'], $applist)) {
|
if (!in_array($fidinfo['appid'], $applist)) {
|
||||||
@@ -1025,9 +1029,6 @@ switch ($_GET['mod']) {
|
|||||||
die(json_encode(array('code'=>'-1','msg'=>'生成的数量不能为空或者0或者负数')));
|
die(json_encode(array('code'=>'-1','msg'=>'生成的数量不能为空或者0或者负数')));
|
||||||
}
|
}
|
||||||
$time = time();
|
$time = time();
|
||||||
if ($count <= 0){
|
|
||||||
die(json_encode(array('code'=>'-1','msg'=>'卡密金额不能为空或者0或者负数')));
|
|
||||||
}
|
|
||||||
if (!$fidinfo = $db->select_first_row('sq_fidlist', '*', array('ID' => $_POST['sc_fid']), 'AND')) {
|
if (!$fidinfo = $db->select_first_row('sq_fidlist', '*', array('ID' => $_POST['sc_fid']), 'AND')) {
|
||||||
die(json_encode(array('code' => -2, 'msg' => '无法找到该商品,请刷新页面重试')));
|
die(json_encode(array('code' => -2, 'msg' => '无法找到该商品,请刷新页面重试')));
|
||||||
}
|
}
|
||||||
@@ -1037,6 +1038,11 @@ switch ($_GET['mod']) {
|
|||||||
if (!$levelinfo = $db->select_first_row('sq_level', '*', array('ID' => $agentinfo['levelid']), 'AND')) {
|
if (!$levelinfo = $db->select_first_row('sq_level', '*', array('ID' => $agentinfo['levelid']), 'AND')) {
|
||||||
die(json_encode(array('code' => -2, 'msg' => '代理对应的等级信息获取失败!')));
|
die(json_encode(array('code' => -2, 'msg' => '代理对应的等级信息获取失败!')));
|
||||||
}
|
}
|
||||||
|
// P0-10: 折率下限校验——fracture 为 0/负数时 spendmoney 恒 ≤0,
|
||||||
|
// 余额检查形同虚设,零余额代理可无限免费开卡(N4 死代码的原始隐患)
|
||||||
|
if ((float)$levelinfo['fracture'] <= 0){
|
||||||
|
die(json_encode(array('code' => -5, 'msg' => '代理等级折率配置异常(≤0),请联系管理员修复')));
|
||||||
|
}
|
||||||
$spendmoney = $fidinfo['agentprice'] * $count * $levelinfo['fracture'];
|
$spendmoney = $fidinfo['agentprice'] * $count * $levelinfo['fracture'];
|
||||||
if ($spendmoney > $agentinfo['money']){
|
if ($spendmoney > $agentinfo['money']){
|
||||||
die(makejson(-10,'代理余额不足'.$spendmoney.',请先进行充值'));
|
die(makejson(-10,'代理余额不足'.$spendmoney.',请先进行充值'));
|
||||||
|
|||||||
Reference in New Issue
Block a user