c5_labsci/web/admin/rigger/tokapi.php

246 lines
9.1 KiB
PHP

<?php
namespace web\admin\rigger;
class tokapi {
static function setwhere($db, $post, $rsuser) {
$query = $post->get('query');
$csql = new \ciy\sql('zc_tokapi');
$csql->where('vuser', $rsuser['id']);
$order = objstr($query, 'order', 'id desc');
$csql->order($order);
$query['order'] = $order;
return [$query, $csql];
}
public static function json_list() {
global $db;
$rsuser = verifyfast();
$post = new \ciy\post();
list($where, $csql) = self::setwhere($db, $post, $rsuser);
$pageno = $post->getint('pageno', 1);
$pagecount = $post->getint('pagecount', 10);
$csql->limit($pageno, $pagecount);
$mainrowcount = $post->getint('count');
$rows = $db->get($csql, $mainrowcount);
if ($rows === false)
return errjson($db->error);
$ret = array('where' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
if ($post->getbool('field')) {
$field = array();
$fshow = $db->getfield($field, 'zc_tokapi');
foreach ($field as $fr => $v) {
if (get('_' . $fr))
$field[$fr]['c'] = ',' . $field[$fr]['c'];
if ($fr == 'merchantid')
$field[$fr]['c'] = ',' . $field[$fr]['c'];
}
$fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
$fshow = fieldadd($fshow, $field, -1, 'msg', '|状况|');
$field['vuser']['c'] = '';
$ret['field'] = $field;
$ret['fshow'] = $fshow;
}
if ($post->getbool('once')) {
$ret['once'] = array();
$input = array();
$ret['once']['input'] = $input;
}
return succjson($ret);
}
public static function json_addnew() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p u'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$csql = new \ciy\sql('zc_tokapi');
$csql->where('addtimes>', time() - 86400 * 7);
$csql->where('vuser', $rsuser['id']);
$csql->column('id');
$chkid = toint($db->get1($csql));
if ($chkid > 0)
return errjson('一周内只能建立一条API通道');
$secret = randstr(10) . randstr(10);
try {
$db->begin();
$updata = array();
$updata['vuser'] = $rsuser['id'];
$updata['apisecret'] = $secret;
$updata['ips'] = '';
$updata['addtimes'] = tostamp();
$updata['uptimes'] = 0;
$updata['pubkey'] = '';
$csql = new \ciy\sql('zc_tokapi');
if ($db->insert($csql, $updata) === false)
throw new \Exception('新增失败:' . $db->error);
$updata['id'] = $db->insert_id();
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['data'] = $updata;
return succjson($ret);
}
public static function json_rekey() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p u'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
$secret = randstr(10) . randstr(10);
try {
$db->begin();
$updata = array();
$updata['apisecret'] = $secret;
$csql = new \ciy\sql('zc_tokapi');
$csql->where('id', $id);
if ($db->update($csql, $updata) === false)
throw new \Exception('新增失败:' . $db->error);
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['secret'] = $secret;
return succjson($ret);
}
public static function json_edit() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p u'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
$ips = explode("\n", $post->get('ips'));
$iparr = array();
foreach ($ips as $ip) {
$ip = trim($ip);
if (empty($ip))
continue;
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))
return errjson('IP格式错误:' . $ip);
$iparr[] = $ip;
}
try {
$db->begin();
$updata = array();
$updata['ips'] = implode("\n", $iparr);
$csql = new \ciy\sql('zc_tokapi');
$csql->where('id', $id);
if ($db->update($csql, $updata) === false)
throw new \Exception('更新失败:' . $db->error);
$updata['id'] = $id;
//savelogdb($db, $rsuser['id'], 'zc_tokapi', $datarow, $updata);
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['data'] = $updata;
return succjson($ret);
}
public static function json_pubkey() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p u'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$pubkey = $post->get('pubkey');
$id = $post->getint('id');
$oridata = $post->get('oridata');
$hash = $post->get('hash');
$pubkey = $post->get('pubkey');
$publickey = $pubkey;
if (strpos($publickey, '-----BEGIN PUBLIC KEY-----') === false)
$publickey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($publickey, 64, "\n") . "\n-----END PUBLIC KEY-----";
$pubkey = str_replace('-----BEGIN PUBLIC KEY-----', '', $pubkey);
$pubkey = str_replace('-----END PUBLIC KEY-----', '', $pubkey);
$pubkey = str_replace(["\r", "\n"], '', $pubkey);
$pubkey = trim($pubkey);
$csql = new \ciy\sql('aqf_merchantpubkey');
$csql->where('pubkey', $pubkey);
$chkrow = $db->getone($csql);
if (is_array($chkrow))
return errjson('该公钥已存在');
$sign = $post->get('sign');
$timestamp = toint(substr($oridata, 3));
if (abs(time() - $timestamp) > 300)
return errjson('请在5分钟内完成操作');
if (sha256($oridata) != $hash)
return errjson('hash数据校验失败');
$signbin = hex2bin($sign);
if ($signbin === false)
return errjson('签名格式错误');
$hashbin = hex2bin($hash);
if ($hashbin === false)
return errjson('hash格式错误');
$result = openssl_verify($hashbin, $signbin, $publickey, OPENSSL_ALGO_SHA256);
if ($result === 0)
return errjson('验签失败');
else if ($result !== 1)
return errjson('验签错误:' . openssl_error_string());
$hash = strtoupper($hash);
try {
$db->begin();
$updata = array();
$updata['pubkey'] = $pubkey;
$csql = new \ciy\sql('zc_tokapi');
$csql->where('id', $id);
if ($db->update($csql, $updata) === false)
throw new \Exception('更新失败:' . $db->error);
$updata['id'] = $id;
//savelogdb($db, $rsuser['id'], 'zc_tokapi', $datarow, $updata);
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['data'] = $updata;
$ret['aqf_merchantpubkey'] = getrelation($db, [$updata], 'aqf_merchantpubkey', 'pubkeyid');
return succjson($ret);
}
public static function json_del() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p d'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->get('ids');
if (empty($ids))
return errjson('请选择至少一条');
$csql = new \ciy\sql('zc_tokapi');
$csql->where('vuser', $rsuser['id']);
$csql->where('id in', $ids);
$rows = $db->get($csql);
$vids = array();
try {
$db->begin();
foreach ($rows as $row) {
$delid = $row['id'];
//delall($db, $delid, 'tablexx', 'xxid', '运动员'); //deltimeall
delme($db, $delid, 'zc_tokapi');
$vids[] = $delid;
}
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['ids'] = $vids;
return succjson($ret);
}
}