select_first_row('sq_admin', '*', array('accesstoken' => $_POST['accesstoken']), 'AND')) {
die(json_encode(array('code' => '-1', 'msg' => '秘钥错误')));
} else {
$_SESSION['admin_username'] = $result['username'];
$_SESSION['admin_id'] = $result['ID'];
$_SESSION['admin_qq'] = $result['qq'];
$_SESSION['admin_password'] = $result['password'];
$_SESSION['admin_HTTP_USER_AGENT'] = $_SERVER['HTTP_USER_AGENT'];
//$db->insert_back_id('sq_log_system',array('time'=>time(),'ip'=>get_real_ip(),'msg'=>'管理员 '.$_POST['username'].'使用API秘钥登陆成功','type'=>'success'));
$db->posterror('管理员 '.$result['username'].'使用API秘钥登陆成功','success');
die(json_encode(array('code' => '1', 'msg' => '登陆成功')));
}
}
if (empty($_POST['username'])){
die(json_encode(array('code'=>-1,'msg'=>'请输入您的用户名')));
}
if (empty($_POST['password'])) {
die(json_encode(array('code' => -2, 'msg' => '请输入您的密码')));
}
include __DIR__ . '/../function/VerificationCode.class.php';
$verification = Verification::check($_POST['token']);
if ($verification !== true) {
die(json_encode(array('code' => '-88', 'msg' => '请先进行人机验证')));
}
// P0-05: 按用户名取出后用 PHP 校验(兼容新 bcrypt / 旧 md5),成功即写回 bcrypt(惰性迁移);
// 失败日志不再记录明文密码(原 posterror 会把密码写入 sq_log_system)
$result = $db->select_first_row('sq_admin','*',array('username'=>$_POST['username']),'AND');
if (!$result || !wq_verify_password($_POST['password'], $result['password'], 'md5')){
$db->posterror('管理员登录尝试失败,账号['.$_POST['username'].']','danger');
die(json_encode(array('code' => -3, 'msg' => '输入的账号密码错误!'.$db->geterror())));
}else{
$_SESSION['admin_username'] = $_POST['username'];
$_SESSION['admin_id'] = $result['ID'];
$_SESSION['admin_qq'] = $result['qq'];
$newhash = wq_hash_password($_POST['password']);
$_SESSION['admin_password'] = $newhash;
$_SESSION['admin_HTTP_USER_AGENT'] = $_SERVER['HTTP_USER_AGENT'];
$db->update('sq_admin',array('ID'=>$result['ID']),'AND',array('password'=>$newhash,'loginip'=>get_real_ip(),'logintime'=>time()));
// $db->insert_back_id('sq_log_system',array('time'=>time(),'ip'=>get_real_ip(),'msg'=>'['.get_real_ip().']管理员 '.$_POST['username'].'使用密码登陆成功!','type'=>'success'));
$db->posterror('管理员 '.$_POST['username'].'使用密码登录后台成功','success');
die(json_encode(array('code' => '1', 'msg' => '登陆成功,正在跳转!')));
}
} else if($_GET['mod'] === 'checklogin'){
if (empty($_SESSION['admin_username']) || empty($_SESSION['admin_password'])){
die(json_encode(array('code'=>-1)));
}
if (!$result = $db->select_first_row('sq_admin','*',array('username'=>$_SESSION['admin_username'],'password'=>$_SESSION['admin_password']),'AND')){
die(json_encode(array('code'=>-2)));
}
if (($_SERVER['HTTP_USER_AGENT'] ?? '') !== $_SESSION['admin_HTTP_USER_AGENT']){
die(json_encode(array('code'=>-3)));
}else{
die(json_encode(array('code'=>1,'username'=>$_SESSION['admin_username'],'adminqq'=>$_SESSION['admin_qq'])));
}
} else{
if (empty($_SESSION['admin_username']) || empty($_SESSION['admin_password'])){
echo '没有登录:code:-1';
header('Location: login.html');
die();
}
if (!$result = $db->select_first_row('sq_admin','*',array('username'=>$_SESSION['admin_username'],'password'=>$_SESSION['admin_password']),'AND')){
echo '没有登录:code:-2';
header('Location: login.html');
die();
}
if (($_SERVER['HTTP_USER_AGENT'] ?? '') !== $_SESSION['admin_HTTP_USER_AGENT']){
echo '没有登录:code:-3';
header('Location: login.html');
die();
}
}
switch ($_GET['mod']){
case 'addapp':
$txms = rand_str(64);
$jmms = rand_str(64);
if ($_POST['sqfs'] == 'jcbd' && $_POST['bdip'] == 'false' && $_POST['bdjq'] == 'false' && $_POST['bdqq'] == 'false'){
die(makejson(-1,'当授权方式为检查绑定的时候,绑定IP/MAC/QQ中至少需要选择一个!'));
}
if(!$id = $db->insert_back_id('sq_apps',array('appname'=>$_POST['app_name'],'bindip'=>textbooltonum($_POST['bdip']),'bindmac'=>textbooltonum($_POST['bdjq']),'bindqq'=>textbooltonum($_POST['bdqq']),'onlinecheck'=>textbooltonum($_POST['zxjc']),'allowchange'=>textbooltonum($_POST['yxhb']),'allowunbind'=>textbooltonum($_POST['yxjb']),'logintype'=>$_POST['sqfs'],'usetype'=>$_POST['syfs'],'cycreduce'=>$_POST['zqkc'],'unbindreduce'=>$_POST['jbkc'],'rechargeface'=>$_POST['czmz'],'onlinesecond'=>$_POST['zxms'],'reggive'=>$_POST['zczs'],'notice'=>$_POST['yygg'],'ver'=>$_POST['yybb'],'uplog'=>$_POST['gxrz'],'upurl'=>$_POST['gxdz'],'forceup'=>textbooltonum($_POST['qzgx']),'free'=>textbooltonum($_POST['mfms']),'connectkey'=>$txms,'decryptkey'=>$jmms,'data'=>$_POST['zdysj']))){
die(makejson(-1,'插入数据发生错误:'.$db->geterror()));
}else{
die(makejson(1,'success',array('appid'=>$id,'Decryptkey'=>$jmms,'Connectkey'=>$txms)));
}
break;
case 'getsysinfo':
$fanhuishuju['appnum'] = $db->select_count_row('sq_apps');
$fanhuishuju['sysver'] = $G['siteinfo']['ver'];
$fanhuishuju['czkeynum'] = $db->select_count_row('sq_key');
$fanhuishuju['tckeynum'] = $db->select_count_row('sq_fidkey');
$fanhuishuju['agentnum'] = $db->select_count_row('sq_agent');
$fanhuishuju['tradenum'] = $db->select_count_row('sq_trade');
die(json_encode($fanhuishuju));
break;
case 'getapplist':
if(!$arr = $db->select_limit_row('sq_apps','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], array(), 'AND')){
$backinfo['code'] = -1;
$backinfo['msg'] = $db->geterror();
die();
}
$backinfo['code'] = 0;
$backinfo['msg'] = '';
$backinfo['count'] = $db->select_count_row('sq_apps');
$i='';
foreach ($arr as $value){
$newinfo = array();
$newinfo['id'] = $value['ID'];
$newinfo['app_name'] = $value['appname'];
$newinfo['num_user'] = $db->select_count_row('sq_user',array('appid'=>$value['ID']),'AND');
$newinfo['num_online'] = $db->select_count_row('sq_user','appid='.$value['ID'].' AND htime>'.(time()-$value['onlinesecond']),'AND');
$newinfo['bdqq'] = '';
$newinfo['bdip'] = '';
$newinfo['bdjq'] = '';
$newinfo['zxjc'] = '';
$newinfo['yxhb'] = '';
$newinfo['yxjb'] = '';
$newinfo['zqkc'] = $value['cycreduce'];
$newinfo['sqfs'] = $value['logintype'];
$newinfo['syfs'] = $value['usetype'];
$newinfo['jbkc'] = $value['unbindreduce'];
$newinfo['czmz'] = $value['rechargeface'];
$newinfo['zxms'] = $value['onlinesecond'];
$newinfo['zczs'] = $value['reggive'];
$newinfo['yygg'] = htmlspecialchars($value['notice']);
$newinfo['yybb'] = $value['ver'];
$newinfo['gxrz'] = htmlspecialchars($value['uplog']);
$newinfo['gxdz'] = htmlspecialchars($value['upurl']);
$newinfo['zdysj'] = $value['data'];
$newinfo['connectkey'] = $value['connectkey'];
$newinfo['decryptkey'] = $value['decryptkey'];
$newinfo['qzgx'] = '';
$newinfo['mfms'] = '';
$newinfo['gbyy'] = '';
$backinfo['data'][] = $newinfo;
}
die(json_encode($backinfo));
break;
case 'savechange':
switch ($_POST['mod']){
case 'bdip':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('bindip'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('绑定IP设置保存成功');
}
break;
case 'bdjq':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('bindmac'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('绑定机器设置保存成功');
}
break;
case 'bdqq':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('bindqq'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('绑定QQ设置保存成功');
}
break;
case 'zxjc':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('onlinecheck'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('在线检测设置保存成功');
}
break;
case 'yxhb':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('allowchange'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('允许换绑设置保存成功');
}
break;
case 'yxjb':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('allowunbind'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('允许解绑设置保存成功');
}
break;
case 'qzgx':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('forceup'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('强制更新设置保存成功');
}
break;
case 'gbyy':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('close'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
die('应用状态设置保存成功');
}
break;
case 'mfms':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('free'=>textbooltonum($_POST['status'])))){
die($db->geterror());
}else{
if (textbooltonum($_POST['status'])){
die('免费模式设置保存成功
免费模式开启后可以通过任何数据(包括空)登录授权');
}
die('免费模式设置保存成功');
}
break;
case 'app_name':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('appname'=>$_POST['status']))){
die($db->geterror());
}else{
die('应用名称设置保存成功');
}
break;
case 'zqkc':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('cycreduce'=>$_POST['status']))){
die($db->geterror());
}else{
die('周期扣除设置保存成功');
}
break;
case 'jbkc':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('unbindreduce'=>$_POST['status']))){
die($db->geterror());
}else{
die('解绑扣除设置保存成功');
}
break;
case 'czmz':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('rechargeface'=>$_POST['status']))){
die($db->geterror());
}else{
die('充值面值设置保存成功');
}
break;
case 'zxms':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('onlinesecond'=>$_POST['status']))){
die($db->geterror());
}else{
die('在线秒数设置保存成功');
}
break;
case 'yygg':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('notice'=>$_POST['status']))){
die($db->geterror());
}else{
die('应用公告设置保存成功');
}
break;
case 'yybb':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('ver'=>$_POST['status']))){
die($db->geterror());
}else{
die('应用版本设置保存成功');
}
break;
case 'gxrz':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('uplog'=>$_POST['status']))){
die($db->geterror());
}else{
die('更新日志设置保存成功');
}
break;
case 'gxdz':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('upurl'=>$_POST['status']))){
die($db->geterror());
}else{
die('更新地址设置保存成功');
}
break;
case 'zdysj':
if(!$db->update('sq_apps',array('ID'=>$_POST['appid']),'',array('data'=>$_POST['status']))){
die($db->geterror());
}else{
die('自定义数据设置保存成功');
}
break;
default:
die('未知请求模块');
}
case 'appkey':
$info = $db->select_first_row('sq_apps','connectkey,decryptkey',array('ID'=>$_POST['appid']),'');
die('Connectkey:'.$info['connectkey'].'
Decryptkey:'.$info['decryptkey']);
break;
case 'resetkey':
$txms = rand_str(64);
$jmms = rand_str(64);
$db->update('sq_apps',array('ID'=>$_POST['appid']),'AND',array('decryptkey'=>$jmms,'connectkey'=>$txms));
die('秘钥重置成功,以下是新秘钥:
Connectkey:'.$txms.'
Decryptkey:'.$jmms);
break;
case 'delapp':
if (empty($_POST['appid'])){
die('非法提交');
}
if (!($db->delete('sq_user',array('appid'=>$_POST['appid']),'AND'))){
echo('用户列表删除失败!
');
}else{
echo '应用的用户列表已清空
';
}
if (!($db->delete('sq_fidlist',array('appid'=>$_POST['appid']),'AND'))){
echo('商品列表删除失败!
');
}else{
echo '应用的商品列表已清空
';
}
if (!($db->delete('sq_level',array('appid'=>$_POST['appid']),'AND'))){
echo('代理级别列表删除失败!
');
}else{
echo '代理级别列表已清空
';
}
if (!($db->delete('sq_agent',array('appid'=>$_POST['appid']),'AND'))){
echo('代理列表删除失败!
');
}else{
echo '应用的代理列表已清空
';
}
if (!($db->delete('sq_token',array('appid'=>$_POST['appid']),'AND'))){
echo('Token数据清空失败!
');
}else{
echo 'Token数据已清空
';
}
if (!($db->delete('sq_token',array('appid'=>$_POST['appid']),'AND'))){
echo('云黑列表清空失败!
');
}else{
echo '该应用云黑列表已清空
';
}
if (!$db->delete('sq_apps',array('ID'=>$_POST['appid']),'AND')){
echo('删除失败 '.$db->geterror());
}else{
die('应用已成功删除');
}
break;
case 'user_applist':
$back = $db->select_all_row('sq_apps','ID,appname',array(),'AND');
if (count($back) === 0){
die();
}
$i = '';
foreach ($back as $value){
$i .= '';
}
die($i);
break;
case 'getgradelist':
$where = array();
$backinfo['code'] = 0;
$backinfo['count'] = $db->select_count_row('sq_level',array(),'AND');
include __DIR__ . "/../function/function_app.php";
if(!$arr = $db->select_limit_row('sq_level','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], array(), 'AND')){
//$backinfo['code'] = -1;
$backinfo['msg'] = $db->geterror();
die(json_encode($backinfo));
}
foreach ($arr as $key => $value){
//$appinfo = app_idgetinfo($value['appid']);
$array = explode(',',$value['appid']);
$appname = '';
foreach ($array as $appid){
if ($appname != ''){
$appname .= ','.app_idgetname($appid);
}else{
$appname = app_idgetname($appid);
}
}
$arr[$key]['appname'] = $appname;
}
$backinfo['data'] = $arr;
die(json_encode($backinfo));
break;
case 'getuserlist':
if (empty($_GET['appid'])){
die(json_encode(array('code'=>'-2','msg'=>'请先选择一个应用(如果应用过多,可点击上方下拉选择框后,输入关键词可快速查找应用)')));
}
//$where['appid'] = $_GET['appid'];
if (!empty($_GET['search'])){
$where['username'] = $where['password'] = $where['mac'] = $where['rip'] = $where['lip'] = $where['uqq'] = $where['mail'] = $where['balance'] = $where['rqq'] = $_GET['search'];
//$where['uqq'] = intval($where['uqq'])
if (!is_numeric($where['uqq'])){
unset($where['uqq']);
}
if (!is_numeric($where['rqq'])){
unset($where['rqq']);
}
if (!is_numeric($where['balance'])){
unset($where['balance']);
}
$whereinfo = 'appid='.intval($_GET['appid']).' AND ('. $db->wheretosql($where,'OR').')';
}else{
$whereinfo = 'appid='.intval($_GET['appid']);
}
//echo $whereinfo;
$backinfo['code'] = 0;
$backinfo['count'] = $db->select_count_row('sq_user',$whereinfo,'AND');
include __DIR__ . "/../function/function_app.php";
$appinfo = app_idgetinfo($_GET['appid']);
if(!$arr = $db->select_limit_row('sq_user','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], $whereinfo, 'AND','ORDER BY ID DESC')){
//$backinfo['code'] = -1;
$backinfo['msg'] = $db->geterror();
die(json_encode($backinfo));
}
$backinfo['msg'] = '';
foreach ($arr as $value){
$newinfo = array();
$newinfo['id'] = $value['ID'];
$newinfo['username'] = $value['username'];
$newinfo['password'] = $value['password'];
$newinfo['mac'] = $value['mac'];
$newinfo['lip'] = $value['lip'];
$newinfo['rip'] = $value['rip'];
$newinfo['uqq'] = $value['uqq'];
$newinfo['mail'] = $value['mail'];
$newinfo['rtime'] = Get_Date($value['rtime']);
$newinfo['ltime'] = Get_Date($value['ltime']);
if ($appinfo['usetype'] === 'dqsj'){
if (!empty($value['balance'])){
if ($value['balance'] == '-1'){
$value['balance'] = '永久使用';
}
$value['balance'] = Get_Date($value['balance']);
}else{
$value['balance']='-';
}
}
$newinfo['balance'] = $value['balance'];
$newinfo['rqq'] = htmlspecialchars($value['rqq']);
if ((time()-$value['htime']) < $appinfo['onlinesecond']){
$online = '在线';
}else{
$online = '离线';
}
$newinfo['login'] = $online;
$newinfo['status'] = '';
$newinfo['origin'] = GetOriginText($value['origin']);
$newinfo['oid'] = $value['oid'];
$backinfo['data'][] = $newinfo;
}
//print_r($backinfo);
die(json_encode($backinfo));
break;
case 'changegrade':
if (empty($_POST['mod'])){
die('模块标识不能为空');
}
if (empty($_POST['gid'])){
die('等级ID不能为空');
}
if (!$db->update('sq_level',array('ID'=>$_POST['gid']),'AND',array($_POST['mod']=>$_POST['value']))){
die('修改失败'.$db->geterror());
}else{
die('修改成功!');
}
break;
case 'changeuser':
if (empty($_POST['mod'])){
die('模块标识不能为空');
}
if (empty($_POST['userid'])){
die('用户ID不能为空');
}
if ($_POST['mod'] == 'status'){
$_POST['value'] = textbooltonum($_POST['value']);
}
if ($_POST['mod'] == 'balance'){
if ($_POST['value'] == '永久使用'){
$_POST['value'] = -1;
}else{
$value = strtotime($_POST['value']);
if (!empty($value)){
$_POST['value'] = $value;
}
}
}
// P0-05: 用户密码改密以 bcrypt 哈希入库
if ($_POST['mod'] == 'password') {
$_POST['value'] = wq_hash_password($_POST['value']);
}
if (!$db->update('sq_user',array('ID'=>$_POST['userid']),'AND',array($_POST['mod']=>$_POST['value']))){
die('修改失败'.$db->geterror());
}else{
die('修改成功!');
}
break;
case 'deluser':
if (empty($_POST['userid'])){
die('用户ID不能为空');
}
$db->delete('sq_token',array('uid'=>$_POST['userid']),'AND');
if (!$db->delete('sq_user',array('ID'=>$_POST['userid']),'AND')){
die('删除失败'.$db->geterror());
}else{
die('删除成功!');
}
case 'dl_applist':
$back = $db->select_all_row('sq_apps','ID,appname',array(),'AND');
if (count($back) === 0){
die();
}
$i = '';
foreach ($back as $value){
$i .= '';
}
die($i);
break;
case 'addfid':
$_POST = json_decode($_POST['content'],true);
if(!$db->insert_back_id('sq_fidlist',array('fidname'=>$_POST['fid_name'],'introduce'=>$_POST['fid_introduce'],'appid'=>$_POST['applist'],'buyprice'=>$_POST['fid_price'],'agentprice'=>$_POST['fid_agentprice'],'num'=>$_POST['fid_count'],'openbuy'=>textbooltonum($_POST['openbuy']),'agentbuy'=>textbooltonum($_POST['agentbuy']),'allrechargecard'=>textbooltonum($_POST['keybuy'])))){
die('添加失败:'.$db->geterror());
}else{
die('套餐添加成功!');
}
break;
case 'getfidlist':
include __DIR__ . '/../function/function_app.php';
if(!$result = $db->select_limit_row('sq_fidlist','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], array(), 'AND')){
$backinfo['msg'] = $db->geterror();
$backinfo['code'] = $backinfo['msg'] == ''? 0 : -1;
die(json_encode($backinfo));
}else{
$info = '';
$backinfo['code'] = 0;
$backinfo['msg'] = '';
$backinfo['count'] = $db->select_count_row('sq_fidlist');
foreach ($result as $value){
$value['appname'] = app_idgetname($value['appid']);
$value['openbuy'] = '';
$value['agentbuy'] = '';
$value['allrechargecard'] = '';
$backinfo['data'][] = $value;
}
die(json_encode($backinfo));
}
break;
case 'changefid':
if (empty($_POST['mod'])){
die('模块标识不能为空');
}
if (empty($_POST['fid'])){
die('分类ID不能为空');
}
if ($_POST['mod'] == 'openbuy'){
$_POST['value'] = textbooltonum($_POST['value']);
}
if ($_POST['mod'] == 'agentbuy'){
$_POST['value'] = textbooltonum($_POST['value']);
}
if ($_POST['mod'] == 'allrechargecard'){
$_POST['value'] = textbooltonum($_POST['value']);
}
if ($_POST['mod'] == 'balance'){
$value = strtotime($_POST['value']);
if (!empty($value)){
$_POST['value'] = $value;
}
}
if (!$db->update('sq_fidlist',array('ID'=>$_POST['fid']),'AND',array($_POST['mod']=>$_POST['value']))){
die('修改失败'.$db->geterror());
}else{
die('修改成功!');
}
break;
case 'delfid':
$db->delete('sq_fidkey',array('fid'=>$_POST['fid']),'AND');
if(!$db->delete('sq_fidlist',array('ID'=>$_POST['fid']),'AND')){
die('删除失败:'.$db->geterror());
}else{
die('分类删除成功!');
}
break;
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'))){
die('添加失败:'.$db->geterror());
}else{
die('代理级别添加成功!');
}
break;
case 'getgrideinfo':
if (empty($_POST['id'])){
die('级别为空,无法加载');
}
if (!$result = $db->select_first_row('sq_level','*',array('ID'=>$_POST['id']),'AND')){
die('数据库错误:'.$db->geterror());
}
die(json_encode(array(
'grade_name'=>$result['lname'],
'grade_present'=>$result['fracture'],
'grade_price'=>$result['price'],
)));
break;
case 'getlevallist':
include __DIR__ . '/../function/function_app.php';
$list = '';
$back = $db->select_all_row('sq_level','ID,lname',array(),'AND');
if (!empty($_POST['aid'])){
$info = $db->select_first_row('sq_agent','levelid',array('ID'=>$_POST['aid']),'AND');
print_r($info);
$lid = $info['levelid'];
}
//echo $lid;
foreach ($back as $value){
$list.='';
}
die($list);
break;
case 'addagent':
if ($db->select_first_row('sq_agent','*',array('username'=>$_POST['agent_name']),'AND') != false){
die('该代理账号已经存在,请尝试其他用户名');
}
if(!$db->insert_back_id('sq_agent',array('username'=>$_POST['agent_name'],'password'=>wq_hash_password($_POST['agent_pass']),'money'=>$_POST['agent_money'],'levelid'=>$_POST['agent_leval'],'begintime'=>time(),'status'=>'1','loginip'=>'-','qq'=>$_POST['agent_qq']))){
die('添加失败:'.$db->geterror());
}else{
die('代理添加成功!');
}
break;
case 'getagentlist':
include __DIR__ . '/../function/function_app.php';
if(!$result = $db->select_limit_row('sq_agent','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], array(), 'AND')){
$backinfo['code'] = -1;
$backinfo['msg'] = $db->geterror();
if(empty($backinfo['msg'])){
$backinfo['code'] = 0;
}
die(json_encode($backinfo));
}else{
$info = '';
$backinfo['code'] = 0;
$backinfo['msg'] = '';
$backinfo['count'] = $db->select_count_row('sq_agent');
foreach ($result as $value){
if ($value['logintime'] == 0){
$value['logintime'] = '-';
}
$value['begintime'] = Get_Date($value['begintime']);
$value['logintime'] = Get_Date($value['logintime']);
$value['levelname'] = level_idgetname($value['levelid']);
$value['status'] = '';
$backinfo['data'][] = $value;
}
die(json_encode($backinfo));
}
break;
case 'coldagent':
if (!$db->update('sq_agent',array('ID'=>$_POST['agentid']),'AND',array('status'=>0))){
die('冻结失败'.$db->geterror());
}else{
die('冻结成功!');
}
break;
case 'uncoldagent':
if (!$db->update('sq_agent',array('ID'=>$_POST['agentid']),'AND',array('status'=>1))){
die('解冻失败'.$db->geterror());
}else{
die('解冻成功!');
}
break;
case 'getagentinfo':
$result = $db->select_first_row('sq_agent','*',array('ID'=>$_POST['id']),'AND');
// P0-05: 不再把密码(哈希或明文)回传前端;密码修改走 changeagent 单独入口
die(json_encode(array(
'agent_leval'=>$result['levelid'],
'agent_money'=>$result['money'],
'agent_name'=>$result['username'],
'agent_pass'=>'********'
)));
break;
case 'changeagent':
// if (!$db->update('sq_agent',array('ID'=>$_POST['id']),'AND',array('username'=>$_POST['agent_name'],'password'=>$_POST['agent_pass'],'money'=>$_POST['agent_money'],'levelid'=>$_POST['agent_leval'],'begintime'=>time(),'status'=>'1','loginip'=>'-'))){
// die('修改失败'.$db->geterror());
// }else{
// die('修改成功!');
// }
if (empty($_POST['mod'])){
die('模块标识不能为空');
}
if (empty($_POST['aid'])){
die('代理ID不能为空');
}
if ($_POST['mod'] == 'status') $_POST['value'] = textbooltonum($_POST['value']);
// P0-05: 代理密码统一以 bcrypt 哈希入库
if ($_POST['mod'] == 'password') $_POST['value'] = wq_hash_password($_POST['value']);
if (!$db->update('sq_agent',array('ID'=>$_POST['aid']),'AND',array($_POST['mod']=>$_POST['value']))){
die('修改失败'.$db->geterror());
}else{
die('修改成功!');
}
break;
case 'delgrade':
if (empty($_POST['gid'])){
die('非法提交');
}
$db->delete('sq_agent',array('levelid'=>$_POST['gid']),'AND');
if (!$db->delete('sq_level',array('ID'=>$_POST['gid']),'AND')){
die('删除失败 '.$db->geterror());
}else{
die('删除代理级别成功');
}
break;
case 'delagent':
if (empty($_POST['aid'])){
die('非法提交');
}
if (!$db->delete('sq_agent',array('ID'=>$_POST['aid']),'AND')){
die('删除失败 '.$db->geterror());
}else{
die('删除代理成功');
}
break;
case 'saveepayset':
updateset('pay_domain',$_POST['pay_domain']);
updateset('epay_pid',$_POST['epay_pid']);
updateset('epay_key',$_POST['epay_key']);
updateset('epay_againcheck',textbooltonum($_POST['epay_againcheck']));
die('修改成功!');
break;
case 'savesysset':
updateset('alipaytype',$_POST['alipaytype']);
updateset('qqpaytype',$_POST['qqpaytype']);
updateset('wxpaytype',$_POST['wxpaytype']);
updateset('kqxt',textbooltonum($_POST['kqxt']));
updateset('yjtx',textbooltonum($_POST['yjtx']));
updateset('xtsy',textbooltonum($_POST['xtsy']));
die('修改成功!');
break;
case 'getsysset':
die(json_encode($G['config']));
break;
case 'savesignset':
updateset('alipay_id',$_POST['alipay_id']);
updateset('alipay_rsa',$_POST['alipay_rsa']);
updateset('alipay_pkey',$_POST['alipay_pkey']);
updateset('tenpay_id',$_POST['tenpay_id']);
updateset('qqpay_key',$_POST['qqpay_key']);
die('修改成功!');
break;
case 'savesiteinfo':
updateset('sitename',$_POST['sitename']);
updateset('adminqq',$_POST['adminqq']);
updateset('adminmail',$_POST['adminmail']);
updateset('beian',$_POST['beian']);
updateset('weburl',$_POST['weburl']);
die('保存成功');
break;
case 'addadmin':
if (empty($_POST['addusername']) || empty($_POST['adduserpass']) || empty($_POST['adduserqq'])){
die('数据不能为空,请检查');
}
$db->insert_back_id('sq_admin',array('username'=>$_POST['addusername'],'password'=>wq_hash_password($_POST['adduserpass']),'qq'=>$_POST['adduserqq']));
die('管理员新增成功,如果需要删除请进数据库中的表sq_admin进行删除');
break;
case 'sendtestmail':
$T['title'] = '测试邮件';
$T['content'][] = '收到此邮件表示您的配置正常可用!';
$MailTips[] = $T;
if (!SendTipsMail($G['config']['adminmail'],$MailTips,$back)){
die('请求超时或返回的数据解析失败:'.$back);
}else{
die('邮件已发送至您开通授权时候设置的站长邮箱,请检查收件箱和垃圾箱是否已收到文件');
}
break;
case 'savemailset':
updateset('smtp_address',$_POST['smtp_address']);
updateset('smtp_port',$_POST['smtp_port']);
updateset('smtp_user',$_POST['smtp_user']);
updateset('smtp_pass',$_POST['smtp_pass']);
die('保存成功');
break;
case 'savenotice':
updateset('agentnotice',$_POST['agentnotice']);
updateset('mainnav',$_POST['mainnav']);
updateset('maindrawer',$_POST['maindrawer']);
die('保存成功');
break;
case 'creatkey':
$count = $_POST['sc_count'];
if ($count <= 0){
die(json_encode(array('code'=>'-1','msg'=>'生成的数量不能为空或者0或者负数')));
}
$time = time();
$money = $_POST['sc_money'];
if ($money <= 0){
die(json_encode(array('code'=>'-1','msg'=>'卡密金额不能为空或者0或者负数')));
}
$keylist='';
for ($x=1; $x<=$_POST['sc_count']; $x++) {
$key = substr($time,0,6).'-'.rand_str(6).'-'.rand_str(6).'-'.rand_str(6).'-'.rand_str(6).'-'.$money;
$insarray[] = "'{$key}','{$time}','0','{$money}','{$money}','0','1'";
$keylist .= '
'.$key;
}
$sign = rand_str(32);
$_SESSION['cards'][$sign] = str_replace('
',"\r\n",$keylist);
if(!$num = $db->insert_back_row('sq_key',array('kami','creattime','firstusetime','allmoney','lastmoney','lastusetime','status'),$insarray)){
die(json_encode(array('code'=>'-1','msg'=>'数据库错误:'.$db->geterror())));
}else{
die(json_encode(array('code'=>'1','sign'=>$sign,'keys'=>'您的卡密如下:'.$keylist)));
}
break;
case 'download':
if (empty($_SESSION['cards'][$_GET['sign']])){
die('该Sign不存在或者已过期,无法下载卡密');
}else{
$filename = $_GET['sign'].".txt";
header('Content-Type:text/plain'); //指定下载文件类型
header('Content-Disposition: attachment; filename="'.$filename.'"'); //指定下载文件的描述
header('Content-Length:'.strlen($_SESSION['cards'][$_GET['sign']])); //指定下载文件的大小
die($_SESSION['cards'][$_GET['sign']]);
}
break;
case 'getkeylist':
$where = array();
if (!empty($_GET['search'])){
$where['kami'] = $_GET['search'];
}
$backinfo['code'] = 0;
$backinfo['count'] = $db->select_count_row('sq_key',$where,'AND');
if(!$arr = $db->select_limit_row('sq_key','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], $where, 'AND','ORDER BY ID DESC')){
$backinfo['msg'] = $db->geterror();
die(json_encode($backinfo));
}
foreach ($arr as $key => $value){
if ($value['creattime'] == 0){
$arr[$key]['creattime'] = '-';
}else{
$arr[$key]['creattime'] = Get_Date($value['creattime']);
}
if ($value['firstusetime'] == 0){
$arr[$key]['firstusetime'] = '-';
}else{
$arr[$key]['firstusetime'] = Get_Date($value['firstusetime']);
}
if ($value['lastusetime'] == 0){
$arr[$key]['lastusetime'] = '-';
}else{
$arr[$key]['lastusetime'] = Get_Date($value['lastusetime']);
}
$arr[$key]['status'] = '';
}
$backinfo['data'] = $arr;
die(json_encode($backinfo));
break;
case 'keystatus':
if (empty($_POST['keyid'])){
die(makejson(-1,'keyid不能为空'));
}
if(!$db->update('sq_key',array('ID'=>$_POST['keyid']),'AND',array('status'=>textbooltonum($_POST['status'])))){
die(makejson(-2,'修改失败或者没有任何更改'.$db->geterror()));
}else{
die(makejson(1,'状态保存成功'));
}
case 'sitelog':
$backinfo['pages'] = ceil($db->select_count_row('sq_log_system')/50);
$backinfo['data'] = array();
if (!$result = $db->select_limit_row('sq_log_system','*',($_GET['page']-1)*50,50,'',''," ORDER BY time DESC")){
$backinfo['data'][] = $db->geterror();
die(json_encode($backinfo));
}
foreach ($result as $value){
$new['content'] = $value['msg'];
$new['time'] = Get_Date($value['time']);
switch ($value['type']){
case 'success':
$new['icon'] = 'စ';
$new['color'] = 'green';
break;
case 'info':
$new['icon'] = '';
$new['color'] = 'blue';
break;
case 'warning':
$new['icon'] = '';
$new['color'] = 'yellow';
break;
case 'danger':
$new['icon'] = 'ဇ';
$new['color'] = 'red';
break;
default:
$new['icon'] = '';
$new['color'] = 'blue';
break;
}
$backinfo['data'][] = $new;
}
die(json_encode($backinfo));
break;
case 'coldkey':
if (!$db->update('sq_key',array('ID'=>$_POST['keyid']),'AND',array('status'=>0))){
die('冻结失败'.$db->geterror());
}else{
die('冻结成功!');
}
break;
case 'uncoldkey':
if (!$db->update('sq_key',array('ID'=>$_POST['keyid']),'AND',array('status'=>1))){
die('解冻失败'.$db->geterror());
}else{
die('解冻成功!');
}
break;
case 'delkey':
if (empty($_POST['keyid'])){
die(makejson(-1,'卡密ID不能为空'));
}
if (!$db->delete('sq_key',array('ID'=>$_POST['keyid']),'AND')){
die(makejson(-2,'删除失败 '.$db->geterror()));
}else{
die(makejson(1,'删除成功!'));
}
break;
case 'gettradelist':
$where = array();
if (!empty($_GET['search'])){
$where['tradeno'] = $where['name'] = $where['user'] = $where['mail'] = $where['kami'] = $_GET['search'];
}
$backinfo['code'] = 0;
$backinfo['count'] = $db->select_count_row('sq_trade',$where,'OR');
if(!$arr = $db->select_limit_row('sq_trade','*',($_GET['page'] - 1) * $_GET['limit'] , $_GET['limit'], $where, 'OR','ORDER BY ID DESC')){
$backinfo['msg'] = $db->geterror();
die(json_encode($backinfo));
}
foreach ($arr as $key => $value){
if ($value['begintime'] == 0){
$arr[$key]['begintime'] = '-';
}else{
$arr[$key]['begintime'] = Get_Date($value['begintime']);
}
if ($value['overtime'] == 0){
$arr[$key]['overtime'] = '-';
}else{
$arr[$key]['overtime'] = Get_Date($value['overtime']);
}
if ($value['paytype'] == 'zxzf'){
switch ($value['onlinepaytype']){
case 'zfb':
$arr[$key]['paytype'] = '支付宝';
break;
case 'wx':
$arr[$key]['paytype'] = '微信';
break;
case 'qq':
$arr[$key]['paytype'] = 'QQ钱包';
break;
default:
$arr[$key]['paytype'] = '异常?';
break;
}
}else if ($value['paytype'] == 'czkm'){
$arr[$key]['paytype'] = '余额卡密';
}else if ($value['paytype'] == 'yezf'){
$arr[$key]['paytype'] = '代理余额';
}else{
$arr[$key]['paytype'] = '异常?';
}
if ($value['status'] == 1){
$arr[$key]['status'] = '等待付款';
$button = '';
}else if ($value['status'] == 2){
$arr[$key]['status'] = '等待验证';
$button = '';
}elseif ($value['status'] == 3){
$button = '';
$arr[$key]['status'] = '完成';
}else{
$arr[$key]['status'] = '异常';
}
$arr[$key]['tools'] = $button.'';
}
$backinfo['data'] = $arr;
die(json_encode($backinfo));
break;
case 'suppletrade':
if (!$tradeinfo = $db->select_first_row('sq_trade','*',array('ID'=>$_POST['id']),'AND')){
die('无法找到订单信息!');
}
$tradeno = $tradeinfo['tradeno'];
if ($tradeinfo['status'] == '3'){
die('该订单已完成,无需补单!');
}
$db->update('sq_trade',array('ID'=>$_POST['id']),'AND',array('status'=>3));
$tradeinfo['status'] = 2;
include __DIR__ . '/../function/trade.inc.php';
$back = trade_do($tradeinfo);
//print_r($back);
$back = json_decode($back,true);
if ($back['code'] == 2){
die('成功生成卡密:'.$back['kami']);
}
die($back['msg']);
break;
case 'deltrade':
if (!$db->delete('sq_trade',array('ID'=>$_POST['id']),'AND')){
die('订单删除失败'.$db->geterror());
}else{
die('订单删除成功!');
}
break;
case 'clearalltradeid':
$limit = time() - 3600;
if (!$db->delete('sq_trade','begintime<'.$limit,'AND')){
die('订单删除失败'.$db->geterror());
}else{
die('订单删除成功!');
}
break;
case 'clearnopay':
$limit = time() - 3600;
if (!$db->delete('sq_trade','begintime<'.$limit.' AND status <> 2 AND status <> 3','AND')){
die('订单删除失败'.$db->geterror());
}else{
die('订单删除成功!');
}
break;
case 'clearbeenpay':
$limit = time() - 3600;
if (!$db->delete('sq_trade',array('status'=>3),'AND')){
die('订单删除失败'.$db->geterror());
}else{
die('订单删除成功!');
}
break;
case 'changepassword':
//die('本站点禁止修改密码');
if (empty($_POST['oldpass']) || empty($_POST['newpass']) || empty($_POST['renewpass'])){
die('请填写完所有数据!');
}
if ($_POST['newpass'] != $_POST['renewpass']){
die('两次输入的密码一样,无法修改!');
}
if (!$agentinfo = $db->select_first_row('sq_admin','*',array('username'=>$_SESSION['admin_username']),'AND')){
die('管理员信息获取失败');
}
// P0-05: 兼容校验旧 md5 / 新 bcrypt;新密码以 bcrypt 入库
if (!wq_verify_password($_POST['oldpass'], $agentinfo['password'], 'md5')){
die('输入的原密码错误,无法修改!');
}
if(!$db->update('sq_admin',array('username'=>$_SESSION['admin_username']),'AND',array('password'=>wq_hash_password($_POST['newpass'])))){
die('密码修改失败,服务器内部发生错误');
}else{
die('管理密码修改成功,请使用新密码进行登录!');
}
break;
case 'checkupdate':
case 'downloadupdatepacks':
case 'unzippacks':
/*
* 安全加固 (P0-02):远程在线更新链整体禁用。
* 原逻辑 = 从作者第三方域下载 zip 并解压到 Web 目录,
* 再引导浏览器访问 install.php —— 等同于供应链 RCE 入口。
* 版本升级一律走 git 部署,不再保留在线更新端点。
*/
die(json_encode(array('code' => '-1', 'msg' => '远程更新已禁用(安全加固)')));
break;
case 'keylog':
if (!$result = $db->select_limit_row('sq_log_kami','*','',0,array('keyid'=>$_POST['keyid']),'AND',"ORDER BY time DESC")){
die(makejson(-1,'数据库中没有记录'));
}
die(makejson(1,'success',array('items'=>$result)));
break;
case 'loadbuybody':
include __DIR__ . "/../function/function_app.php";
if(!$appinfo = app_idgetinfo($_POST['appid'])){
die();
}
$output = '';
//$output = '