first commit

This commit is contained in:
2025-11-28 10:08:12 +08:00
commit 09a14bf0a3
1088 changed files with 145132 additions and 0 deletions
+198
View File
@@ -0,0 +1,198 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'getcount':
$thtime=date("Y-m-d").' 00:00:00';
$count1=$DB->getColumn("SELECT count(*) from pre_order");
$count2=$DB->getColumn("SELECT count(*) from pre_user");
$plugincount=$DB->getColumn("SELECT count(*) from pre_plugin");
if($plugincount<1){
\lib\Plugin::updateAll();
}
$isConvert = $DB->getRow("SELECT * FROM pre_channel WHERE status=1 AND config IS NULL LIMIT 1");
if($isConvert){
convert_channel_data();
\lib\Plugin::updateAll();
}
$orderrow=$DB->getRow("SELECT COUNT(*) allnum,COUNT(IF(status>0, 1, NULL)) sucnum FROM pre_order WHERE addtime>='$thtime'");
$success_rate = 100;
if($orderrow){
if($orderrow['allnum'] > 0){
$success_rate = round($orderrow['sucnum']/$orderrow['allnum']*100,2);
}
}
$paytype = [];
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
}
unset($rs);
$channel = [];
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
foreach($rs as $row){
$channel[$row['id']] = $row['name'];
}
unset($rs);
$tongji_cachetime=getSetting('tongji_cachetime', true);
$tongji_cache = $CACHE->read('tongji');
if($tongji_cachetime+3600>=time() && $tongji_cache && !isset($_GET['getnew'])){
$array = unserialize($tongji_cache);
$result=["code"=>0,"type"=>"cache","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($array['usermoney'],2),"settlemoney"=>round($array['settlemoney'],2),"success_rate"=>$success_rate,"order_today"=>$array['order_today'],"order"=>[]];
}else{
$usermoney=$DB->getColumn("SELECT SUM(money) FROM pre_user WHERE money!='0.00'");
$settlemoney=$DB->getColumn("SELECT SUM(money) FROM pre_settle");
$today=date("Y-m-d");
$rs=$DB->query("SELECT type,channel,realmoney,profitmoney from pre_order where status=1 and date>='$today'");
foreach($paytype as $id=>$type){
$order_paytype[$id]=0;
$profit_paytype[$id]=0;
}
foreach($channel as $id=>$type){
$order_channel[$id]=0;
}
while($row = $rs->fetch())
{
$order_paytype[$row['type']]+=$row['realmoney'];
$order_channel[$row['channel']]+=$row['realmoney'];
if(!empty($row['profitmoney'])){
$profit_paytype[$row['type']]+=$row['profitmoney'];
}
}
foreach($order_paytype as $k=>$v){
$order_paytype[$k] = round($v,2);
}
foreach($order_channel as $k=>$v){
$order_channel[$k] = round($v,2);
}
foreach($profit_paytype as $k=>$v){
$profit_paytype[$k] = round($v,2);
}
$allmoney=0;
foreach($order_paytype as $order){
$allmoney+=$order;
}
$allprofit=0;
foreach($profit_paytype as $money){
$allprofit+=$money;
}
$order_today['all']=round($allmoney,2);
$order_today['profit_all']=round($allprofit,2);
$order_today['paytype']=$order_paytype;
$order_today['channel']=$order_channel;
$order_today['profit_paytype']=$profit_paytype;
saveSetting('tongji_cachetime',time());
$CACHE->save('tongji',serialize(["usermoney"=>$usermoney,"settlemoney"=>$settlemoney,"order_today"=>$order_today]));
$result=["code"=>0,"type"=>"online","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($usermoney,2),"settlemoney"=>round($settlemoney,2),"success_rate"=>$success_rate,"order_today"=>$order_today,"order"=>[]];
}
for($i=1;$i<7;$i++){
$day = date("Ymd", strtotime("-{$i} day"));
if($order_tongji = $CACHE->read('order_'.$day)){
$result["order"][$day] = unserialize($order_tongji);
}else{
break;
}
}
exit(json_encode($result));
break;
case 'set':
if(isset($_POST['localurl'])){
if(!empty($_POST['localurl']) && (substr($_POST['localurl'],0,4)!='http' || substr($_POST['localurl'],-1)!='/'))exit('{"code":-1,"msg":"回调专用网址格式错误"}');
}
if(isset($_POST['apiurl'])){
if(!empty($_POST['apiurl']) && (substr($_POST['apiurl'],0,4)!='http' || substr($_POST['apiurl'],-1)!='/'))exit('{"code":-1,"msg":"用户对接网址格式错误"}');
}
if(isset($_POST['login_apiurl'])){
if(!empty($_POST['login_apiurl']) && (substr($_POST['login_apiurl'],0,4)!='http' || substr($_POST['login_apiurl'],-1)!='/'))exit('{"code":-1,"msg":"聚合登录API接口地址格式错误"}');
}
foreach($_POST as $k=>$v){
saveSetting($k, $v);
}
$ad=$CACHE->clear();
if($ad)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"修改设置失败['.$DB->error().']"}');
break;
case 'setGonggao':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$sql = "UPDATE pre_anounce SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改状态成功!"}');
else exit('{"code":-1,"msg":"修改状态失败['.$DB->error().']"}');
break;
case 'delGonggao':
$id=intval($_GET['id']);
$sql = "DELETE FROM pre_anounce WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"删除公告成功!"}');
else exit('{"code":-1,"msg":"删除公告失败['.$DB->error().']"}');
break;
case 'iptype':
$result = [
['name'=>'0_X_FORWARDED_FOR', 'ip'=>real_ip(0), 'city'=>get_ip_city(real_ip(0))],
['name'=>'1_X_REAL_IP', 'ip'=>real_ip(1), 'city'=>get_ip_city(real_ip(1))],
['name'=>'2_REMOTE_ADDR', 'ip'=>real_ip(2), 'city'=>get_ip_city(real_ip(2))]
];
exit(json_encode($result));
break;
case 'setArticle': //文章状态
$id=intval($_GET['id']);
$active=intval($_GET['active']);
$DB->exec("update pre_article set active='$active' where id='{$id}'");
exit('{"code":0,"msg":"succ"}');
break;
case 'article_upload':
$file_name = $_FILES['imgFile']['name'];
$tmp_name = $_FILES['imgFile']['tmp_name'];
//获得文件扩展名
$temp_arr = explode(".", $file_name);
$file_ext = array_pop($temp_arr);
$file_ext = strtolower(trim($file_ext));
if (in_array($file_ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp')) === false) {
exit('{"error":1,"message":"上传文件扩展名是不允许的扩展名。"}');
}
$filename = md5_file($tmp_name).'.'.$file_ext;
$fileurl = '/assets/img/article/'.$filename;
if(copy($tmp_name, ROOT.'assets/img/article/'.$filename)){
exit('{"error":0,"url":"'.$fileurl.'"}');
}else{
exit('{"error":1,"message":"上传失败,请确保有本地写入权限"}');
}
break;
case 'testproxy':
$conf['proxy_server'] = trim($_POST['proxy_server']);
$conf['proxy_port'] = $_POST['proxy_port'];
$conf['proxy_user'] = trim($_POST['proxy_user']);
$conf['proxy_pwd'] = trim($_POST['proxy_pwd']);
$conf['proxy_type'] = $_POST['proxy_type'];
try{
check_proxy('https://dl.amh.sh/ip.htm');
}catch(Exception $e){
try{
check_proxy('https://myip.ipip.net/');
}catch(Exception $e){
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
}
}
exit('{"code":0}');
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+379
View File
@@ -0,0 +1,379 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'orderList':
$paytype = [];
$paytypes = [];
$rs = $DB->getAll("SELECT * FROM pre_type");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
$paytypes[$row['id']] = $row['name'];
}
unset($rs);
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND A.`uid`='$uid'";
}
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND A.`type`='$type'";
}elseif(isset($_POST['channel']) && !empty($_POST['channel'])) {
$channel = intval($_POST['channel']);
$sql.=" AND A.`channel`='$channel'";
}elseif(isset($_POST['subchannel']) && !empty($_POST['subchannel'])) {
$subchannel = trim($_POST['subchannel']);
$subchannel = explode('|', $subchannel);
$subchannel = array_map('intval', $subchannel);
$sql.=" AND A.`subchannel` IN (".implode(",", $subchannel).")";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND A.status={$dstatus}";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
if($_POST['column']=='name'){
$sql.=" AND A.`{$_POST['column']}` like '%{$_POST['value']}%'";
}else{
if(($_POST['column'] == 'money' || $_POST['column'] == 'realmoney' || $_POST['column'] == 'getmoney') && strpos($_POST['value'],'-')){
$money = explode('-', $_POST['value']);
$sql.=" AND A.`{$_POST['column']}`>='{$money[0]}' AND A.`{$_POST['column']}`<='{$money[1]}'";
}else{
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
}
}
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_order A WHERE{$sql}");
$list = $DB->getAll("SELECT A.*,B.plugin FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE{$sql} order by trade_no desc limit $offset,$limit");
$list2 = [];
foreach($list as $row){
$row['typename'] = $paytypes[$row['type']];
$row['typeshowname'] = $paytype[$row['type']];
$list2[] = $row;
}
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
break;
case 'statistics':
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND A.`uid`='$uid'";
}
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND A.`type`='$type'";
}elseif(isset($_POST['channel']) && !empty($_POST['channel'])) {
$channel = intval($_POST['channel']);
$sql.=" AND A.`channel`='$channel'";
}elseif(isset($_POST['subchannel']) && !empty($_POST['subchannel'])) {
$subchannel = intval($_POST['subchannel']);
$sql.=" AND A.`subchannel`='$subchannel'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND A.status={$dstatus}";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
if($_POST['column']=='name'){
$sql.=" AND A.`{$_POST['column']}` like '%{$_POST['value']}%'";
}else{
if(($_POST['column'] == 'money' || $_POST['column'] == 'realmoney' || $_POST['column'] == 'getmoney') && strpos($_POST['value'],'-')){
$money = explode('-', $_POST['value']);
$sql.=" AND A.`{$_POST['column']}`>='{$money[0]}' AND A.`{$_POST['column']}`<='{$money[1]}'";
}else{
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
}
}
}
// 统计数据
$resultMoneyData = $DB->getRow("SELECT
SUM(money) AS totalMoney,
SUM(CASE WHEN A.status = 1 THEN money ELSE 0 END) AS successMoney,
SUM(CASE WHEN A.status = 0 THEN money ELSE 0 END) AS unpaidMoney,
SUM(CASE WHEN A.status = 2 THEN refundmoney ELSE 0 END) AS refundMoney
FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} order by trade_no desc");
$resultCount = $DB->getRow("SELECT
COUNT(*) AS totalCount,
SUM(CASE WHEN A.status = 1 THEN 1 ELSE 0 END) AS successCount,
SUM(CASE WHEN A.status = 0 THEN 1 ELSE 0 END) AS unpaidCount,
SUM(CASE WHEN A.status = 2 THEN 1 ELSE 0 END) AS refundCount
FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} order by trade_no desc");
// 获取平台总收入利润
$platformProfit = $DB->getColumn("SELECT SUM(A.profitmoney) FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE {$sql} AND status = 1 order by trade_no desc");
$result = [
'totalMoney' => number_format($resultMoneyData['totalMoney'], 2, '.', '') ?? 0.00,
'successMoney' => number_format($resultMoneyData['successMoney'], 2, '.', '') ?? 0.00,
'unpaidMoney' => number_format($resultMoneyData['unpaidMoney'], 2, '.', '') ?? 0.00,
'refundMoney' => number_format($resultMoneyData['refundMoney'], 2, '.', '') ?? 0.00,
'totalCount' => $resultCount['totalCount'] ?? '0',
'successCount' => $resultCount['successCount'] ?? '0',
'unpaidCount' => $resultCount['unpaidCount'] ?? '0',
'refundCount' => $resultCount['refundCount'] ?? '0',
'platformProfit' => number_format($platformProfit, 2, '.', '') ?? 0.00
];
$result['successRate'] = $result['totalCount'] > 0 ? round(($result['totalCount']-$result['unpaidCount']) / $result['totalCount'] * 100, 2) : 0;
exit(json_encode(['code'=>0, 'data'=>$result]));
break;
case 'riskList':
$sql=" 1=1";
if(isset($_POST['value']) && !empty($_POST['value'])) {
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
}
if(isset($_POST['type']) && $_POST['type']>-1) {
$type = intval($_POST['type']);
$sql.=" AND `type`={$type}";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_risk WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_risk WHERE{$sql} order by id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'setStatus': //改变订单状态
$trade_no=trim($_GET['trade_no']);
$status=is_numeric($_GET['status'])?intval($_GET['status']):exit('{"code":200}');
if($status==5){
if($DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'"))
exit('{"code":200}');
else
exit('{"code":400,"msg":"删除订单失败!['.$DB->error().']"}');
}else{
if($DB->exec("update pre_order set status='$status' where trade_no='$trade_no'")!==false)
exit('{"code":200}');
else
exit('{"code":400,"msg":"修改订单失败!['.$DB->error().']"}');
}
break;
case 'order': //订单详情
$trade_no=trim($_GET['trade_no']);
$row=$DB->getRow("select A.*,B.showname typename,C.name channelname from pre_order A,pre_type B,pre_channel C where trade_no='$trade_no' and A.type=B.id and A.channel=C.id limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前订单不存在或未成功选择支付通道!"}');
$row['subchannelname'] = $row['subchannel'] > 0 ? $DB->findColumn('subchannel', 'name', ['id'=>$row['subchannel']]) : '';
if($row['status']==2){
$row['refundtime'] = $DB->findColumn('refundorder', 'addtime', ['trade_no'=>$trade_no], 'refund_no DESC');
}
$result=array("code"=>0,"msg"=>"succ","data"=>$row);
exit(json_encode($result));
break;
case 'subOrders':
$trade_no=trim($_GET['trade_no']);
$list = \lib\Payment::getSubOrders($trade_no);
exit(json_encode(['code'=>0, 'data'=>$list, 'settle'=>$DB->findColumn('order', 'settle', ['trade_no'=>$trade_no])]));
break;
case 'operation': //批量操作订单
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
$checkbox=$_POST['checkbox'];
$i=0;
foreach($checkbox as $trade_no){
if($status==4)$DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'");
elseif($status==3){
\lib\Order::unfreeze($trade_no);
}
elseif($status==2){
\lib\Order::freeze($trade_no);
}
else $DB->exec("update pre_order set status='$status' where trade_no='$trade_no' limit 1");
$i++;
}
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
break;
case 'getmoney': //退款查询
if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}');
$trade_no=trim($_POST['trade_no']);
$api=isset($_POST['api'])?intval($_POST['api']):0;
$result = \lib\Order::refund_info($trade_no, $api);
exit(json_encode($result));
break;
case 'refund': //退款操作
$trade_no=trim($_POST['trade_no']);
$money = trim($_POST['money']);
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
$refund_no = date("YmdHis").rand(11111,99999);
$result = \lib\Order::refund($refund_no, $trade_no, $money);
if($result['code'] == 0){
$result['msg'] = '已成功从UID:'.$result['uid'].'扣除'.$result['reducemoney'].'元余额';
}
exit(json_encode($result));
break;
case 'apirefund': //API退款操作
$trade_no=trim($_POST['trade_no']);
$paypwd=trim($_POST['paypwd']);
$money = trim($_POST['money']);
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
if($paypwd!=$conf['admin_paypwd'])
exit('{"code":-1,"msg":"支付密码输入错误!"}');
$refund_no = date("YmdHis").rand(11111,99999);
$result = \lib\Order::refund($refund_no, $trade_no, $money, 1);
if($result['code'] == 0){
$result['msg'] = '退款成功!退款金额¥'.$result['money'];
if($result['reducemoney']>0){
$result['msg'] .= ',并成功从UID:'.$result['uid'].'扣除'.$result['reducemoney'].'元余额';
}
}
exit(json_encode($result));
break;
case 'freeze': //冻结订单
$trade_no=trim($_POST['trade_no']);
$result = \lib\Order::freeze($trade_no);
exit(json_encode($result));
break;
case 'unfreeze': //解冻订单
$trade_no=trim($_POST['trade_no']);
$result = \lib\Order::unfreeze($trade_no);
exit(json_encode($result));
break;
case 'notify': //获取回调地址
$trade_no=trim($_POST['trade_no']);
$row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前订单不存在!"}');
$url=creat_callback($row);
if($row['notify']>0)
$DB->exec("update pre_order set notify=0,notifytime=NULL where trade_no='$trade_no'");
exit('{"code":0,"url":"'.($_POST['isreturn']==1?$url['return']:$url['notify']).'"}');
break;
case 'fillorder': //手动补单
$trade_no=trim($_POST['trade_no']);
$row=$DB->getRow("SELECT A.*,B.name typename,B.showname typeshowname FROM pre_order A left join pre_type B on A.type=B.id WHERE trade_no=:trade_no limit 1", [':trade_no'=>$trade_no]);
if(!$row)
exit('{"code":-1,"msg":"当前订单不存在!"}');
if($row['status']>0)exit('{"code":-1,"msg":"当前订单不是未完成状态!"}');
if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$trade_no'")){
$DB->exec("update `pre_order` set `endtime` ='$date',`date` =NOW() where `trade_no`='$trade_no'");
$channel=\lib\Channel::get($row['channel']);
processOrder($row);
}
exit('{"code":0,"msg":"补单成功"}');
break;
case 'alipaydSettle': //支付宝直付通确认结算
$trade_no=trim($_POST['trade_no']);
$row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前订单不存在!"}');
if($row['status']==0)exit('{"code":-1,"msg":"当前订单状态是未支付"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
if(!$channel){
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
}
try{
if($channel['plugin'] == 'alipayd'){
\lib\Payment::alipaydSettle($channel, $row);
}elseif($channel['plugin'] == 'wxpaynp'){
\lib\Payment::wxpaynpSettle($channel, $row);
}else{
exit('{"code":-1,"msg":"支付插件不支持该操作"}');
}
$DB->exec("update `pre_order` set `settle`=2 where `trade_no`='$trade_no'");
exit('{"code":0,"msg":"结算成功!"}');
}catch(Exception $e){
$DB->exec("update `pre_order` set `settle`=3 where `trade_no`='$trade_no'");
exit('{"code":-1,"msg":"结算失败,'.$e->getMessage().'"}');
}
break;
case 'alipayPreAuthPay': //支付宝授权资金支付
$trade_no=trim($_POST['trade_no']);
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
if(!$order)
exit('{"code":-1,"msg":"当前订单不存在!"}');
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
if(!$channel){
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
}
try{
$result = \lib\Payment::alipayPreAuthPay($channel, $order);
$api_trade_no = $result['trade_no'];
$buyer_id = $result['buyer_user_id'];
$total_amount = $result['total_amount'];
processNotify($order, $api_trade_no, $buyer_id);
exit('{"code":0,"msg":"授权资金支付成功!"}');
}catch(Exception $e){
$errmsg = $e->getMessage();
exit('{"code":-1,"msg":"授权资金支付失败,'.$errmsg.'"}');
}
break;
case 'alipayUnfreeze': //支付宝授权资金解冻
$trade_no=trim($_POST['trade_no']);
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
if(!$order)
exit('{"code":-1,"msg":"当前订单不存在!"}');
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
if(!$channel){
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
}
try{
\lib\Payment::alipayUnfreeze($channel, $order);
$DB->exec("update `pre_order` set `status`=0 where `trade_no`='$trade_no'");
exit('{"code":0,"msg":"授权资金解冻成功!"}');
}catch(Exception $e){
$errmsg = $e->getMessage();
exit('{"code":-1,"msg":"授权资金解冻失败,'.$errmsg.'"}');
}
break;
case 'alipayRedPacketTansfer': //支付宝红包转账重试
$trade_no=trim($_POST['trade_no']);
$order=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1");
if(!$order)
exit('{"code":-1,"msg":"当前订单不存在!"}');
$channel = $order['subchannel'] > 0 ? \lib\Channel::getSub($order['subchannel']) : \lib\Channel::get($order['channel'], $DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]));
if(!$channel){
exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
}
if(!empty($channel['appmchid'])) $payee_user_id = $channel['appmchid'];
else $payee_user_id = $DB->findColumn('user', 'alipay_uid', ['uid'=>$order['uid']]);
if(!$payee_user_id) exit('{"code":-1,"msg":"当前商户未绑定支付宝账号"}');
try{
\lib\Payment::alipayRedPacketTransfer($channel, $payee_user_id, $order['money'], $order['api_trade_no']);
$DB->exec("update `pre_order` set `settle`=2 where `trade_no`='$trade_no'");
exit('{"code":0,"msg":"红包打款成功!"}');
}catch(Exception $e){
$errmsg = $e->getMessage();
exit('{"code":-1,"msg":"红包打款失败,'.$errmsg.'"}');
}
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+720
View File
@@ -0,0 +1,720 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'channelList':
$sql=" 1=1";
if(isset($_POST['id']) && !empty($_POST['id'])) {
$id = intval($_POST['id']);
$sql.=" AND A.`id`='$id'";
}
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND A.`type`='$type'";
}
if(isset($_POST['plugin']) && !empty($_POST['plugin'])) {
$plugin = trim($_POST['plugin']);
$sql.=" AND A.`plugin`='$plugin'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND A.`status`={$dstatus}";
}
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
$kw = trim(daddslashes($_POST['kw']));
$sql.=" AND (A.`id`='{$kw}' OR A.`name` like '%{$kw}%')";
}
$list = $DB->getAll("SELECT A.*,B.name typename,B.showname typeshowname FROM pre_channel A LEFT JOIN pre_type B ON A.type=B.id WHERE{$sql} ORDER BY id DESC");
exit(json_encode($list));
break;
case 'getPayType':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'setPayType':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$sql = "UPDATE pre_type SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改支付方式成功!"}');
else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}');
break;
case 'delPayType':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_type where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$row=$DB->getRow("select * from pre_channel where type='$id' limit 1");
if($row)
exit('{"code":-1,"msg":"删除失败,存在使用该支付方式的支付通道"}');
$sql = "DELETE FROM pre_type WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"删除支付方式成功!"}');
else exit('{"code":-1,"msg":"删除支付方式失败['.$DB->error().']"}');
break;
case 'savePayType':
if($_POST['action'] == 'add'){
$name=trim($_POST['name']);
$showname=trim($_POST['showname']);
$device=intval($_POST['device']);
if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){
exit('{"code":-1,"msg":"调用值不符合规则"}');
}
$row=$DB->getRow("select * from pre_type where name='$name' and device='$device' limit 1");
if($row)
exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}');
$data = ['name'=>$name, 'showname'=>$showname, 'device'=>$device, 'status'=>1];
if($DB->insert('type', $data))exit('{"code":0,"msg":"新增支付方式成功!"}');
else exit('{"code":-1,"msg":"新增支付方式失败['.$DB->error().']"}');
}else{
$id=intval($_POST['id']);
$name=trim($_POST['name']);
$showname=trim($_POST['showname']);
$device=intval($_POST['device']);
if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){
exit('{"code":-1,"msg":"调用值不符合规则"}');
}
$row=$DB->getRow("select * from pre_type where name='$name' and device='$device' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}');
$data = ['name'=>$name, 'showname'=>$showname, 'device'=>$device];
if($DB->update('type', $data, ['id'=>$id])!==false)exit('{"code":0,"msg":"修改支付方式成功!"}');
else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}');
}
break;
case 'getPlugin':
$name = trim($_GET['name']);
$row=$DB->getRow("SELECT * FROM pre_plugin WHERE name='$name'");
if($row){
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
}
else exit('{"code":-1,"msg":"当前支付插件不存在!"}');
break;
case 'getPlugins':
$typeid = intval($_GET['typeid']);
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
if(!$type)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$list=$DB->getAll("SELECT name,showname FROM pre_plugin WHERE types LIKE '%$type%' ORDER BY name ASC");
if($list){
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
exit(json_encode($result));
}
else exit('{"code":-1,"msg":"没有找到支持该支付方式的插件"}');
break;
case 'getChannel':
$id=intval($_GET['id']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'getChannels':
$typeid = intval($_GET['typeid']);
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
if(!$type)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE type='$typeid' and status=1 ORDER BY id ASC");
if($list){
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
exit(json_encode($result));
}
else exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}');
break;
case 'getChannelsByPlugin':
$plugin = $_GET['plugin'];
if($plugin){
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE plugin='$plugin' ORDER BY id ASC");
}else{
$list=$DB->getAll("SELECT id,name FROM pre_channel ORDER BY id ASC");
}
if($list){
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
exit(json_encode($result));
}
else exit('{"code":-1,"msg":"没有找到支持该支付插件的通道"}');
break;
case 'getSubChannels':
$channel = intval($_GET['channel']);
$uid = intval($_GET['uid']);
$sql = " channel='$channel'";
if($uid > 0) $sql .= " AND uid='$uid'";
$list=$DB->getAll("SELECT id,name,channel,apply_id FROM pre_subchannel WHERE{$sql} ORDER BY id ASC");
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
exit(json_encode($result));
break;
case 'setChannel':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
if($status==1 && empty($row['config'])){
exit('{"code":-1,"msg":"请先配置好密钥后再开启"}');
}
$sql = "UPDATE pre_channel SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改支付通道成功!"}');
else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}');
break;
case 'delChannel':
$id=intval($_GET['id']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
if($DB->find('psreceiver', '*', ['channel'=>$id])){
exit('{"code":-1,"msg":"当前支付通道下有分账规则,需要先删除"}');
}
if($DB->find('applychannel', '*', ['channel'=>$id])){
exit('{"code":-1,"msg":"当前支付通道关联了进件渠道,无法删除"}');
}
$sql = "DELETE FROM pre_channel WHERE id='$id'";
if($DB->exec($sql)){
$DB->exec("DELETE FROM pre_subchannel WHERE channel='$id'");
exit('{"code":0,"msg":"删除支付通道成功!"}');
}
else exit('{"code":-1,"msg":"删除支付通道失败['.$DB->error().']"}');
break;
case 'saveChannel':
if($_POST['action'] == 'add'){
$name=trim($_POST['name']);
$rate=trim($_POST['rate']);
$costrate=trim($_POST['costrate']);
$type=intval($_POST['type']);
$plugin=trim($_POST['plugin']);
$daytop=intval($_POST['daytop']);
$mode=intval($_POST['mode']);
$paymin=trim($_POST['paymin']);
$paymax=trim($_POST['paymax']);
if(!preg_match('/^[0-9.]+$/',$rate)){
exit('{"code":-1,"msg":"分成比例不符合规则"}');
}
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
exit('{"code":-1,"msg":"通道成本不符合规则"}');
}
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
}
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
}
$row=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' LIMIT 1");
if($row)
exit('{"code":-1,"msg":"支付通道名称重复"}');
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax];
if($DB->insert('channel', $data))exit('{"code":0,"msg":"新增支付通道成功!"}');
else exit('{"code":-1,"msg":"新增支付通道失败['.$DB->error().']"}');
}elseif($_POST['action'] == 'copy'){
$id=intval($_POST['id']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
$name=trim($_POST['name']);
$rate=trim($_POST['rate']);
$costrate=trim($_POST['costrate']);
$type=intval($_POST['type']);
$plugin=trim($_POST['plugin']);
$daytop=intval($_POST['daytop']);
$mode=intval($_POST['mode']);
$paymin=trim($_POST['paymin']);
$paymax=trim($_POST['paymax']);
if(!preg_match('/^[0-9.]+$/',$rate)){
exit('{"code":-1,"msg":"分成比例不符合规则"}');
}
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
exit('{"code":-1,"msg":"通道成本不符合规则"}');
}
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
}
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
}
$nrow=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' LIMIT 1");
if($nrow)
exit('{"code":-1,"msg":"支付通道名称重复"}');
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax, 'config'=>$row['config'], 'apptype'=>$row['apptype'], 'appwxmp'=>$row['appwxmp'], 'appwxa'=>$row['appwxa']];
if($DB->insert('channel', $data))exit('{"code":0,"msg":"复制支付通道成功!"}');
else exit('{"code":-1,"msg":"复制支付通道失败['.$DB->error().']"}');
}elseif($_POST['action'] == 'edit'){
$id=intval($_POST['id']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
$name=trim($_POST['name']);
$rate=trim($_POST['rate']);
$costrate=trim($_POST['costrate']);
$type=intval($_POST['type']);
$plugin=trim($_POST['plugin']);
$daytop=intval($_POST['daytop']);
$mode=intval($_POST['mode']);
$paymin=trim($_POST['paymin']);
$paymax=trim($_POST['paymax']);
if(!preg_match('/^[0-9.]+$/',$rate)){
exit('{"code":-1,"msg":"分成比例不符合规则"}');
}
if(!empty($costrate) && !preg_match('/^[0-9.]+$/',$costrate)){
exit('{"code":-1,"msg":"通道成本不符合规则"}');
}
if($paymin && !preg_match('/^[0-9.]+$/',$paymin)){
exit('{"code":-1,"msg":"最小支付金额不符合规则"}');
}
if($paymax && !preg_match('/^[0-9.]+$/',$paymax)){
exit('{"code":-1,"msg":"最大支付金额不符合规则"}');
}
$nrow=$DB->getRow("SELECT * FROM pre_channel WHERE name='$name' AND id<>$id LIMIT 1");
if($nrow)
exit('{"code":-1,"msg":"支付通道名称重复"}');
$data = ['name'=>$name, 'rate'=>$rate, 'costrate'=>$costrate, 'mode'=>$mode, 'type'=>$type, 'plugin'=>$plugin, 'daytop'=>$daytop, 'paymin'=>$paymin, 'paymax'=>$paymax];
if($DB->update('channel', $data, ['id'=>$id])!==false){
if($row['daystatus']==1 && ($daytop==0 || $daytop>$row['daytop'])){
$DB->exec("UPDATE pre_channel SET daystatus=0 WHERE id='$id'");
}
exit('{"code":0,"msg":"修改支付通道成功!"}');
}else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}');
}
break;
case 'channelInfo':
$id=intval($_GET['id']);
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
$typename = $DB->getColumn("SELECT name FROM pre_type WHERE id='{$row['type']}'");
//if($row['mode']>0){
// exit('{"code":-1,"msg":"当前通道为商户直清模式,请进入用户列表-编辑-接口密钥进行配置"}');
//}
$apptype = explode(',',$row['apptype']);
$plugin = \lib\Plugin::getConfig($row['plugin']);
if(!$plugin)
exit('{"code":-1,"msg":"当前支付插件不存在!"}');
$data = '<div class="modal-body"><form class="form" id="form-info">';
$select_list = [];
if(!empty($plugin['select_'.$typename])){
$select_list = $plugin['select_'.$typename];
}
elseif(!empty($plugin['select'])){
$select_list = $plugin['select'];
}
if(count($select_list) > 0){
$select = '';
foreach($select_list as $key=>$input){
$select .= '<label><input type="checkbox" '.(in_array($key,$apptype)?'checked':null).' name="apptype[]" value="'.$key.'">'.$input.'</label>&nbsp;';
}
$data .= '<div class="form-group"><input type="hidden" id="isapptype" name="isapptype" value="1"/><label>请选择可用的接口:</label><div class="checkbox">'.$select.'</div></div>';
}
$config = json_decode($row['config'],true);
foreach($plugin['inputs'] as $key=>$input){
if($input['type'] == 'textarea'){
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><textarea name="config['.$key.']" rows="2" class="form-control" placeholder="'.$input['note'].'">'.$config[$key].'</textarea></div>';
}elseif($input['type'] == 'select'){
$addOptions = '';
foreach($input['options'] as $k=>$v){
$addOptions.='<option value="'.$k.'" '.($config[$key]==$k?'selected':'').'>'.$v.'</option>';
}
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><select class="form-control" name="config['.$key.']" default="'.$config[$key].'">'.$addOptions.'</select></div>';
}elseif($input['type'] == 'checkbox'){
$checked = $config[$key] ?? [];
$addOptions = '';
foreach($input['options'] as $k=>$v){
$addOptions.='<label><input type="checkbox" '.(in_array($k,$checked)?'checked':null).' name="config['.$key.'][]" value="'.$k.'">'.$v.'</label>&nbsp;';
}
$data .= '<div class="form-group"><label>'.$input['name'].'</label><div class="checkbox">'.$addOptions.'</div></div>';
}else{
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><input type="text" name="config['.$key.']" value="'.$config[$key].'" class="form-control" placeholder="'.$input['note'].'"/></div>';
}
}
if($plugin['bindwxmp'] && $row['type']==2){
$wxmplist = $DB->getAll("SELECT * FROM pre_weixin WHERE type=0 ORDER BY id ASC");
$addOptions = '<option value="0">不绑定</option>';
foreach($wxmplist as $wxmp){
$addOptions.='<option value="'.$wxmp['id'].'" '.($row['appwxmp']==$wxmp['id']?'selected':'').'>'.$wxmp['name'].''.$wxmp['appid'].''.'</option>';
}
$data .= '<div class="form-group"><label>绑定微信公众号:</label><br/><select class="form-control" name="appwxmp" default="'.$row[$key].'">'.$addOptions.'</select></div>';
}
if($plugin['bindwxa'] && $row['type']==2){
$wxalist = $DB->getAll("SELECT * FROM pre_weixin WHERE type=1 ORDER BY id ASC");
$addOptions = '<option value="0">不绑定</option>';
foreach($wxalist as $wxa){
$addOptions.='<option value="'.$wxa['id'].'" '.($row['appwxa']==$wxa['id']?'selected':'').'>'.$wxa['name'].''.$wxa['appid'].''.'</option>';
}
$data .= '<div class="form-group"><label>绑定微信小程序:</label><br/><select class="form-control" name="appwxa" default="'.$row[$key].'">'.$addOptions.'</select></div>';
}
$note = str_replace(['[siteurl]','[channel]','[basedir]'],[$siteurl,$id,ROOT],$plugin['note']);
$data .= '<button type="button" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block">保存</button></form><br/><font color="green">'.$note.'</font></div>';
$result=array("code"=>0,"msg"=>"succ","data"=>$data);
exit(json_encode($result));
break;
case 'saveChannelInfo':
$id=intval($_GET['id']);
$config=isset($_POST['config'])?$_POST['config']:null;
$appwxmp=isset($_POST['appwxmp'])?intval($_POST['appwxmp']):null;
$appwxa=isset($_POST['appwxa'])?intval($_POST['appwxa']):null;
if(isset($_POST['isapptype'])){
if(!isset($_POST['apptype']) || count($_POST['apptype'])<=0)exit('{"code":-1,"msg":"请至少选择一个可用的支付接口"}');
$apptype=implode(',',$_POST['apptype']);
}else{
$apptype=null;
}
if(empty($config)) exit('{"code":-1,"msg":"填写的内容不能为空"}');
$config = json_encode($config);
$data = ['config'=>$config, 'apptype'=>$apptype, 'appwxmp'=>$appwxmp, 'appwxa'=>$appwxa];
if($DB->update('channel', $data, ['id'=>$id])!==false)exit('{"code":0,"msg":"修改支付密钥成功!"}');
else exit('{"code":-1,"msg":"修改支付密钥失败['.$DB->error().']"}');
break;
case 'getRoll':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'setRoll':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
if($status==1 && empty($row['info'])){
exit('{"code":-1,"msg":"请先配置好支付通道后再开启"}');
}
$sql = "UPDATE pre_roll SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改轮询组成功!"}');
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
break;
case 'delRoll':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
$sql = "DELETE FROM pre_roll WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"删除轮询组成功!"}');
else exit('{"code":-1,"msg":"删除轮询组失败['.$DB->error().']"}');
break;
case 'saveRoll':
if($_POST['action'] == 'add'){
$name=trim($_POST['name']);
$type=intval($_POST['type']);
$kind=intval($_POST['kind']);
$row=$DB->getRow("select * from pre_roll where name='$name' limit 1");
if($row)
exit('{"code":-1,"msg":"轮询组名称重复"}');
$sql = "INSERT INTO pre_roll (name, type, kind) VALUES ('{$name}', {$type}, {$kind})";
if($DB->exec($sql))exit('{"code":0,"msg":"新增轮询组成功!"}');
else exit('{"code":-1,"msg":"新增轮询组失败['.$DB->error().']"}');
}else{
$id=intval($_POST['id']);
$name=trim($_POST['name']);
$type=intval($_POST['type']);
$kind=intval($_POST['kind']);
$row=$DB->getRow("select * from pre_roll where name='$name' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"轮询组名称重复"}');
$sql = "UPDATE pre_roll SET name='{$name}',type='{$type}',kind='{$kind}' WHERE id='$id'";
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}');
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
}
break;
case 'rollInfo':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
$list=$DB->getAll("select id,name from pre_channel where type='{$row['type']}' and status=1 ORDER BY id ASC");
if(!$list)exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}');
if(!empty($row['info'])){
$arr = explode(',',$row['info']);
$info = [];
foreach($arr as $item){
$a = explode(':',$item);
$info[] = ['channel'=>$a[0], 'weight'=>$a[1]?$a[1]:1];
}
}else{
$info = null;
}
$result=array("code"=>0,"msg"=>"succ","channels"=>$list,"info"=>$info);
exit(json_encode($result));
break;
case 'saveRollInfo':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_roll where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前轮询组不存在!"}');
$list=$_POST['list'];
if(empty($list))
exit('{"code":-1,"msg":"通道配置不能为空!"}');
$info = '';
foreach($list as $a){
$info .= $row['kind']==1 ? $a['channel'].':'.$a['weight'].',' : $a['channel'].',';
}
$info = trim($info,',');
if(empty($info))
exit('{"code":-1,"msg":"通道配置不能为空!"}');
$sql = "UPDATE pre_roll SET info='{$info}' WHERE id='$id'";
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}');
else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}');
break;
case 'getChannelMoney': //统计支付通道金额
$type=intval($_GET['type']);
$channel=intval($_GET['channel']);
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND channel='$channel' AND status>0");
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
break;
case 'getSubChannelMoney': //统计子通道金额
$type=intval($_GET['type']);
$channel=trim($_GET['channel']);
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
$channel = explode('|', $channel);
$channel = array_map('intval', $channel);
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND subchannel IN (".implode(",", $channel).") AND status>0");
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
break;
case 'getTypeMoney': //统计支付方式金额
$type=intval($_GET['type']);
$typeid=intval($_GET['typeid']);
$today=$type==1 ? date("Y-m-d", strtotime("-1 day")) : date("Y-m-d");
$money=$DB->getColumn("SELECT SUM(realmoney) FROM pre_order WHERE date='$today' AND type='$typeid' AND status>0");
exit('{"code":0,"msg":"succ","money":"'.round($money,2).'"}');
break;
case 'getChannelRate':
$channel=intval($_GET['channel']);
$thtime = date("Y-m-d").' 00:00:00';
$all = 0;
$success = 0;
$orders=$DB->getAll("SELECT * FROM pre_order WHERE addtime>='$thtime' AND channel='$channel'");
foreach($orders as $order){
$all++;
if($order['status']>0)$success++;
}
$rate = $all > 0 ? round($success*100/$all, 2) : 0;
exit('{"code":0,"msg":"succ","rate":"'.$rate.'"}');
break;
case 'getSuccessRate':
$channel = intval($_GET['channel']);
$thtime = date("Y-m-d");
$orderrow=$DB->getRow("SELECT COUNT(*) allnum,COUNT(IF(status>0, 1, NULL)) sucnum FROM pre_order WHERE addtime>='$thtime' AND channel='$channel'");
$success_rate = $orderrow && $orderrow['allnum'] > 0 ? round($orderrow['sucnum']/$orderrow['allnum']*100,2) : 100;
exit('{"code":0,"msg":"succ","data":"' . $success_rate . '"}');
break;
case 'testpay':
$channel=intval($_POST['channel']);
$subchannel=intval($_POST['subchannel']);
$row=$DB->getRow("select * from pre_channel where id='$channel' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前支付通道不存在!"}');
if($subchannel > 0){
if(!$DB->getRow("select * from pre_subchannel where id='$subchannel' limit 1")) exit('{"code":-1,"msg":"当前子通道不存在!"}');
}
if(empty($row['config']))exit('{"code":-1,"msg":"请先配置好密钥"}');
if(!$conf['test_pay_uid'])exit('{"code":-1,"msg":"请先配置测试支付收款商户ID"}');
$money=trim(daddslashes($_POST['money']));
$name=trim(daddslashes($_POST['name']));
if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额不合法"}');
if($conf['pay_maxmoney']>0 && $money>$conf['pay_maxmoney'])exit('{"code":-1,"msg":"最大支付金额是'.$conf['pay_maxmoney'].'元"}');
if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])exit('{"code":-1,"msg":"最小支付金额是'.$conf['pay_minmoney'].'元"}');
$trade_no=date("YmdHis").rand(11111,99999);
$return_url=$siteurl.'user/test.php?ok=1&trade_no='.$trade_no;
$domain=getdomain($return_url);
if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`type`,`channel`,`subchannel`,`realmoney`,`getmoney`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 3, NOW(), :name, :money, :type, :channel, :subchannel, :realmoney, :getmoney, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$conf['test_pay_uid'], ':name'=>$name, ':money'=>$money, ':type'=>$row['type'], ':channel'=>$channel, ':subchannel'=>$subchannel, ':realmoney'=>$money, ':getmoney'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}');
$result = ['code'=>0, 'msg'=>'succ', 'url'=>'./testsubmit.php?trade_no='.$trade_no];
exit(json_encode($result));
break;
case 'getWeixin':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'delWeixin':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
$row=$DB->getRow("select * from pre_channel where appwxmp='$id' limit 1");
if($row)
exit('{"code":-1,"msg":"删除失败,存在使用该微信公众号的支付通道"}');
$row=$DB->getRow("select * from pre_channel where appwxa='$id' limit 1");
if($row)
exit('{"code":-1,"msg":"删除失败,存在使用该微信小程序的支付通道"}');
$sql = "DELETE FROM pre_weixin WHERE id='$id'";
if($DB->exec($sql)){
exit('{"code":0,"msg":"删除公众号/小程序成功!"}');
}else exit('{"code":-1,"msg":"删除公众号/小程序失败['.$DB->error().']"}');
break;
case 'saveWeixin':
if($_POST['action'] == 'add'){
$type=intval($_POST['type']);
$name=trim($_POST['name']);
$appid=trim($_POST['appid']);
$appsecret=trim($_POST['appsecret']);
$row=$DB->getRow("select * from pre_weixin where name='$name' limit 1");
if($row)
exit('{"code":-1,"msg":"名称重复"}');
$row=$DB->getRow("select * from pre_weixin where appid='$appid' limit 1");
if($row)
exit('{"code":-1,"msg":"APPID重复"}');
if($DB->insert('weixin', ['type'=>$type, 'name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret, 'status'=>1, 'addtime'=>'NOW()']))exit('{"code":0,"msg":"新增公众号/小程序成功!"}');
else exit('{"code":-1,"msg":"新增公众号/小程序失败['.$DB->error().']"}');
}else{
$id=intval($_POST['id']);
$type=intval($_POST['type']);
$name=trim($_POST['name']);
$appid=trim($_POST['appid']);
$appsecret=trim($_POST['appsecret']);
$row=$DB->getRow("select * from pre_weixin where name='$name' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"名称重复"}');
$row=$DB->getRow("select * from pre_weixin where appid='$appid' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"APPID重复"}');
if($DB->update('weixin', ['type'=>$type, 'name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改公众号/小程序成功!"}');
else exit('{"code":-1,"msg":"修改公众号/小程序失败['.$DB->error().']"}');
}
break;
case 'testweixin':
$id=intval($_POST['id']);
$row=$DB->getRow("select * from pre_weixin where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前公众号/小程序不存在!"}');
try{
$wechat = new \lib\wechat\WechatAPI($id);
$access_token = $wechat->getAccessToken(true);
}catch(Exception $e){
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
}
exit('{"code":0,"msg":"接口连接测试成功!"}');
break;
case 'getWework':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'setWework':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
$sql = "UPDATE pre_wework SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改企业微信成功!"}');
else exit('{"code":-1,"msg":"修改企业微信失败['.$DB->error().']"}');
break;
case 'delWework':
$id=intval($_GET['id']);
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
if($DB->delete('wework', ['id'=>$id])){
$DB->delete('wxkfaccount', ['wid'=>$id]);
exit('{"code":0,"msg":"删除企业微信成功!"}');
}else exit('{"code":-1,"msg":"删除企业微信失败['.$DB->error().']"}');
break;
case 'saveWework':
if($_POST['action'] == 'add'){
$name=trim($_POST['name']);
$appid=trim($_POST['appid']);
$appsecret=trim($_POST['appsecret']);
$row=$DB->getRow("select * from pre_wework where name='$name' limit 1");
if($row)
exit('{"code":-1,"msg":"名称重复"}');
$row=$DB->getRow("select * from pre_wework where appid='$appid' limit 1");
if($row)
exit('{"code":-1,"msg":"企业ID重复"}');
if($DB->insert('wework', ['name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret, 'status'=>1, 'addtime'=>'NOW()']))exit('{"code":0,"msg":"新增企业微信成功!请点击刷新客服账号数量"}');
else exit('{"code":-1,"msg":"新增企业微信失败['.$DB->error().']"}');
}else{
$id=intval($_POST['id']);
$name=trim($_POST['name']);
$appid=trim($_POST['appid']);
$appsecret=trim($_POST['appsecret']);
$row=$DB->getRow("select * from pre_wework where name='$name' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"名称重复"}');
$row=$DB->getRow("select * from pre_wework where appid='$appid' and id<>$id limit 1");
if($row)
exit('{"code":-1,"msg":"企业ID重复"}');
if($DB->update('wework', ['name'=>$name, 'appid'=>$appid, 'appsecret'=>$appsecret], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改企业微信成功!"}');
else exit('{"code":-1,"msg":"修改企业微信失败['.$DB->error().']"}');
}
break;
case 'refreshWework':
$id=intval($_POST['id']);
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
$wework = new \lib\wechat\WeWorkAPI($id);
try{
$account_list = $wework->getKFList();
if(count($account_list) == 0){
exit('{"code":-1,"msg":"没有添加客服账号"}');
}
$account_data = $DB->findAll('wxkfaccount', 'id,openkfid', ['wid'=>$id]);
foreach($account_list as $account){
$isExsist = false;
foreach($account_data as $find){
if($find['openkfid'] == $account['open_kfid']){
$isExsist = true;break;
}
}
if(!$isExsist){
$DB->insert('wxkfaccount', ['wid'=>$id, 'openkfid'=>$account['open_kfid'], 'name'=>$account['name'], 'addtime'=>'NOW()']);
}
}
foreach($account_data as $account){
$isExsist = false;
foreach($account_list as $find){
if($find['open_kfid'] == $account['openkfid']){
$isExsist = true;break;
}
}
if(!$isExsist){
$DB->delete('wxkfaccount', ['id'=>$account['id']]);
}
}
exit(json_encode(['code'=>0, 'msg'=>'成功获取到'.count($account_list).'个客服账号']));
}catch(Exception $e){
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
}
break;
case 'testWework':
$id=intval($_POST['id']);
$row=$DB->getRow("select * from pre_wework where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前企业微信不存在!"}');
$wework = new \lib\wechat\WeWorkAPI($id);
try{
$access_token = $wework->getAccessToken(true);
}catch(Exception $e){
exit('{"code":-1,"msg":"'.$e->getMessage().'"}');
}
exit('{"code":0,"msg":"接口连接测试成功!"}');
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+306
View File
@@ -0,0 +1,306 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'orderList':
$sql=" 1=1";
if(isset($_POST['rid']) && !empty($_POST['rid'])) {
$rid = intval($_POST['rid']);
$sql.=" AND A.`rid`='$rid'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND A.`status`={$dstatus}";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql.=" AND A.addtime>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql.=" AND A.addtime<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$sql.=" AND A.`{$_POST['column']}`='{$_POST['value']}'";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_channel C ON B.channel=C.id WHERE{$sql}");
$list = $DB->getAll("SELECT A.*,C.id channelid,C.name channelname FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_channel C ON B.channel=C.id WHERE{$sql} order by A.id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'get_receiver':
$id=intval($_GET['id']);
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
exit(json_encode(['code'=>0, 'data'=>$row]));
break;
case 'add_receiver':
$data = [
'channel' => intval($_POST['channel']),
'uid' => !empty($_POST['uid'])?intval($_POST['uid']):null,
'subchannel' => !empty($_POST['subchannel']) ? intval($_POST['subchannel']) : null,
'account' => trim($_POST['account']),
'name' => trim($_POST['name']),
'rate' => !empty($_POST['rate'])?trim($_POST['rate']):'30',
'minmoney' => trim($_POST['minmoney']),
'status' => 0,
'addtime' => 'NOW()'
];
if(!$data['channel'] || !$data['account'])exit('{"code":-1,"msg":"必填项不能为空"}');
if(!empty($data['uid']) && !$DB->find('user', 'uid', ['uid'=>$data['uid']]))exit('{"code":-1,"msg":"商户ID不存在"}');
if(!\lib\Channel::get($data['channel']))exit('{"code":-1,"msg":"支付通道不存在"}');
if(!strpos($data['rate'], '|') && $data['rate'] > 100) exit('{"code":-1,"msg":"分账比例不能大于100"}');
$rows = $DB->getRow("SELECT * FROM `pre_psreceiver` WHERE `channel`='{$data['channel']}' AND ".($data['uid']?"`uid`='{$data['uid']}'":"`uid` IS NULL")."");
if($rows)exit('{"code":-1,"msg":"该支付通道&UID已存在分账规则,每次支付只能同时给1个人分账"}');
if($DB->insert('psreceiver', $data)){
exit('{"code":0,"msg":"新增分账规则成功!"}');
}else{
exit('{"code":-1,"msg":"新增分账规则失败['.$DB->error().']"}');
}
break;
case 'edit_receiver':
$id=intval($_POST['id']);
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
$data = [
'channel' => intval($_POST['channel']),
'uid' => !empty($_POST['uid'])?intval($_POST['uid']):null,
'subchannel' => !empty($_POST['subchannel']) ? intval($_POST['subchannel']) : null,
'account' => trim($_POST['account']),
'name' => trim($_POST['name']),
'rate' => !empty($_POST['rate'])?trim($_POST['rate']):30,
'minmoney' => trim($_POST['minmoney']),
];
if(!$data['channel'] || !$data['account'])exit('{"code":-1,"msg":"必填项不能为空"}');
if(!empty($data['uid']) && !$DB->find('user', 'uid', ['uid'=>$data['uid']]))exit('{"code":-1,"msg":"商户ID不存在"}');
if(!\lib\Channel::get($data['channel']))exit('{"code":-1,"msg":"支付通道不存在"}');
if(!strpos($data['rate'], '|') && $data['rate'] > 100) exit('{"code":-1,"msg":"分账比例不能大于100"}');
$rows = $DB->getRow("SELECT * FROM `pre_psreceiver` WHERE `channel`='{$data['channel']}' AND ".($data['uid']?"`uid`='{$data['uid']}'":"`uid` IS NULL")." AND id!='$id'");
if($rows)exit('{"code":-1,"msg":"该支付通道&UID已存在分账规则,每次支付只能同时给1个人分账"}');
if($row['status']==1 && $data['channel'] != $row['channel']){
exit('{"code":-1,"msg":"请先将状态改为已关闭再切换通道"}');
}
if($row['status']==1 && ($data['account']!=$row['account'] || $data['name']!=$row['name'] || $data['channel']!=$row['channel'])){
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if($channel){
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$model->deleteReceiver($row['account'], $row['name']);
$result = $model->addReceiver($data['account'], $data['name']);
if($result['code'] != 0) exit(json_encode($result));
}
}
if($DB->update('psreceiver', $data, ['id'=>$id])!==false){
exit('{"code":0,"msg":"修改分账规则成功!"}');
}else{
exit('{"code":-1,"msg":"修改分账规则失败['.$DB->error().']"}');
}
break;
case 'set_receiver':
$id=intval($_POST['id']);
$status=intval($_POST['status']);
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if(!$channel) exit('{"code":-1,"msg":"当前支付通道不存在!"}');
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
if($status == 1){
$result = $model->addReceiver($row['account'], $row['name']);
}elseif($status == 0){
$result = $model->deleteReceiver($row['account'], $row['name']);
}
if($result['code'] == 0 || $status == 0 && strpos($result['msg'],'分账接收方不存在')!==false){
$DB->update('psreceiver', ['status'=>$status], ['id'=>$id]);
exit('{"code":0,"msg":"状态修改成功!"}');
}else{
exit(json_encode($result));
}
break;
case 'del_receiver':
$id=intval($_POST['id']);
$row=$DB->find('psreceiver', '*', ['id'=>$id]);
if(!$row) exit('{"code":-1,"msg":"当前分账规则不存在!"}');
if($row['status']==1){
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if($channel){
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$model->deleteReceiver($row['account'], $row['name']);
}
}
if($DB->delete('psreceiver', ['id'=>$id])){
exit('{"code":0,"msg":"删除分账规则成功!"}');
}else{
exit('{"code":-1,"msg":"删除分账规则失败['.$DB->error().']"}');
}
break;
case 'submit':
$id=intval($_POST['id']);
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,B.uid psuid,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
if($row['status']!=0&&$row['status']!=3)exit('{"code":-1,"msg":"只有待分账的订单才能提交分账"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$result = $model->submit($row['trade_no'], $row['api_trade_no'], $row['account'], $row['name'], $row['money']);
if($result['code'] == 0){
$DB->update('psorder', ['status'=>1,'settle_no'=>$result['settle_no']], ['id'=>$id]);
}elseif($result['code'] == 1){
$DB->update('psorder', ['status'=>2,'settle_no'=>$result['settle_no']], ['id'=>$id]);
if(!empty($row['psuid']) && $channel['mode']==0){
changeUserMoney($row['psuid'], $row['money'], false, '订单分账', $row['trade_no']);
}
}elseif($result['code'] == -2){
//$DB->update('psorder', ['status'=>3,'result'=>$result['msg']], ['id'=>$id]);
}
exit(json_encode($result));
break;
case 'query':
$id=intval($_POST['id']);
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,B.uid psuid,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
if($row['status']!=1)exit('{"code":-1,"msg":"只有已提交的订单才能查询结果"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$result = $model->query($row['trade_no'], $row['api_trade_no'], $row['settle_no']);
if($result['code']==0){
if($result['status']==1){
$DB->update('psorder', ['status'=>2], ['id'=>$id]);
if(!empty($row['psuid']) && $channel['mode']==0){
changeUserMoney($row['psuid'], $row['money'], false, '订单分账', $row['trade_no']);
}
}elseif($result['status']==2){
$DB->update('psorder', ['status'=>3,'result'=>$result['reason']], ['id'=>$id]);
}
}
exit(json_encode($result));
break;
case 'unfreeeze':
$id=intval($_POST['id']);
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
if($row['status']==2)exit('{"code":-1,"msg":"只有待分账的订单才能取消分账"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$result = $model->unfreeeze($row['trade_no'], $row['api_trade_no']);
if($result['code'] == 0){
$DB->update('psorder', ['status'=>4], ['id'=>$id]);
}
exit(json_encode($result));
break;
case 'return':
$id=intval($_POST['id']);
$row = $DB->getRow("SELECT A.*,B.channel,B.account,B.name,C.uid,C.subchannel FROM pre_psorder A LEFT JOIN pre_psreceiver B ON A.rid=B.id LEFT JOIN pre_order C ON C.trade_no=A.trade_no WHERE A.id=:id", [':id'=>$id]);
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
if($row['status']!=2)exit('{"code":-1,"msg":"只有分账成功的订单才能回退"}');
$channel = $row['subchannel'] > 0 ? \lib\Channel::getSub($row['subchannel']) : \lib\Channel::get($row['channel'], $row['uid']?$DB->findColumn('user', 'channelinfo', ['uid'=>$row['uid']]):null);
if(!$channel) exit('{"code":-1,"msg":"通道信息不存在"}');
$model = \lib\ProfitSharing\CommUtil::getModel($channel);
$result = $model->return($row['trade_no'], $row['api_trade_no'], $row['account'], $row['money']);
if($result['code'] == 0){
$DB->update('psorder', ['status'=>4], ['id'=>$id]);
}
exit(json_encode($result));
break;
case 'editmoney':
$id=intval($_POST['id']);
$money=trim($_POST['money']);
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额输入错误"}');
$row = $DB->getRow("SELECT * FROM pre_psorder WHERE id=:id", [':id'=>$id]);
if(!$row)exit('{"code":-1,"msg":"订单不存在"}');
if($row['status']!=0)exit('{"code":-1,"msg":"只有待分账的订单才能修改金额"}');
$DB->update('psorder', ['money'=>$money], ['id'=>$id]);
exit('{"code":0,"msg":"succ"}');
break;
case 'operation': //批量操作订单
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
$checkbox=$_POST['checkbox'];
$i=0;
foreach($checkbox as $id){
if($status==5)$DB->exec("DELETE FROM pre_psorder WHERE id='$id'");
else $DB->exec("update pre_psorder set status='$status' where id='$id' limit 1");
$i++;
}
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
break;
case 'statistics':
$sql = " 1=1";
if(isset($_POST['rid']) && !empty($_POST['rid'])) {
$rid = intval($_POST['rid']);
$sql .= " AND rid='$rid'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql .= " AND status={$dstatus}";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql .= " AND addtime>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql .= " AND addtime<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$column = daddslashes($_POST['column']);
if($column == 'money'){
$sql .= " AND {$column}='".floatval($_POST['value'])."'";
}else{
$sql .= " AND {$column}='".daddslashes($_POST['value'])."'";
}
}
$result = $DB->getRow("SELECT
SUM(money) AS totalMoney,
SUM(CASE WHEN status = 2 THEN money ELSE 0 END) AS successMoney,
SUM(CASE WHEN status = 3 THEN money ELSE 0 END) AS failMoney,
COUNT(*) AS totalCount,
SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS successCount,
SUM(CASE WHEN status = 3 THEN 1 ELSE 0 END) AS failCount
FROM pre_psorder WHERE {$sql}");
$successRate = $result['totalCount'] > 0 ? round(($result['successCount'] / $result['totalCount']) * 100, 2) : 0;
$data = [
'totalMoney' => number_format($result['totalMoney'] ?? 0, 2, '.', ''),
'successMoney' => number_format($result['successMoney'] ?? 0, 2, '.', ''),
'failMoney' => number_format($result['failMoney'] ?? 0, 2, '.', ''),
'totalCount' => $result['totalCount'] ?? 0,
'successCount' => $result['successCount'] ?? 0,
'failCount' => $result['failCount'] ?? 0,
'successRate' => $successRate
];
exit(json_encode(['code' => 0, 'data' => $data]));
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+250
View File
@@ -0,0 +1,250 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'settleList':
$sql=" 1=1";
if(isset($_POST['batch']) && !empty($_POST['batch'])) {
$batch = daddslashes($_POST['batch']);
$sql.=" AND `batch`='$batch'";
}
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND `uid`='$uid'";
}
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND `type`='$type'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND `status`={$dstatus}";
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$value = daddslashes($_POST['value']);
$sql.=" AND (`account` like '%{$value}%' OR `username` like '%{$value}%')";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_settle WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_settle WHERE{$sql} order by id desc limit $offset,$limit");
$list2 = [];
foreach($list as $row){
if($row['type'] == 2 && $row['status'] == 1 && !empty($row['transfer_ext']) && time() - strtotime($row['transfer_date']) <= 86400){
if(substr($row['ext'], 0, 4) == 'http'){
$row['jumpurl'] = $row['ext'];
}else{
$row['jumpurl'] = $siteurl.'paypage/wxtrans.php?id='.$row['id'].'&type=settle';
}
}
$list2[] = $row;
}
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
break;
case 'create_batch':
$count=$DB->getColumn("SELECT count(*) from pre_settle where status=0");
if($count==0)exit('{"code":-1,"msg":"当前不存在待结算的记录"}');
$batch=date("Ymd").rand(111,999);
$allmoney = 0;
$rs=$DB->query("SELECT * from pre_settle where status=0");
while($row = $rs->fetch())
{
$DB->exec("UPDATE pre_settle SET batch='$batch',status=2 WHERE id='{$row['id']}'");
$allmoney+=$row['realmoney'];
}
$DB->insert('batch', ['batch'=>$batch, 'allmoney'=>$allmoney, 'count'=>$count, 'time'=>'NOW()', 'status'=>0]);
exit(json_encode(['code'=>0, 'msg'=>'succ', 'batch'=>$batch, 'count'=>$count, 'allmoney'=>$allmoney]));
break;
case 'complete_batch':
$batch=trim($_POST['batch']);
$DB->exec("UPDATE pre_settle SET status=1 WHERE batch='$batch'");
exit('{"code":0,"msg":"succ"}');
break;
case 'setSettleStatus':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
if($status==4){
$row = $DB->find('settle', 'uid,money', ['id'=>$id]);
if(!$row) exit('{"code":200}');
if($DB->exec("DELETE FROM pre_settle WHERE id='$id'")){
changeUserMoney($row['uid'], $row['money'], true, '结算失败退回');
exit('{"code":200}');
}
else{
exit('{"code":400,"msg":"删除记录失败!['.$DB->error().']"}');
}
}else{
if($status==1){
$sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'";
$row = $DB->find('settle', 'uid,money,realmoney,account', ['id'=>$id]);
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account']]);
}else{
$sql = "update pre_settle set status='$status',endtime=NULL where id='$id'";
}
if($DB->exec($sql)!==false)
exit('{"code":200}');
else
exit('{"code":400,"msg":"修改记录失败!['.$DB->error().']"}');
}
break;
case 'opslist':
$status=$_POST['status'];
$checkbox=$_POST['checkbox'];
$i=0;
foreach($checkbox as $id){
if($status==4){
$sql = "DELETE FROM pre_settle WHERE id='$id'";
}elseif($status==1){
$sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'";
}else{
$sql = "update pre_settle set status='$status',endtime=NULL where id='$id'";
}
$DB->exec($sql);
$i++;
}
exit('{"code":0,"msg":"成功改变'.$i.'条记录状态"}');
break;
case 'settle_result':
$id=intval($_POST['id']);
$row=$DB->getRow("select result from pre_settle where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
$result = ['code'=>0,'msg'=>'succ','result'=>$row['result']];
exit(json_encode($result));
break;
case 'settle_setresult':
$id=intval($_POST['id']);
$result=trim($_POST['result']);
$row=$DB->getRow("select * from pre_settle where id='$id' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
$sds = $DB->exec("UPDATE pre_settle SET result='$result' WHERE id='$id'");
if($sds!==false)
exit('{"code":0,"msg":"修改成功!"}');
else
exit('{"code":-1,"msg":"修改失败!'.$DB->error().'"}');
break;
case 'settle_info':
$id=intval($_GET['id']);
$rows=$DB->getRow("select * from pre_settle where id='$id' limit 1");
if(!$rows)
exit('{"code":-1,"msg":"当前结算记录不存在!"}');
$data = '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算方式</div><select class="form-control" id="pay_type" default="'.$rows['type'].'">'.($conf['settle_alipay']?'<option value="1">支付宝</option>':null).''.($conf['settle_wxpay']?'<option value="2">微信</option>':null).''.($conf['settle_qqpay']?'<option value="3">QQ钱包</option>':null).''.($conf['settle_bank']?'<option value="4">银行卡</option>':null).'</select></div></div>';
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算账号</div><input type="text" id="pay_account" value="'.$rows['account'].'" class="form-control" required/></div></div>';
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">真实姓名</div><input type="text" id="pay_name" value="'.$rows['username'].'" class="form-control" required/></div></div>';
$data .= '<input type="submit" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block" value="保存">';
$result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['type']);
exit(json_encode($result));
break;
case 'settle_save':
$id=intval($_POST['id']);
$pay_type=intval($_POST['pay_type']);
$pay_account=htmlspecialchars(trim($_POST['pay_account']));
$pay_name=htmlspecialchars(trim($_POST['pay_name']));
$data = ['type'=>$pay_type, 'account'=>$pay_account, 'username'=>$pay_name];
if($DB->update('settle', $data, ['id'=>$id])!==false)
exit('{"code":0,"msg":"修改记录成功!"}');
else
exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}');
break;
case 'paypwd_check':
if(isset($_SESSION['paypwd']) && $_SESSION['paypwd']==$conf['admin_paypwd'])
exit('{"code":0,"msg":"ok"}');
else
exit('{"code":-1,"msg":"error"}');
break;
case 'paypwd_input':
$paypwd=trim($_POST['paypwd']);
if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}');
if($paypwd == $conf['admin_paypwd']){
$_SESSION['paypwd'] = $paypwd;
exit('{"code":0,"msg":"ok"}');
}else{
exit('{"code":-1,"msg":"支付密码错误!"}');
}
break;
case 'paypwd_reset':
unset($_SESSION['paypwd']);
exit('{"code":0,"msg":"ok"}');
break;
case 'transfer':
$id = isset($_POST['id'])?intval($_POST['id']):exit('{"code":-1,"msg":"ID不能为空"}');
$type = isset($_POST['type'])?intval($_POST['type']):exit('{"code":-1,"msg":"type不能为空"}');
$channelid = isset($_POST['channel'])?intval($_POST['channel']):0;
$payee_err_code = [ //收款方原因导致的失败编码
'PAYEE_NOT_EXIST','PAYEE_ACCOUNT_STATUS_ERROR','CARD_BIN_ERROR','PAYEE_CARD_INFO_ERROR','PERM_AML_NOT_REALNAME_REV','PAYEE_USER_INFO_ERROR','PAYEE_ACC_OCUPIED','PERMIT_NON_BANK_LIMIT_PAYEE','PAYEE_TRUSTEESHIP_ACC_OVER_LIMIT','PAYEE_ACCOUNT_NOT_EXSIT','PAYEE_USERINFO_STATUS_ERROR','TRUSTEESHIP_RECIEVE_QUOTA_LIMIT','EXCEED_LIMIT_UNRN_DM_AMOUNT','INVALID_CARDNO','RELEASE_USER_FORBBIDEN_RECIEVE','PAYEE_USER_TYPE_ERROR','PAYEE_NOT_RELNAME_CERTIFY','PERMIT_LIMIT_PAYEE',
'OPENID_ERROR','NAME_MISMATCH','V2_ACCOUNT_SIMPLE_BAN','MONEY_LIMIT','EXCEED_PAYEE_ACCOUNT_LIMIT','PAYEE_ACCOUNT_ABNORMAL','APPID_OR_OPENID_ERR',
'REALNAME_CHECK_ERROR','RE_USER_NAME_CHECK_ERROR','ERR_TJ_BLACK','USER_FROZEN','TRANSFER_FAIL','TRANSFER_FEE_LIMIT_ERROR',
'ACCOUNT_FROZEN','REAL_NAME_CHECK_FAIL','NAME_NOT_CORRECT','OPENID_INVALID','TRANSFER_QUOTA_EXCEED','DAY_RECEIVED_QUOTA_EXCEED','MONTH_RECEIVED_QUOTA_EXCEED','DAY_RECEIVED_COUNT_EXCEED','ID_CARD_NOT_CORRECT','ACCOUNT_NOT_EXIST','TRANSFER_RISK','REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED','RECEIVE_ACCOUNT_NOT_PERMMIT','PAYEE_ACCOUNT_ABNORMAL','BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH','BLOCK_B2C_USERLIMITAMOUNT_MONTH',
];
if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])exit('{"code":-1,"msg":"支付密码错误,请返回重新进入该页面"}');
$row=$DB->getRow("SELECT * FROM pre_settle WHERE id='{$id}' limit 1");
if(!$row)exit('{"code":-1,"msg":"记录不存在"}');
if($row['type']!=$type)exit('{"code":-1,"msg":"转账类型不正确"}');
if($row['transfer_status']==1)exit('{"code":0,"ret":2,"result":"转账订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date'].'"}');
if($type == 1){
$app = 'alipay';
}elseif($type == 2){
$app = 'wxpay';
}elseif($type == 3){
$app = 'qqpay';
}elseif($type == 4){
$app = 'bank';
}
$channel = \lib\Channel::get($channelid);
if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
$out_biz_no = date("YmdHis").str_pad($id, 5, '0', STR_PAD_LEFT);
$result = \lib\Transfer::submit($app, $channel, $out_biz_no, $row['account'], $row['username'], $row['realmoney']);
if($result['code']==0){
$data['code']=0;
$data['ret']=1;
$data['result']='转账订单号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
$update = ['status'=>1, 'endtime'=>'NOW()', 'transfer_no'=>$out_biz_no, 'transfer_channel'=>$channelid, 'transfer_status'=>1, 'transfer_result'=>$result["orderid"], 'transfer_date'=>$result["paydate"]];
if(isset($result['wxpackage'])) $update['transfer_ext'] = $result['wxpackage'];
$DB->update('settle', $update, ['id'=>$id]);
if(isset($result['wxpackage'])) {
$jumpurl = $siteurl.'paypage/wxtrans.php?type=settle&id='.$id;
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account'], 'jumpurl'=>$jumpurl]);
}else{
\lib\MsgNotice::send('settle', $row['uid'], ['money'=>$row['money'], 'realmoney'=>$row['realmoney'], 'time'=>date('Y-m-d H:i:s'), 'account'=>$row['account']]);
}
} else {
if(in_array($result['errcode'], $payee_err_code)){
$data['code']=0;
$data['ret']=0;
$data['result']='转账失败 '.$result['msg'];
$DB->update('settle', ['status'=>3, 'result'=>$result["msg"], 'transfer_status'=>2, 'transfer_result'=>$data['result']], ['id'=>$id]);
}else{
$data['code']=-1;
$data['msg']=$result['msg'];
}
}
exit(json_encode($data));
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+115
View File
@@ -0,0 +1,115 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'transferList':
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND `uid`='$uid'";
}
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND `type`='$type'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND `status`={$dstatus}";
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$value = daddslashes($_POST['value']);
$sql.=" AND (`biz_no`='{$value}' OR `account` like '%{$value}%' OR `username` like '%{$value}%')";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_transfer WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_transfer WHERE{$sql} order by biz_no desc limit $offset,$limit");
$list2 = [];
foreach($list as $row){
if($row['type'] == 'wxpay' && $row['status'] == 0 && !empty($row['ext'])){
if(substr($row['ext'], 0, 4) == 'http'){
$row['jumpurl'] = $row['ext'];
}else{
$row['jumpurl'] = $siteurl.'paypage/wxtrans.php?id='.$row['biz_no'].'&type=transfer';
}
}
$list2[] = $row;
}
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
break;
case 'transfer_query':
$biz_no=trim($_GET['biz_no']);
$result = \lib\Transfer::status($biz_no);
exit(json_encode($result));
break;
case 'transfer_result':
$biz_no=trim($_GET['biz_no']);
$row = $DB->find('transfer', 'biz_no,result', ['biz_no' => $biz_no]);
if(!$row) exit('{"code":-1,"msg":"付款记录不存在!"}');
$result = ['code'=>0,'msg'=>$row['result']?$row['result']:'未知'];
exit(json_encode($result));
break;
case 'transfer_cancel':
$biz_no=trim($_POST['biz_no']);
$result = \lib\Transfer::cancel($biz_no);
exit(json_encode($result));
break;
case 'balance_query':
$type = $_POST['type'];
$channel = isset($_POST['channel'])?intval($_POST['channel']):$conf['transfer_'.$type];
$channel = \lib\Channel::get($channel);
if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}');
$user_id = isset($_POST['user_id'])?$_POST['user_id']:null;
$result = \lib\Transfer::balance($type, $channel, $user_id);
exit(json_encode($result));
break;
case 'setTransferStatus':
$biz_no=$_POST['biz_no'];
$status=intval($_POST['status']);
if($DB->exec("UPDATE pre_transfer SET status='$status' WHERE biz_no='$biz_no'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"修改失败['.$DB->error().']"}');
break;
case 'delTransfer':
$biz_no=$_POST['biz_no'];
if($DB->exec("DELETE FROM pre_transfer WHERE biz_no='$biz_no'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
break;
case 'refundTransfer':
$biz_no=$_POST['biz_no'];
$order = $DB->find('transfer', '*', ['biz_no' => $biz_no]);
if(!$order) exit('{"code":-1,"msg":"付款记录不存在!"}');
if($DB->exec("UPDATE pre_transfer SET status='2' WHERE biz_no='$biz_no'")){
if($order['uid'] > 0){
changeUserMoney($order['uid'], $order['costmoney'], true, '代付退回');
}
}
exit('{"code":0,"msg":"已成功将¥'.$order['costmoney'].'推给商户'.$order['uid'].'"}');
break;
case 'transfer_proof':
$biz_no=trim($_POST['biz_no']);
$result = \lib\Transfer::proof($biz_no);
exit(json_encode($result));
break;
case 'operation': //批量操作订单
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
$checkbox=$_POST['checkbox'];
$i=0;
foreach($checkbox as $biz_no){
if($status==3)$DB->exec("DELETE FROM pre_transfer WHERE biz_no='$biz_no'");
else $DB->exec("update pre_transfer set status='$status' where biz_no='$biz_no' limit 1");
$i++;
}
exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}');
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+794
View File
@@ -0,0 +1,794 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
switch($act){
case 'userList':
$usergroup = [0=>'默认用户组'];
$rs = $DB->getAll("SELECT * FROM pre_group");
foreach($rs as $row){
$usergroup[$row['gid']] = $row['name'];
}
unset($rs);
$sql=" 1=1";
if(isset($_POST['dstatus']) && !empty($_POST['dstatus'])) {
$dstatus = explode('_',$_POST['dstatus']);
$sql.=" AND `{$dstatus[0]}`='{$dstatus[1]}'";
}
if(isset($_POST['gid']) && $_POST['gid']!=='') {
$gid = intval($_POST['gid']);
$sql.=" AND `gid`='$gid'";
}
if(isset($_POST['upid']) && $_POST['upid']!=='') {
$upid = intval($_POST['upid']);
$sql.=" AND `upid`='$upid'";
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_user WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_user WHERE{$sql} order by uid desc limit $offset,$limit");
$list2 = [];
foreach($list as $row){
if($row['endtime']!=null && strtotime($row['endtime'])<time()){
$DB->exec("UPDATE pre_user SET gid=0,endtime=NULL WHERE uid='{$row['uid']}'");
$row['gid']=0;
}elseif($row['endtime']!=null){
$row['endtime'] = date("Y-m-d", strtotime($row['endtime']));
}
$row['groupname'] = $usergroup[$row['gid']];
$list2[] = $row;
}
exit(json_encode(['total'=>$total, 'rows'=>$list2]));
break;
case 'recordList':
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND `uid`='$uid'";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql.=" AND `date`>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql.=" AND `date`<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_record WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_record WHERE{$sql} order by id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'record_stats':
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND `uid`='$uid'";
}
if(!empty($_POST['starttime']) || !empty($_POST['endtime'])){
if(!empty($_POST['starttime'])){
$starttime = daddslashes($_POST['starttime']);
$sql.=" AND `date`>='{$starttime} 00:00:00'";
}
if(!empty($_POST['endtime'])){
$endtime = daddslashes($_POST['endtime']);
$sql.=" AND `date`<='{$endtime} 23:59:59'";
}
}
if(isset($_POST['value']) && !empty($_POST['value'])) {
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
}
$result = $DB->getRow("SELECT
SUM(CASE WHEN action = 1 THEN money ELSE 0 END) AS incMoney,
SUM(CASE WHEN action = 2 THEN money ELSE 0 END) AS decMoney
FROM pre_record WHERE {$sql}");
$data = [
'incMoney' => number_format($result['incMoney'] ?? 0, 2, '.', ''),
'decMoney' => number_format($result['decMoney'] ?? 0, 2, '.', ''),
'totalMoney' => number_format(($result['incMoney'] ?? 0) - ($result['decMoney'] ?? 0), 2, '.', ''),
];
exit(json_encode(['code' => 0, 'data' => $data]));
break;
case 'userPayStat':
$startday = trim($_POST['startday']);
$endday = trim($_POST['endday']);
$method = trim($_POST['method']);
$type = intval($_POST['type']);
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
$data = [];
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
if($method == 'type'){
$paytype = [];
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
if($type == 4){
$columns['type_'.$row['name']] = $row['showname'];
}else{
$columns['type_'.$row['id']] = $row['showname'];
}
}
unset($rs);
}else{
$channel = [];
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
foreach($rs as $row){
$channel[$row['id']] = $row['name'];
}
unset($rs);
}
if($type == 4){
$startday .= ' 00:00:00';
$endday .= ' 23:59:59';
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
while($row = $rs->fetch())
{
$money = (float)$row['money'];
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
$data[$row['uid']]['total'] += $money;
if($method == 'type'){
$ukey = 'type_'.$row['type'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
}else{
$ukey = 'channel_'.$row['channel'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
}
}
}else{
$rs=$DB->query("SELECT uid,type,channel,money,realmoney,getmoney,profitmoney from pre_order where status=1 and date>='$startday' and date<='$endday'");
while($row = $rs->fetch())
{
if($type == 3){
$money = (float)$row['profitmoney'];
}elseif($type == 2){
$money = (float)$row['getmoney'];
}elseif($type == 1){
$money = (float)$row['realmoney'];
}else{
$money = (float)$row['money'];
}
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
$data[$row['uid']]['total'] += $money;
if($method == 'type'){
$ukey = 'type_'.$row['type'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
}else{
$ukey = 'channel_'.$row['channel'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
}
}
}
ksort($data);
//计算总计
$total = ['uid'=>'总计'];
foreach($data as $row){
foreach($row as $key=>$val){
if($key=='uid')continue;
if(!array_key_exists($key, $total)) $total[$key] = $val;
else $total[$key] += $val;
}
}
array_unshift($data, $total);
$list = [];
foreach($data as $row){
$list[] = $row;
}
exit(json_encode(['code'=>0, 'columns'=>$columns, 'data'=>$list]));
break;
case 'userTransferStat':
$startday = trim($_POST['startday']);
$endday = trim($_POST['endday']);
$method = trim($_POST['method']);
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
$data = [];
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
if($method == 'type'){
$paytype = [];
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
foreach($rs as $row){
$paytype[$row['name']] = $row['showname'];
$columns['type_'.$row['name']] = $row['showname'];
}
unset($rs);
}else{
$channel = [];
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
foreach($rs as $row){
$channel[$row['id']] = $row['name'];
}
unset($rs);
}
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
while($row = $rs->fetch())
{
$money = (float)$row['money'];
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
$data[$row['uid']]['total'] += $money;
if($method == 'type'){
$ukey = 'type_'.$row['type'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
}else{
$ukey = 'channel_'.$row['channel'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
}
}
ksort($data);
$list = [];
foreach($data as $row){
$list[] = $row;
}
exit(json_encode(['code'=>0, 'columns'=>$columns, 'data'=>$list]));
break;
case 'buyerStat':
$startday = trim($_POST['startday']);
$endday = trim($_POST['endday']);
$method = intval($_POST['method']);
if($method == '2') $column = 'mobile';
else if($method == '1') $column = 'ip';
else $column = 'buyer';
if(!$startday || !$endday)exit(json_encode(['code'=>0, 'msg'=>'no day']));
$sql = "`date` BETWEEN '{$startday}' AND '{$endday}' AND {$column} is not null AND status>0";
if(isset($_POST['type']) && !empty($_POST['type'])) {
$type = intval($_POST['type']);
$sql.=" AND `type`='$type'";
}
$list = $DB->getAll("SELECT A.*,ISNULL(B.id) is_black
FROM (SELECT {$column} `user`,COUNT(*) AS order_count,MAX(trade_no) trade_no
FROM pay_order
WHERE {$sql}
GROUP BY {$column}
ORDER BY order_count DESC) A
LEFT JOIN pay_blacklist B ON A.`user`=B.content");
exit(json_encode($list));
break;
case 'logList':
$sql=" 1=1";
if(isset($_POST['value']) && $_POST['value']!=='') {
$sql.=" AND `{$_POST['column']}`='{$_POST['value']}'";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_log WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_log WHERE{$sql} order by id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'domainList':
$sql=" 1=1";
if(isset($_POST['uid']) && !empty($_POST['uid'])) {
$uid = intval($_POST['uid']);
$sql.=" AND `uid`='$uid'";
}
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
$sql.=" AND `domain`='{$_POST['kw']}'";
}
if(isset($_POST['dstatus']) && $_POST['dstatus']>-1) {
$dstatus = intval($_POST['dstatus']);
$sql.=" AND `status`={$dstatus}";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_domain WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_domain WHERE{$sql} order by id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'blackList':
$sql=" 1=1";
if(isset($_POST['kw']) && !empty($_POST['kw'])) {
$sql.=" AND `content`='{$_POST['kw']}'";
}
if(isset($_POST['type']) && $_POST['type']>-1) {
$type = intval($_POST['type']);
$sql.=" AND `type`={$type}";
}
$offset = intval($_POST['offset']);
$limit = intval($_POST['limit']);
$total = $DB->getColumn("SELECT count(*) from pre_blacklist WHERE{$sql}");
$list = $DB->getAll("SELECT * FROM pre_blacklist WHERE{$sql} order by id desc limit $offset,$limit");
exit(json_encode(['total'=>$total, 'rows'=>$list]));
break;
case 'getGroup': //用户组
$gid=intval($_GET['gid']);
$row=$DB->getRow("select * from pre_group where gid='$gid' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前用户组不存在!"}');
$result = ['code'=>0,'msg'=>'succ','gid'=>$gid,'name'=>$row['name'],'info'=>json_decode($row['info'],true),'config'=>$row['config']?json_decode($row['config'],true):[],'settings'=>$row['settings']];
exit(json_encode($result));
break;
case 'delGroup':
$gid=intval($_GET['gid']);
$row=$DB->getRow("select * from pre_group where gid='$gid' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前用户组不存在!"}');
$sql = "DELETE FROM pre_group WHERE gid='$gid'";
if($DB->exec($sql)){
$DB->exec("UPDATE pre_user SET gid=0 WHERE gid='$gid'");
exit('{"code":0,"msg":"删除用户组成功!"}');
}
else exit('{"code":-1,"msg":"删除用户组失败['.$DB->error().']"}');
break;
case 'saveGroup':
if($_POST['action'] == 'add'){
$name=trim($_POST['name']);
$row=$DB->getRow("select * from pre_group where name='$name' limit 1");
if($row)
exit('{"code":-1,"msg":"用户组名称重复"}');
$info=json_encode($_POST['info']);
$config=json_encode($_POST['config']);
$settings=trim($_POST['settings']);
if($settings && !checkGroupSettings($settings))exit('{"code":-1,"msg":"用户变量格式不正确"}');
$data = ['name'=>$name, 'info'=>$info, 'config'=>$config, 'settings'=>$settings];
if($DB->insert('group', $data))exit('{"code":0,"msg":"新增用户组成功!"}');
else exit('{"code":-1,"msg":"新增用户组失败['.$DB->error().']"}');
}elseif($_POST['action'] == 'changebuy'){
$gid=intval($_POST['gid']);
$status=intval($_POST['status']);
if($DB->update('group',['isbuy'=>$status],['gid'=>$gid]))exit('{"code":0,"msg":"修改上架状态成功!"}');
else exit('{"code":-1,"msg":"修改上架状态失败['.$DB->error().']"}');
}else{
$gid=intval($_POST['gid']);
$name=trim($_POST['name']);
$row=$DB->getRow("select * from pre_group where name='$name' and gid<>$gid limit 1");
if($row)
exit('{"code":-1,"msg":"用户组名称重复"}');
$info=json_encode($_POST['info']);
$config=json_encode($_POST['config']);
$settings=trim($_POST['settings']);
if($settings && !checkGroupSettings($settings))exit('{"code":-1,"msg":"用户变量格式不正确"}');
$data = ['name'=>$name, 'info'=>$info, 'config'=>$config, 'settings'=>$settings];
if($DB->update('group', $data, ['gid'=>$gid])!==false)exit('{"code":0,"msg":"修改用户组成功!"}');
else exit('{"code":-1,"msg":"修改用户组失败['.$DB->error().']"}');
}
break;
case 'saveGroupPrice':
$prices = $_POST['price'];
$expires = $_POST['expire'];
$sorts = $_POST['sort'];
$visibles = $_POST['visible'];
foreach($prices as $gid=>$item){
$price = trim($item);
$expire = intval($expires[$gid]);
$sort = trim($sorts[$gid]);
$visible = str_replace('',',',trim($visibles[$gid]));
if(!is_numeric($price)||$price<0)exit('{"code":-1,"msg":"GID:'.$gid.'的售价填写错误"}');
$DB->update('group', ['price'=>$price, 'expire'=>$expire, 'sort'=>$sort, 'visible'=>$visible], ['gid'=>$gid]);
}
exit('{"code":0,"msg":"保存成功!"}');
break;
case 'addUser':
$key = random(32);
$data = [
'gid' => intval($_POST['gid']),
'key' => $key,
'settle_id' => intval($_POST['settle_id']),
'account' => trim($_POST['account']),
'username' => trim($_POST['username']),
'money' => '0.00',
'url' => trim($_POST['url']),
'email' => trim($_POST['email']),
'qq' => trim($_POST['qq']),
'phone' => trim($_POST['phone']),
'mode' => intval($_POST['mode']),
'cert' => 0,
'pay' => intval($_POST['pay']),
'settle' => intval($_POST['settle']),
'status' => intval($_POST['status']),
'addtime' => 'NOW()',
];
if(empty($data['phone']) && empty($data['email'])) exit('{"code":-1,"msg":"手机号和邮箱不能都为空"}');
if(!empty($data['phone'])){
if($DB->find('user','*',['phone'=>$data['phone']])) exit('{"code":-1,"msg":"手机号已存在!"}');
}
if(!empty($data['email'])){
if($DB->find('user','*',['email'=>$data['email']])) exit('{"code":-1,"msg":"邮箱已存在!"}');
}
$uid = $DB->insert('user', $data);
if($uid!==false){
if(!empty($_POST['pwd'])){
$pwd = getMd5Pwd(trim($_POST['pwd']), $uid);
$DB->update('user', ['pwd'=>$pwd], ['uid'=>$uid]);
}
exit(json_encode(['code'=>0, 'uid'=>$uid, 'key'=>$key]));
}else{
exit('{"code":-1,"msg":"添加商户失败!'.$DB->error().'"}');
}
break;
case 'editUser':
$uid=intval($_GET['uid']);
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$rows) exit('{"code":-1,"msg":"当前商户不存在!"}');
$data = [
'gid' => intval($_POST['gid']),
'upid' => intval($_POST['upid']),
'settle_id' => intval($_POST['settle_id']),
'account' => trim($_POST['account']),
'username' => trim($_POST['username']),
'money' => trim($_POST['money']),
'url' => trim($_POST['url']),
'email' => trim($_POST['email']),
'qq' => trim($_POST['qq']),
'phone' => trim($_POST['phone']),
'cert' => intval($_POST['cert']),
'certtype' => intval($_POST['certtype']),
'certmethod' => intval($_POST['certmethod']),
'certno' => trim($_POST['certno']),
'certname' => trim($_POST['certname']),
'certcorpno' => trim($_POST['certcorpno']),
'certcorpname' => trim($_POST['certcorpname']),
'ordername' => trim($_POST['ordername']),
'mode' => intval($_POST['mode']),
'pay' => intval($_POST['pay']),
'settle' => intval($_POST['settle']),
'status' => intval($_POST['status']),
'open_code' => intval($_POST['open_code']),
'remain_money' => !empty($_POST['remain_money']) ? trim($_POST['remain_money']) : null,
'deposit' => !empty($_POST['deposit']) ? trim($_POST['deposit']) : null,
];
if($DB->update('user', $data, ['uid'=>$uid])!==false){
if(!empty($_POST['pwd'])){
$pwd = getMd5Pwd(trim($_POST['pwd']), $uid);
$DB->update('user', ['pwd'=>$pwd], ['uid'=>$uid]);
}
exit('{"code":0}');
}else{
exit('{"code":-1,"msg":"修改商户信息失败!'.$DB->error().'"}');
}
break;
case 'edit_keytype':
$uid=intval($_POST['uid']);
$keytype=intval($_POST['keytype']);
$sqs = $DB->update('user', ['keytype'=>$keytype], ['uid'=>$uid]);
if($sqs!==false){
exit('{"code":1,"msg":"succ"}');
}else{
exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}');
}
break;
case 'resetKey':
$uid=intval($_POST['uid']);
$key = random(32);
$sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'";
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}');
else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}');
break;
case 'createRsaPair':
$uid=intval($_POST['uid']);
$keypair = generate_key_pair();
$DB->update('user', ['publickey'=>$keypair['public_key']], ['uid'=>$uid]);
exit(json_encode(['code'=>0, 'msg'=>'succ', 'public_key'=>$keypair['public_key'], 'private_key'=>$keypair['private_key']]));
break;
case 'editUserChannelInfo':
$uid=intval($_GET['uid']);
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$rows) exit('{"code":-1,"msg":"当前商户不存在!"}');
$setting=$_POST['setting'];
$channelinfo = json_encode($setting);
if($DB->update('user', ['channelinfo'=>$channelinfo], ['uid'=>$uid])!==false){
exit('{"code":0}');
}else{
exit('{"code":-1,"msg":"修改商户信息失败!'.$DB->error().'"}');
}
break;
case 'delUser':
$uid=intval($_GET['uid']);
if($DB->exec("DELETE FROM pre_user WHERE uid='$uid'")){
$DB->exec("DELETE FROM pre_subchannel WHERE uid='$uid'");
exit('{"code":0}');
}else{
exit('{"code":-1,"msg":"删除商户失败!'.$DB->error().'"}');
}
break;
case 'setUser':
$uid=intval($_POST['uid']);
$type=trim($_POST['type']);
$status=intval($_POST['status']);
if($type=='pay')$sql = "UPDATE pre_user SET pay='$status' WHERE uid='$uid'";
elseif($type=='settle')$sql = "UPDATE pre_user SET settle='$status' WHERE uid='$uid'";
elseif($type=='group')$sql = "UPDATE pre_user SET gid='$status' WHERE uid='$uid'";
else $sql = "UPDATE pre_user SET status='$status' WHERE uid='$uid'";
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改用户成功!"}');
else exit('{"code":-1,"msg":"修改用户失败['.$DB->error().']"}');
break;
case 'setUserGroup':
$uid=intval($_POST['uid']);
$gid=intval($_POST['gid']);
$endtime=trim($_POST['endtime']);
if(changeUserGroup($uid, $gid, $endtime)!==false)exit('{"code":0,"msg":"修改用户成功!"}');
else exit('{"code":-1,"msg":"修改用户失败['.$DB->error().']"}');
break;
case 'resetUser':
$uid=intval($_GET['uid']);
$key = random(32);
$sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'";
if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}');
else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}');
break;
case 'user_settle_info':
$uid=intval($_GET['uid']);
$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$rows)
exit('{"code":-1,"msg":"当前用户不存在!"}');
$data = '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算方式</div><select class="form-control" id="pay_type" default="'.$rows['settle_id'].'">'.($conf['settle_alipay']?'<option value="1">支付宝</option>':null).''.($conf['settle_wxpay']?'<option value="2">微信</option>':null).''.($conf['settle_qqpay']?'<option value="3">QQ钱包</option>':null).''.($conf['settle_bank']?'<option value="4">银行卡</option>':null).'</select></div></div>';
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">结算账号</div><input type="text" id="pay_account" value="'.$rows['account'].'" class="form-control" required/></div></div>';
$data .= '<div class="form-group"><div class="input-group"><div class="input-group-addon">真实姓名</div><input type="text" id="pay_name" value="'.$rows['username'].'" class="form-control" required/></div></div>';
$data .= '<input type="submit" id="save" onclick="saveInfo('.$uid.')" class="btn btn-primary btn-block" value="保存">';
$result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['settle_id']);
exit(json_encode($result));
break;
case 'user_settle_save':
$uid=intval($_POST['uid']);
$pay_type=trim(daddslashes($_POST['pay_type']));
$pay_account=trim(daddslashes($_POST['pay_account']));
$pay_name=trim(daddslashes($_POST['pay_name']));
$sds=$DB->exec("update `pre_user` set `settle_id`='$pay_type',`account`='$pay_account',`username`='$pay_name' where `uid`='$uid'");
if($sds!==false)
exit('{"code":0,"msg":"修改记录成功!"}');
else
exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}');
break;
case 'user_cert':
$uid=intval($_GET['uid']);
$rows=$DB->getRow("select cert,certtype,certmethod,certno,certname,certcorpno,certcorpname,certtime from pre_user where uid='$uid' limit 1");
if(!$rows)
exit('{"code":-1,"msg":"当前用户不存在!"}');
$rows['certmethodname'] = show_cert_method($rows['certmethod']);
$result = ['code'=>0,'msg'=>'succ','uid'=>$uid,'data'=>$rows];
exit(json_encode($result));
break;
case 'recharge':
$uid=intval($_POST['uid']);
$do=$_POST['actdo'];
$rmb=floatval($_POST['rmb']);
$row=$DB->getRow("select uid,money from pre_user where uid='$uid' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前用户不存在!"}');
if($do==1 && $rmb>$row['money'])$rmb=$row['money'];
if($do==0){
changeUserMoney($uid, $rmb, true, '后台加款');
}else{
changeUserMoney($uid, $rmb, false, '后台扣款');
}
exit('{"code":0,"msg":"succ"}');
break;
case 'addDomain':
$uid=intval($_POST['uid']);
$domain = trim(daddslashes($_POST['domain']));
if(empty($domain))exit('{"code":-1,"msg":"域名不能为空"}');
if(!checkDomain($domain))exit('{"code":-1,"msg":"域名格式不正确"}');
$row=$DB->getRow("select uid from pre_user where uid='$uid' limit 1");
if(!$row)
exit('{"code":-1,"msg":"当前用户不存在!"}');
if($DB->getRow("select * from pre_domain where uid=:uid and domain=:domain limit 1", [':uid'=>$uid, ':domain'=>$domain]))
exit('{"code":-1,"msg":"该域名已存在,请勿重复添加"}');
if(!$DB->exec("INSERT INTO `pre_domain` (`uid`,`domain`,`status`,`addtime`,`endtime`) VALUES (:uid, :domain, 1, NOW(), NOW())", [':uid'=>$uid, ':domain'=>$domain]))exit('{"code":-1,"msg":"添加失败'.$DB->error().'"}');
exit(json_encode(['code'=>0, 'msg'=>'添加域名成功!']));
break;
case 'setDomainStatus':
$id=intval($_POST['id']);
$status=intval($_POST['status']);
if($DB->exec("UPDATE pre_domain SET status='$status',endtime=NOW() WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"修改失败['.$DB->error().']"}');
break;
case 'delDomain':
$id=intval($_POST['id']);
if($DB->exec("DELETE FROM pre_domain WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
break;
case 'domain_operation':
$status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}');
$checkbox=$_POST['checkbox'];
$i=0;
foreach($checkbox as $id){
if($status==3)$DB->exec("DELETE FROM pre_domain WHERE id='$id'");
else $DB->exec("UPDATE pre_domain SET status='$status',endtime=NOW() WHERE id='$id'");
$i++;
}
exit('{"code":0,"msg":"成功改变'.$i.'个记录状态"}');
break;
case 'getChannels':
$typeid = intval($_GET['typeid']);
$type=$DB->getColumn("SELECT name FROM pre_type WHERE id='$typeid'");
if(!$type)
exit('{"code":-1,"msg":"当前支付方式不存在!"}');
$list=$DB->getAll("SELECT id,name FROM pre_channel WHERE `type`='$typeid' AND status=1 ORDER BY id ASC");
if($list){
$result = ['code'=>0,'msg'=>'succ','data'=>$list];
exit(json_encode($result));
}
else exit('{"code":-1,"msg":"该支付方式下没有可用的支付通道"}');
break;
case 'getSubChannel':
$id=intval($_GET['id']);
$row=$DB->getRow("SELECT A.*,B.type FROM pre_subchannel A LEFT JOIN pre_channel B ON A.channel=B.id WHERE A.id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前子通道不存在!"}');
$result = ['code'=>0,'msg'=>'succ','data'=>$row];
exit(json_encode($result));
break;
case 'setSubChannel':
$id=intval($_GET['id']);
$status=intval($_GET['status']);
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前子通道不存在!"}');
$sql = "UPDATE pre_subchannel SET status='$status' WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"修改子通道成功!"}');
else exit('{"code":-1,"msg":"修改子通道失败['.$DB->error().']"}');
break;
case 'delSubChannel':
$id=intval($_GET['id']);
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
if(!$row)
exit('{"code":-1,"msg":"当前子通道不存在!"}');
$sql = "DELETE FROM pre_subchannel WHERE id='$id'";
if($DB->exec($sql))exit('{"code":0,"msg":"删除子通道成功!"}');
else exit('{"code":-1,"msg":"删除子通道失败['.$DB->error().']"}');
break;
case 'saveSubChannel':
if($_POST['action'] == 'add'){
$uid=intval($_POST['uid']);
$name=trim($_POST['name']);
$type=intval($_POST['type']);
$channel=intval($_POST['channel']);
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE name='$name' AND uid='$uid' LIMIT 1");
if($row)
exit('{"code":-1,"msg":"子通道备注重复"}');
$data = ['channel'=>$channel, 'uid'=>$uid, 'name'=>$name, 'addtime'=>'NOW()', 'usetime'=>'NOW()'];
if($DB->insert('subchannel', $data))exit('{"code":0,"msg":"新增子通道成功!"}');
else exit('{"code":-1,"msg":"新增子通道失败['.$DB->error().']"}');
}else{
$id=intval($_POST['id']);
$row=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
if(!$row) exit('{"code":-1,"msg":"当前子通道不存在!"}');
$uid=intval($_POST['uid']);
$name=trim($_POST['name']);
$type=intval($_POST['type']);
$channel=intval($_POST['channel']);
$nrow=$DB->getRow("SELECT * FROM pre_subchannel WHERE name='$name' AND uid='$uid' AND id<>$id LIMIT 1");
if($nrow)
exit('{"code":-1,"msg":"子通道名称重复"}');
$data = ['channel'=>$channel, 'name'=>$name];
if($DB->update('subchannel', $data, ['id'=>$id])!==false){
exit('{"code":0,"msg":"修改子通道成功!"}');
}else exit('{"code":-1,"msg":"修改子通道失败['.$DB->error().']"}');
}
break;
case 'subChannelInfo':
$id=intval($_GET['id']);
$subrow=$DB->getRow("SELECT * FROM pre_subchannel WHERE id='$id'");
if(!$subrow)
exit('{"code":-1,"msg":"当前子通道不存在!"}');
$row=$DB->getRow("SELECT * FROM pre_channel WHERE id='{$subrow['channel']}'");
if(!$row)
exit('{"code":-1,"msg":"当前子通道对应支付通道不存在!"}');
$typename = $DB->getColumn("SELECT name FROM pre_type WHERE id='{$row['type']}'");
$plugin = \lib\Plugin::getConfig($row['plugin']);
if(!$plugin)
exit('{"code":-1,"msg":"当前支付插件不存在!"}');
$info = json_decode($subrow['info'], true);
$config = json_decode($row['config'],true);
$data = '<div class="modal-body"><form class="form" id="form-info">';
foreach($plugin['inputs'] as $key=>$input){
if(substr($config[$key],0,1)=='['){
$key = substr($config[$key],1,-1);
if($input['type'] == 'textarea'){
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><textarea id="'.$key.'" name="info['.$key.']" rows="2" class="form-control" placeholder="'.$input['note'].'">'.$info[$key].'</textarea></div>';
}elseif($input['type'] == 'select'){
$addOptions = '';
foreach($input['options'] as $k=>$v){
$addOptions.='<option value="'.$k.'" '.($info[$key]==$k?'selected':'').'>'.$v.'</option>';
}
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><select class="form-control" name="info['.$key.']" default="'.$info[$key].'">'.$addOptions.'</select></div>';
}else{
$data .= '<div class="form-group"><label>'.$input['name'].'</label><br/><input type="text" id="'.$key.'" name="info['.$key.']" value="'.$info[$key].'" class="form-control" placeholder="'.$input['note'].'"/></div>';
}
}
}
$data .= '<button type="button" id="save" onclick="saveInfo('.$id.')" class="btn btn-primary btn-block">保存</button></form></div>';
$result=array("code"=>0,"msg"=>"succ","data"=>$data);
exit(json_encode($result));
break;
case 'saveSubChannelInfo':
$id=intval($_GET['id']);
$info=$_POST['info'];
$info = $info ? json_encode($info) : null;
if($DB->update('subchannel', ['info'=>$info], ['id'=>$id])!==false)exit('{"code":0,"msg":"修改自定义支付参数成功!"}');
else exit('{"code":-1,"msg":"修改自定义支付参数失败['.$DB->error().']"}');
break;
case 'addBlack':
$type=intval($_POST['type']);
$content = trim($_POST['content']);
$days=intval($_POST['days']);
$remark = trim($_POST['remark']);
if(empty($content))exit('{"code":-1,"msg":"拉黑内容不能为空"}');
if($DB->getRow("select * from pre_blacklist where type=:type and content=:content limit 1", [':type'=>$type, ':content'=>$content]))
exit('{"code":-1,"msg":"该黑名单记录已存在,请勿重复添加"}');
$endtime = $days > 0 ? date('Y-m-d H:i:s', strtotime('+'.$days.' days')) : null;
$data = ['type'=>$type, 'content'=>$content, 'addtime'=>'NOW()', 'endtime'=>$endtime, 'remark'=>$remark];
if($DB->insert('blacklist', $data))exit(json_encode(['code'=>0, 'msg'=>'添加黑名单成功!']));
else exit('{"code":-1,"msg":"添加失败'.$DB->error().'"}');
break;
case 'delBlack':
$id=intval($_POST['id']);
if($DB->exec("DELETE FROM pre_blacklist WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
break;
case 'batchdelBlack':
$checkbox=$_POST['checkbox'];
$i = 0;
if(!empty($checkbox)){
$i = $DB->exec("DELETE FROM pre_blacklist WHERE id IN (".implode(',',$checkbox).")");
}
exit('{"code":0,"msg":"成功删除了'.$i.'个黑名单"}');
break;
case 'delRecord':
$id=intval($_GET['id']);
if($DB->exec("DELETE FROM pre_record WHERE id='$id'")!==false)exit('{"code":0,"msg":"succ"}');
else exit('{"code":-1,"msg":"删除失败['.$DB->error().']"}');
break;
case 'checkuid':
$uid=intval($_GET['uid']);
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if($row)
exit('{"code":0,"msg":"succ"}');
else
exit('{"code":-1,"msg":"当前商户ID不存在"}');
break;
default:
exit('{"code":-4,"msg":"No Act"}');
break;
}
+225
View File
@@ -0,0 +1,225 @@
<?php
include("../includes/common.php");
$title='文章管理';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-sm-12 col-md-10 center-block" style="float: none;">
<?php
$my=isset($_GET['my'])?$_GET['my']:null;
if($my=='add')
{
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">添加文章</h3></div>
<div class="panel-body">
<form action="./article.php?my=add_submit" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-2 control-label">文章标题</label>
<div class="col-sm-10"><input type="text" name="title" value="" class="form-control" required/></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文章内容</label>
<div class="col-sm-10"><textarea id="editor_id" class="form-control" name="content" rows="16" style="width:100%;"></textarea></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">是否置顶</label>
<div class="col-sm-10"><select class="form-control" name="top"><option value="0">否</option><option value="1">是</option></select></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">发布时间</label>
<div class="col-sm-10"><input type="date" name="addtime" value="<?php echo date("Y-m-d"); ?>" class="form-control"/></div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10"><input type="submit" name="submit" value="发布" class="btn btn-primary btn-block"/><br/>
</div>
</div>
</form>
<br/><a href="./article.php">>>返回文章列表</a>
</div>
</div>
<script charset="utf-8" src="./assets/kindeditor/kindeditor-all-min.js"></script>
<script charset="utf-8" src="./assets/kindeditor/zh-CN.js"></script>
<script src="assets/js/editor.js?ver=<?php echo VERSION ?>"></script>
<?php
}
elseif($my=='edit')
{
$id=$_GET['id'];
$row=$DB->getRow("select * from pre_article where id='$id' limit 1");
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">编辑文章</h3></div>
<div class="panel-body">
<form action="./article.php?my=edit_submit&id=<?php echo $row['id']; ?>" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-2 control-label">文章标题</label>
<div class="col-sm-10"><input type="text" name="title" value="<?php echo $row['title']; ?>" class="form-control" required/></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">文章内容</label>
<div class="col-sm-10"><textarea id="editor_id" class="form-control" name="content" rows="16" style="width:100%;"><?php echo htmlspecialchars($row['content']);?></textarea></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">是否置顶</label>
<div class="col-sm-10"><select class="form-control" name="top" default="<?php echo $row['top']?>"><option value="0">否</option><option value="1">是</option></select></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">发布时间</label>
<div class="col-sm-10"><input type="date" name="addtime" value="<?php echo date("Y-m-d", strtotime($row['addtime']))?>" class="form-control"/></div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10"><input type="submit" name="submit" value="发布" class="btn btn-primary btn-block"/><br/>
</div>
</div>
</form>
<br/><a href="./article.php">>>返回文章列表</a>
</div>
</div>
<script>
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
$(items[i]).val($(items[i]).attr("default")||0);
}
</script>
<script charset="utf-8" src="./assets/kindeditor/kindeditor-all-min.js"></script>
<script charset="utf-8" src="./assets/kindeditor/zh-CN.js"></script>
<script src="assets/js/editor.js?ver=<?php echo VERSION ?>"></script>
<?php
}
elseif($my=='add_submit')
{
if(!checkRefererHost())exit();
$title=trim($_POST['title']);
$content=$_POST['content'];
$top=intval($_POST['top']);
$addtime=$_POST['addtime'].' '.date("H:i:s");
if($title==NULL or $content==NULL){
showmsg('保存错误,请确保必填项都不为空!',3);
} else {
$rows=$DB->getRow("select * from pre_article where title='$title' limit 1");
if($rows)
showmsg('文章标题已存在!',3);
$sql="INSERT INTO `pre_article` (`title`,`content`,`addtime`,`top`,`active`) VALUES (:title, :content, :addtime, :top, :active)";
$data = [':title'=>$title, ':content'=>$content, ':addtime'=>$addtime, ':top'=>$top, ':active'=>1];
if($DB->exec($sql, $data)){
showmsg('添加文章成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
}else
showmsg('添加文章失败!'.$DB->error(),4);
}
}
elseif($my=='edit_submit')
{
if(!checkRefererHost())exit();
$id=$_GET['id'];
$rows=$DB->getRow("select * from pre_article where id='$id' limit 1");
if(!$rows)
showmsg('当前记录不存在!',3);
$title=trim($_POST['title']);
$content=$_POST['content'];
$top=intval($_POST['top']);
$addtime=$_POST['addtime'].' '.date("H:i:s");
if($title==NULL or $content==NULL){
showmsg('保存错误,请确保必填项都不为空!',3);
} else {
$sql = "UPDATE pre_article SET title=:title,content=:content,addtime=:addtime,top=:top WHERE id=:id";
$data = [':title'=>$title, ':content'=>$content, ':addtime'=>$addtime, ':top'=>$top, ':id'=>$id];
if($DB->exec($sql, $data)!==false)
showmsg('修改文章成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
else
showmsg('修改文章失败!'.$DB->error(),4);
}
}
elseif($my=='delete')
{
if(!checkRefererHost())exit();
$id=$_GET['id'];
$sql="DELETE FROM pre_article WHERE id=:id";
if($DB->exec($sql, [':id'=>$id]))
showmsg('删除成功!<br/><br/><a href="./article.php">>>返回文章列表</a>',1);
else
showmsg('删除失败!'.$DB->error(),4);
}
else
{
if(isset($_GET['kw'])){
$kw = trim(daddslashes($_GET['kw']));
$sql=" title LIKE '%$kw%'";
$numrows=$DB->getColumn("SELECT count(*) from pre_article where{$sql}");
$link='&kw='.$kw;
}else{
$sql=" 1";
$numrows=$DB->getColumn("SELECT count(*) from pre_article");
}
?>
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo $numrows?></b> 篇文章</h3></div>
<form action="article.php" method="GET" class="form-inline">
<a href="./article.php?my=add" class="btn btn-success"><i class="fa fa-plus"></i>&nbsp;添加文章</a>
<div class="form-group">
<input type="text" class="form-control" name="kw" placeholder="请输入文章标题">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
</form>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>文章标题</th><th>发布时间</th><th>浏览量</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
$pagesize=30;
$pages=ceil($numrows/$pagesize);
$page=isset($_GET['page'])?intval($_GET['page']):1;
$offset=$pagesize*($page - 1);
$rs=$DB->query("SELECT * FROM pre_article WHERE{$sql} order by id desc limit $offset,$pagesize");
while($res = $rs->fetch())
{
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.($res['top']?'[置顶]':null).$res['title'].'</td><td>'.$res['addtime'].'</td><td>'.$res['count'].'</td><td>'.($res['active']==1?'<span class="btn btn-xs btn-success" onclick="setActive('.$res['id'].',0)">显示</span>':'<span class="btn btn-xs btn-warning" onclick="setActive('.$res['id'].',1)">隐藏</span>').'</td><td><a class="btn btn-xs btn-success" href="../?mod=article&id='.$res['id'].'" target="_blank">查看</a>&nbsp;<a href="./article.php?my=edit&id='.$res['id'].'" class="btn btn-info btn-xs">编辑</a>&nbsp;<a href="./article.php?my=delete&id='.$res['id'].'" class="btn btn-xs btn-danger" onclick="return confirm(\'你确实要删除此文章吗?\');">删除</a></td></tr>';
}
?>
</tbody>
</table>
</div>
<?php
echo'<ul class="pagination">';
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page>1)
{
echo '<li><a href="article.php?page='.$first.$link.'">首页</a></li>';
echo '<li><a href="article.php?page='.$prev.$link.'">&laquo;</a></li>';
} else {
echo '<li class="disabled"><a>首页</a></li>';
echo '<li class="disabled"><a>&laquo;</a></li>';
}
$start=$page-10>1?$page-10:1;
$end=$page+10<$pages?$page+10:$pages;
for ($i=$start;$i<$page;$i++)
echo '<li><a href="article.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '<li class="disabled"><a>'.$page.'</a></li>';
for ($i=$page+1;$i<=$end;$i++)
echo '<li><a href="article.php?page='.$i.$link.'">'.$i .'</a></li>';
if ($page<$pages)
{
echo '<li><a href="article.php?page='.$next.$link.'">&raquo;</a></li>';
echo '<li><a href="article.php?page='.$last.$link.'">尾页</a></li>';
} else {
echo '<li class="disabled"><a>&raquo;</a></li>';
echo '<li class="disabled"><a>尾页</a></li>';
}
echo'</ul>';
#分页
?>
<?php }?>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
<script src="assets/js/article.js?ver=<?php echo VERSION ?>"></script>
</body>
</html>
+215
View File
@@ -0,0 +1,215 @@
<?php
/**
* 支付黑名单管理
**/
include("../includes/common.php");
$title='支付黑名单管理';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="kw" placeholder="黑名单内容">
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="-1">黑名单类型</option><option value="0">支付账号</option><option value="1">IP地址</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:addItem()" class="btn btn-success">添加</a>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新黑名单列表"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="javascript:batchdel()">批量删除</a></li>
</ul>
</div>
<a tabindex="0" class="btn btn-default" role="button" data-toggle="popover" data-trigger="focus" title="说明" data-placement="bottom" data-content="支付账号黑名单,只支持微信公众号支付和支付宝JS支付"><span class="glyphicon glyphicon-question-sign"></span></a>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 15;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_user.php?act=blackList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: '',
checkbox: true
},
{
field: 'id',
title: 'ID'
},
{
field: 'type',
title: '黑名单类型',
formatter: function(value, row, index) {
if(value == '1'){
return 'IP地址';
}else{
return '支付账号';
}
}
},
{
field: 'content',
title: '黑名单内容'
},
{
field: 'addtime',
title: '添加时间'
},
{
field: 'endtime',
title: '过期时间',
formatter: function(value, row, index) {
if(value == null) return '永久';
return value;
}
},
{
field: 'remark',
title: '备注'
},
{
field: '',
title: '操作',
formatter: function(value, row, index) {
let html = '';
html += ' <a href="javascript:delItem('+row.id+')" class="btn btn-danger btn-xs">删除</a>';
return html;
}
},
],
})
})
function addItem(){
layer.open({
type: 1,
area: ['380px'],
closeBtn: 2,
title: '添加黑名单',
content: '<div style="padding:15px"><div class="form-group"><div class="input-group"><div class="input-group-addon">拉黑类型</div><select name="add_type" class="form-control"><option value="0">支付账号</option><option value="1">IP地址</option></select></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">拉黑内容</div><input class="form-control" type="text" name="add_content" value="" autocomplete="off" ></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><input class="form-control" type="text" name="add_days" value="0" autocomplete="off" placeholder="0为永久"><div class="input-group-addon">天</div></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">备注</div><input class="form-control" type="text" name="add_remark" value="" autocomplete="off" placeholder="选填"></div></div></div>',
btn: ['确认', '取消'],
yes: function(){
var type = $("select[name='add_type']").val();
var content = $("input[name='add_content']").val();
var days = $("input[name='add_days']").val();
var remark = $("input[name='add_remark']").val();
if(content == ''){
$("input[name='content']").focus();return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=addBlack',
data : {type:type, content:content, days:days, remark:remark},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); searchSubmit() });
}else{
layer.alert(data.msg, {icon:0});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}
function setStatus(id, status){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'post',
url : 'ajax_user.php?act=setDomainStatus',
data : {id:id, status:status},
dataType : 'json',
success : function(ret) {
layer.close(ii);
if (ret.code != 0) {
alert(ret.msg);
}
searchSubmit();
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function delItem(id) {
if(confirm('确定要删除此黑名单吗?')){
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=delBlack',
data : {id: id},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.msg('删除成功', {icon:1, time: 1000});
searchSubmit();
}else{
layer.alert(data.msg, {icon:2});
}
}
});
}
}
function batchdel(){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择黑名单记录', {time:1500});return;
}
var checkbox = new Array();
$.each(selected, function(key, item){
checkbox.push(item.id)
})
if(!confirm('确定要删除已选中的'+checkbox.length+'个黑名单吗?')) return;
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=batchdelBlack',
data : {checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
+93
View File
@@ -0,0 +1,93 @@
<?php
/**
* 系统数据清理
**/
include("../includes/common.php");
$title='系统数据清理';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
$mod=isset($_GET['mod'])?$_GET['mod']:null;
if($mod=='cleancache'){
$CACHE->clear();
if(function_exists("opcache_reset"))@opcache_reset();
showmsg('清理系统设置缓存成功!',1);
}elseif($mod=='cleanorder'){
$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_order`");
showmsg('删除30天前订单记录成功!',1);
}elseif($mod=='cleansettle'){
$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_settle`");
showmsg('删除30天前结算记录成功!',1);
}elseif($mod=='cleanrecord'){
$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_record`");
showmsg('删除30天前资金明细成功!',1);
}elseif($mod=='cleanorderi' && $_POST['do']=='submit'){
$days = intval($_POST['days']);
if($days<=0)showmsg('请确保每项不能为空',3);
$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_order`");
showmsg('删除订单记录成功!',1);
}elseif($mod=='cleansettlei' && $_POST['do']=='submit'){
$days = intval($_POST['days']);
if($days<=0)showmsg('请确保每项不能为空',3);
$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_settle`");
showmsg('删除结算记录成功!',1);
}elseif($mod=='cleanrecordi' && $_POST['do']=='submit'){
$days = intval($_POST['days']);
if($days<=0)showmsg('请确保每项不能为空',3);
$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_record`");
showmsg('删除资金明细成功!',1);
}elseif($mod=='cleantransferi' && $_POST['do']=='submit'){
$days = intval($_POST['days']);
if($days<=0)showmsg('请确保每项不能为空',3);
$DB->exec("DELETE FROM `pre_transfer` WHERE paytime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_transfer`");
showmsg('删除付款记录成功!',1);
}elseif($mod=='cleanpsorderi' && $_POST['do']=='submit'){
$days = intval($_POST['days']);
if($days<=0)showmsg('请确保每项不能为空',3);
$DB->exec("DELETE FROM `pre_psorder` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'");
$DB->exec("OPTIMIZE TABLE `pre_psorder`");
showmsg('删除分账记录成功!',1);
}else{
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">系统数据清理</h3></div>
<div class="panel-body">
<a href="./clean.php?mod=cleancache" class="btn btn-block btn-default">清理设置缓存</a><br/>
<a href="./clean.php?mod=cleanorder" onclick="return confirm('你确实要删除30天前的订单记录吗?');" class="btn btn-block btn-default">删除30天前订单记录</a><br/>
<a href="./clean.php?mod=cleansettle" onclick="return confirm('你确实要删除30天前的结算记录吗?');" class="btn btn-block btn-default">删除30天前结算记录</a><br/>
<a href="./clean.php?mod=cleanrecord" onclick="return confirm('你确实要删除30天前的资金明细吗?');" class="btn btn-block btn-default">删除30天前资金明细</a><br/>
<h4>自定义清理:</h4>
<form action="./clean.php?mod=cleanorderi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
<b>订单记录</b><input type="text" name="days" value="" placeholder="天数"/>天前的订单记录&nbsp;<input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
</form><br/>
<form action="./clean.php?mod=cleansettlei" method="post" role="form"><input type="hidden" name="do" value="submit"/>
<b>结算记录</b><input type="text" name="days" value="" placeholder="天数"/>天前的结算记录&nbsp;<input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
</form><br/>
<form action="./clean.php?mod=cleanrecordi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
<b>资金明细</b><input type="text" name="days" value="" placeholder="天数"/>天前的订单记录&nbsp;<input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
</form><br/>
<form action="./clean.php?mod=cleantransferi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
<b>付款记录</b><input type="text" name="days" value="" placeholder="天数"/>天前的付款记录&nbsp;<input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
</form><br/>
<form action="./clean.php?mod=cleanpsorderi" method="post" role="form"><input type="hidden" name="do" value="submit"/>
<b>分账记录</b><input type="text" name="days" value="" placeholder="天数"/>天前的分账记录&nbsp;<input type="submit" name="submit" value="立即删除" class="btn btn-sm btn-danger" onclick="return confirm('删除后无法恢复,确定继续吗?');"/>
</form><br/>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span>
定期清理数据有助于提升网站访问速度
</div>
</div>
<?php }?>
</div>
</div>
+9
View File
@@ -0,0 +1,9 @@
<?php
error_reporting(0);
session_start();
define('ROOT_PATH', dirname(__FILE__));
require '../includes/ValidateCode.class.php';
$_vc = new ValidateCode();
$_vc->doimg();
$_SESSION['vc_code'] = $_vc->getCode();
?>
+229
View File
@@ -0,0 +1,229 @@
<?php
/**
* 授权支付域名
**/
include("../includes/common.php");
$title='授权支付域名';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="kw" placeholder="要搜索的域名">
</div>
<div class="form-group">
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待审核</option><option value="1">正常</option><option value="2">拒绝</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:addDomain()" class="btn btn-success">添加</a>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新域名列表"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="javascript:operation(1)">通过</a></li>
<li><a href="javascript:operation(2)">拒绝</a></li>
<li><a href="javascript:operation(3)">删除</a></li>
</ul>
</div>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 15;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_user.php?act=domainList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: '',
checkbox: true
},
{
field: 'id',
title: 'ID'
},
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
}
},
{
field: 'domain',
title: '域名',
formatter: function(value, row, index) {
return '<a href="http://'+value.replace('*.','www.')+'/" target="_blank" rel="noopener noreferrer">'+value+'</a>';
}
},
{
field: 'status',
title: '状态',
formatter: function(value, row, index) {
if(value == '1'){
return '<font color="green">正常</font>';
}else if(value == '2'){
return '<font color="red">拒绝</font>';
}else{
return '<font color="blue">审核中</font>';
}
}
},
{
field: 'addtime',
title: '添加时间'
},
{
field: 'endtime',
title: '审核时间'
},
{
field: '',
title: '操作',
formatter: function(value, row, index) {
let html = '';
if(row.status == '1'){
html += '<a href="javascript:setStatus('+row.id+', 2)" class="btn btn-default btn-xs">改为拒绝</a>';
}else if(row.status == '2'){
html += '<a href="javascript:setStatus('+row.id+', 1)" class="btn btn-default btn-xs">改为通过</a>';
}else{
html += '<a href="javascript:setStatus('+row.id+', 1)" class="btn btn-success btn-xs">通过</a> <a href="javascript:setStatus('+row.id+', 2)" class="btn btn-warning btn-xs">拒绝</a>';
}
html += ' <a href="javascript:delDomain('+row.id+')" class="btn btn-danger btn-xs">删除</a>';
return html;
}
},
],
})
})
function addDomain(){
var adduid = $("input[name='uid']").val();
layer.open({
type: 1,
area: ['350px'],
closeBtn: 2,
title: '添加授权支付域名',
content: '<div style="padding:15px"><div class="form-group"><input class="form-control" type="text" name="adduid" value="'+adduid+'" autocomplete="off" placeholder="商户ID"></div><div class="form-group"><input class="form-control" type="text" name="content" value="" autocomplete="off" placeholder="请输入域名,支持通配符*"></div></div>',
btn: ['确认', '取消'],
yes: function(){
var adduid = $("input[name='adduid']").val();
var content = $("input[name='content']").val();
if(adduid == ''){
$("input[name='adduid']").focus();return;
}
if(content == ''){
$("input[name='content']").focus();return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=addDomain',
data : {uid:adduid, domain: content},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); searchSubmit() });
}else{
layer.alert(data.msg, {icon:0});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}
function setStatus(id, status){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'post',
url : 'ajax_user.php?act=setDomainStatus',
data : {id:id, status:status},
dataType : 'json',
success : function(ret) {
layer.close(ii);
if (ret.code != 0) {
alert(ret.msg);
}
searchSubmit();
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function delDomain(id) {
if(confirm('确定要删除此域名吗?')){
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=delDomain',
data : {id: id},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.msg('删除成功', {icon:1, time: 1000});
searchSubmit();
}else{
layer.alert(data.msg, {icon:2});
}
}
});
}
}
function operation(status){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择域名', {time:1500});return;
}
var checkbox = new Array();
$.each(selected, function(key, item){
checkbox.push(item.id)
})
if(status == 3 && !confirm('确定要删除已选中的'+checkbox.length+'个域名吗?')) return;
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=domain_operation',
data : {status:status, checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
</script>
+288
View File
@@ -0,0 +1,288 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
function display_type($type){
if($type==1)
return '支付宝';
elseif($type==2)
return '微信';
elseif($type==3)
return 'QQ钱包';
elseif($type==4)
return '银行卡';
else
return 1;
}
function display_status($status){
if($status==1){
return '已支付';
}elseif($status==2){
return '已退款';
}elseif($status==3){
return '已冻结';
}else{
return '未支付';
}
}
function text_encoding($text){
return mb_convert_encoding($text, "GBK", "UTF-8");
}
switch($act){
case 'settle':
$type = isset($_GET['type'])?trim($_GET['type']):'common';
$batch=$_GET['batch'];
$remark = text_encoding($conf['transfer_desc']);
if($type == 'mybank'){
$data="收款方名称,收款方账号,收款方开户行名称,收款行联行号,金额,附言/用途\r\n";
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and (type=1 or type=4) order by id asc");
$i=0;
while($row = $rs->fetch())
{
$i++;
$data.=text_encoding($row['username']).','.$row['account'].','.($row['type']=='1'?'支付宝':'').',,'.$row['realmoney'].','.$remark."\r\n";
}
}elseif($type == 'alipay'){
$data="支付宝批量付款文件模板\r\n";
$data.="序号(必填),收款方支付宝账号(必填),收款方姓名(必填),金额(必填,单位:元),备注(选填)\r\n";
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and type=1 order by id asc");
$i=0;
while($row = $rs->fetch())
{
$i++;
$data.=$i.','.$row['account'].','.text_encoding($row['username']).','.$row['realmoney'].','.$remark."\r\n";
}
}elseif($type == 'wxpay'){
if(!$conf['transfer_wxpay'])sysmsg(mb_convert_encoding("未开启微信企业付款", "UTF-8", "GB2312"));
$channel = \lib\Channel::get($conf['transfer_wxpay']);
if(!$channel)sysmsg(mb_convert_encoding("当前支付通道信息不存在", "UTF-8", "GB2312"));
$wxinfo = \lib\Channel::getWeixin($channel['appwxmp']);
if(!$wxinfo)sysmsg(mb_convert_encoding("支付通道绑定的微信公众号不存在", "UTF-8", "GB2312"));
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' and type=2 order by id asc");
$i=0;
$table="商家明细单号(必填),收款用户openid(必填),收款用户姓名(选填),收款用户身份证(选填),转账金额(必填,单位:元),转账备注(必填)\r\n";
$allmoney = 0;
while($row = $rs->fetch())
{
$i++;
$table.=$batch.$i.','.$row['account'].','.text_encoding($row['username']).',,'.$row['realmoney'].','.$remark."\r\n";
$allmoney+=$row['realmoney'];
}
$data="微信支付批量转账到零钱模版(勿删)\r\n";
$data.="商家批次单号(必填),".$batch."\r\n";
$data.="批次名称(必填),批量转账".$batch."\r\n";
$data.="转账appid(必填),".$wxinfo['appid']."\r\n";
$data.="转账总金额(必填,单位:元),".$allmoney."\r\n";
$data.="转账总笔数(必填),".$i."\r\n";
$data.="批次备注(必填),批量转账".$batch."\r\n";
$data.=",\r\n";
$data.="转账明细(勿删)\r\n";
$data.=$table;
}else{
$data="序号,收款方式,收款账号,收款人姓名,付款金额(元),付款理由\r\n";
$rs=$DB->query("SELECT * from pre_settle where batch='$batch' order by type asc,id asc");
$i=0;
while($row = $rs->fetch())
{
$i++;
$data.=$i.','.display_type($row['type']).','.$row['account'].','.text_encoding($row['username']).','.$row['realmoney'].','.$remark."\r\n";
}
}
$file_name='pay_'.$type.'_'.$batch.'.csv';
$file_size=strlen($data);
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: {$file_size}");
header("Content-Disposition:attachment; filename={$file_name}");
echo $data;
break;
case 'ustat':
$startday = trim($_GET['startday']);
$endday = trim($_GET['endday']);
$method = trim($_GET['method']);
$type = intval($_POST['type']);
if(!$startday || !$endday)exit("<script language='javascript'>alert('param error');history.go(-1);</script>");
$data = [];
$columns = ['uid'=>'商户ID', 'total'=>'总计'];
if($method == 'type'){
$paytype = [];
$rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1");
foreach($rs as $row){
$paytype[$row['id']] = text_encoding($row['showname']);
if($type == 4){
$columns['type_'.$row['name']] = text_encoding($row['showname']);
}else{
$columns['type_'.$row['id']] = text_encoding($row['showname']);
}
}
unset($rs);
}else{
$channel = [];
$rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1");
foreach($rs as $row){
$channel[$row['id']] = text_encoding($row['name']);
}
unset($rs);
}
if($type == 4){
$rs=$DB->query("SELECT uid,type,channel,money from pre_transfer where status=1 and paytime>='$startday' and paytime<='$endday'");
while($row = $rs->fetch())
{
$money = (float)$row['money'];
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
$data[$row['uid']]['total'] += $money;
if($method == 'type'){
$ukey = 'type_'.$row['type'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
}else{
$ukey = 'channel_'.$row['channel'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
}
}
}else{
$rs=$DB->query("SELECT uid,type,channel,money,realmoney,getmoney,profitmoney from pre_order where status=1 and date>='$startday' and date<='$endday'");
while($row = $rs->fetch())
{
if($type == 3){
$money = (float)$row['profitmoney'];
}elseif($type == 2){
$money = (float)$row['getmoney'];
}elseif($type == 1){
$money = (float)$row['realmoney'];
}else{
$money = (float)$row['money'];
}
if(!array_key_exists($row['uid'], $data)) $data[$row['uid']] = ['uid'=>$row['uid'], 'total'=>0];
$data[$row['uid']]['total'] += $money;
if($method == 'type'){
$ukey = 'type_'.$row['type'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
}else{
$ukey = 'channel_'.$row['channel'];
if(!array_key_exists($ukey, $data[$row['uid']])) $data[$row['uid']][$ukey] = $money;
else $data[$row['uid']][$ukey] += $money;
if(!in_array($ukey, $columns)) $columns[$ukey] = $channel[$row['channel']];
}
}
}
ksort($data);
$file='';
foreach($columns as $column){
$file.=$column.',';
}
$file=substr($file,0,-1)."\r\n";
foreach($data as $row){
foreach($columns as $key=>$column){
if(!array_key_exists($key, $row))
$file.='0,';
else
$file.=$row[$key].',';
}
$file=substr($file,0,-1)."\r\n";
}
$file_name='pay_'.$method.'_'.$startday.'_'.$endday.'.csv';
$file_size=strlen($file);
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: {$file_size}");
header("Content-Disposition:attachment; filename={$file_name}");
echo $file;
break;
case 'order':
$starttime = trim($_GET['starttime']);
$endtime = trim($_GET['endtime']);
$uid = intval($_GET['uid']);
$type = intval($_GET['type']);
$channel = intval($_GET['channel']);
$dstatus = intval($_GET['dstatus']);
$paytype = [];
$rs = $DB->getAll("SELECT * FROM pre_type");
foreach($rs as $row){
$paytype[$row['id']] = text_encoding($row['showname']);
}
unset($rs);
$sql=" 1=1";
if(!empty($uid)) {
$sql.=" AND A.`uid`='$uid'";
}
if(!empty($type)) {
$sql.=" AND A.`type`='$type'";
}elseif(!empty($channel)) {
$sql.=" AND A.`channel`='$channel'";
}
if($dstatus>-1) {
$sql.=" AND A.status={$dstatus}";
}
if(!empty($starttime)){
$starttime = date("Y-m-d H:i:s", strtotime($starttime.' 00:00:00'));
$sql.=" AND A.addtime>='{$starttime}'";
}
if(!empty($endtime)){
$endtime = date("Y-m-d H:i:s", strtotime("+1 days", strtotime($endtime.' 00:00:00')));
$sql.=" AND A.addtime<'{$endtime}'";
}
$file="系统订单号,商户订单号,接口订单号,商户号,网站域名,商品名称,订单金额,实际支付,商户分成,支付方式,支付通道ID,支付插件,支付账号,支付IP,创建时间,完成时间,支付状态\r\n";
$rs = $DB->query("SELECT A.*,B.plugin FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE{$sql} order by trade_no desc limit 100000");
while($row = $rs->fetch()){
$file.='="'.$row['trade_no'].'",="'.$row['out_trade_no'].'",="'.$row['api_trade_no'].'",'.$row['uid'].','.$row['domain'].','.text_encoding($row['name']).','.$row['money'].','.$row['realmoney'].','.$row['getmoney'].','.$paytype[$row['type']].','.$row['channel'].','.$row['plugin'].','.$row['buyer'].','.$row['ip'].','.$row['addtime'].','.$row['endtime'].','.display_status($row['status'])."\r\n";
}
$file_name='order_'.$starttime.'_'.$endtime.'.csv';
$file_size=strlen($file);
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: {$file_size}");
header("Content-Disposition:attachment; filename={$file_name}");
echo $file;
break;
case 'wximg':
if(!checkRefererHost())exit();
$channelid = intval($_GET['channel']);
$subchannelid = intval($_GET['subchannel']);
$media_id = $_GET['mediaid'];
$channel = $subchannelid ? \lib\Channel::getSub($subchannelid) : \lib\Channel::get($channelid);
$model = \lib\Complain\CommUtil::getModel($channel);
$image = $model->getImage($media_id);
if($image !== false){
$seconds_to_cache = 3600*24*7;
header("Cache-Control: max-age=$seconds_to_cache");
header("Content-Type: image/jpeg");
echo $image;
}
break;
default:
exit('No Act');
break;
}
+74
View File
@@ -0,0 +1,74 @@
<?php
include("../includes/common.php");
$title='导出订单';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$type_select = '<option value="0">所有支付方式</option>';
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
foreach($rs as $row){
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
}
unset($rs);
?>
<link href="../assets/css/datepicker.css" rel="stylesheet">
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">导出订单</h3></div>
<div class="panel-body">
<form action="" method="POST" onsubmit="return exportOrder()" role="form">
<div class="form-group">
<div class="input-group input-daterange"><div class="input-group-addon">时间范围</div>
<input type="text" id="starttime" name="starttime" class="form-control" placeholder="开始日期*" autocomplete="off" required>
<span class="input-group-addon"><i class="fa fa-chevron-right"></i></span>
<input type="text" id="endtime" name="endtime" class="form-control" placeholder="结束日期*" autocomplete="off" required>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">商户号</div>
<input type="text" name="uid" value="" class="form-control" placeholder="留空为全部商户"/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">支付方式</div>
<select name="type" class="form-control"><?php echo $type_select?></select>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">通道ID</div>
<input type="text" name="channel" value="" class="form-control" placeholder="留空为全部通道"/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">订单状态</div>
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">状态未支付</option><option value="1">状态已支付</option><option value="2">状态已退款</option><option value="3">状态已冻结</option></select>
</div></div>
<p><input type="submit" name="submit" value="导出" class="btn btn-primary form-control"/></p>
</form>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<script>
function exportOrder(){
var starttime = $("input[name='starttime']").val();
var endtime = $("input[name='endtime']").val();
var uid = $("input[name='uid']").val();
var type = $("select[name='type']").val();
var channel = $("input[name='channel']").val();
var dstatus = $("select[name='dstatus']").val();
if(starttime == '' || endtime == ''){
layer.alert('时间范围是必填的!'); return false;
}
window.location.href='./download.php?act=order&starttime='+starttime+'&endtime='+endtime+'&uid='+uid+'&type='+type+'&channel='+channel+'&dstatus='+dstatus;
return false;
}
$(document).ready(function(){
$('.input-datepicker, .input-daterange').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
clearBtn: true,
language: 'zh-CN'
});
})
</script>
+265
View File
@@ -0,0 +1,265 @@
<?php
include("../includes/common.php");
$title='新增/编辑用户组';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$paytype = [];
$rs = $DB->getAll("SELECT * FROM pre_type WHERE status=1 ORDER BY id ASC");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
}
unset($rs);
$alipay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%alipay%')");
$wxpay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%wxpay%')");
$qqpay_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%qqpay%')");
$bank_channel = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%bank%')");
$grouprow = [];
$act = isset($_GET['act'])?daddslashes($_GET['act']):null;
if($act == 'edit'){
$id = isset($_GET['gid'])?intval($_GET['gid']):0;
$grouprow = $DB->getRow("SELECT * FROM pre_group WHERE gid='$id' LIMIT 1");
if(!$grouprow) showmsg('当前用户组不存在!',3);
$title = '编辑用户组 GID:'.$id;
$grouprow['info'] = json_decode($grouprow['info'], true);
$grouprow['config'] = $grouprow['config'] ? json_decode($grouprow['config'], true) : [];
}else{
$title = '新增用户组';
}
?>
<style>
.table>tbody>tr>td{vertical-align: middle;}
</style>
<div class="container" style="padding-top:70px;">
<div class="col-sm-12 col-md-10 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title"><?php echo $title?></h3></div>
<div class="panel-body">
<form class="form-horizontal" id="form-store" onsubmit="return save(this)" method="POST">
<input type="hidden" name="action" id="action" value="<?php echo $act?>"/>
<input type="hidden" name="gid" id="gid"/>
<div class="row">
<div class="col-sm-12 col-md-7">
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" placeholder="不要与其他用户组名称重复" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">通道费率</label>
<div class="col-sm-10">
<table class="table">
<thead><tr><th style="min-width:100px">支付方式</th><th>选择支付通道</th><th>填写分成比例</th></tr></thead>
<tbody>
<?php
foreach($paytype as $key=>$value)
{
$select = '';
$rs = $DB->getAll("SELECT * FROM pre_channel WHERE type='$key' AND status=1");
foreach($rs as $row){
$select .= '<option value="'.$row['id'].'" rate="'.$row['rate'].'" type="channel">'.$row['name'].'</option>';
}
$rs = $DB->getAll("SELECT * FROM pre_roll WHERE type='$key' AND status=1");
foreach($rs as $row){
$select .= '<option value="'.$row['id'].'" rate="'.$row['rate'].'" type="roll">'.$row['name'].'</option>';
}
echo '<tr><td><b>'.$value.'</b><input type="hidden" name="info['.$key.'][type]" value=""></td><td><select name="info['.$key.'][channel]" class="form-control" onchange="changeChannel('.$key.')"><option value="0">关闭</option><option value="-1" type="channel">随机可用通道</option>'.$select.'<option value="-2" type="channel">用户自定义子通道</option></select></td><td><div class="input-group"><input type="text" class="form-control" name="info['.$key.'][rate]" placeholder="百分数"><span class="input-group-addon">%</span></div></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">代付通道</label>
<div class="col-sm-10">
<table class="table">
<thead><tr><th style="min-width:100px">转账方式</th><th>选择支付通道</th></tr></thead>
<tbody>
<tr><td><b>支付宝</b></td><td><select name="config[transfer_alipay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
<tr><td><b>微信支付</b></td><td><select name="config[transfer_wxpay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($wxpay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
<tr><td><b>QQ钱包</b></td><td><select name="config[transfer_qqpay]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($qqpay_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
<tr><td><b>银行卡</b></td><td><select name="config[transfer_bank]" class="form-control"><option value="">缺省(与系统设置一致)</option><?php foreach($bank_channel as $channel){echo '<option value="'.$channel['id'].'" plugin="'.$channel['plugin'].'">'.$channel['name'].'</option>';} ?></select></td></tr>
</tbody>
</table>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">用户变量</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="settings" placeholder="没有请勿填写,格式:变量名1:显示名1,变量名2:显示名2"><font color="green">用于替换支付通道密钥配置里面的变量,如选“用户自定义子通道”,则此处不需要填写</font>
</div>
</div>
</div>
<div class="col-sm-12 col-md-5">
<div class="form-group">
<label class="col-sm-4 control-label">结算开关</label>
<div class="col-sm-8">
<select name="config[settle_open]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="1">只开启每日自动结算</option><option value="2">只开启手动申请结算</option><option value="3">开启自动+手动结算</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">结算周期</label>
<div class="col-sm-8">
<select name="config[settle_type]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="1">D+0(可结算全部余额)</option><option value="2">D+1(可结算前1天的余额)</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">自动转账</label>
<div class="col-sm-8">
<select name="config[settle_transfer]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="1">开启手动提现自动转账</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label no-padding-right">结算手续费</label>
<div class="col-sm-8">
<div class="input-group"><input type="text" name="config[settle_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">余额充值</label>
<div class="col-sm-8">
<select name="config[recharge]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">聚合收款码</label>
<div class="col-sm-8">
<select name="config[onecode]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">代付功能</label>
<div class="col-sm-8">
<select name="config[user_transfer]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="1">开启</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label no-padding-right">代付手续费</label>
<div class="col-sm-8">
<div class="input-group"><input type="text" name="config[transfer_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">邀请返现</label>
<div class="col-sm-8">
<select name="config[invite_open]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="1">开启</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label no-padding-right">邀请分成比例</label>
<div class="col-sm-8">
<div class="input-group"><input type="text" name="config[invite_rate]" class="form-control" placeholder="留空则与系统设置一致"/><span class="input-group-addon">%</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">商户保证金</label>
<div class="col-sm-8">
<select name="config[user_deposit]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="0">关闭</option><option value="1">开启</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">结算时间</label>
<div class="col-sm-8">
<select name="config[direct_settle_time]" class="form-control">
<option value="">缺省(与系统设置一致)</option><option value="0">支付后立即结算</option><option value="1">支付后延迟24小时结算</option>
</select>
</div>
</div>
<?php if(class_exists("\\lib\\Applyments\\CommUtil")){?><div class="form-group">
<label class="col-sm-4 control-label">免费进件</label>
<div class="col-sm-8">
<select name="config[applyments_free]" class="form-control">
<option value="0">否</option><option value="1">是</option>
</select>
</div>
</div><?php }?>
</div>
</div>
<input type="submit" class="btn btn-primary btn-block" value="保存"></form>
</form>
<br/><a href="./glist.php">>>返回用户组设置</a>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
<script>
var grouprow = <?php echo json_encode($grouprow)?>;
var action = $("#action").val();
if(action == 'edit'){
var $form = $('#form-store');
$.each(grouprow, function(key, value) {
$form.find('[name="' + key + '"]').val(value);
});
$.each(grouprow.config, function(key, value) {
var $input = $form.find('[name="config[' + key + ']"]');
if ($input.is('select')) {
var $option = $input.find('option[value="' + value + '"]');
if ($option.length > 0) {
$input.val(value);
}
}else{
$input.val(value);
}
});
$.each(grouprow.info, function (i, res) {
$("select[name='info["+i+"][channel]']").val(res.channel);
$("input[name='info["+i+"][rate]']").val(res.rate);
$("input[name='info["+i+"][type]']").val(res.type);
})
}
function changeChannel(type){
var rate = $("select[name='info["+type+"][channel]'] option:selected").attr('rate');
var type2 = $("select[name='info["+type+"][channel]'] option:selected").attr('type');
if($("input[name='info["+type+"][rate]']").val()=='')$("input[name='info["+type+"][rate]']").val(rate);
$("input[name='info["+type+"][type]']").val(type2);
}
function save(form){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=saveGroup',
data : $(form).serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.href='./glist.php';
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
</script>
+169
View File
@@ -0,0 +1,169 @@
<?php
include("../includes/common.php");
$title='获取用户标识';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
$app = isset($_GET['app'])?$_GET['app']:'wechat';
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">获取用户标识</h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li class="<?php echo $app=='wechat'?'active':null;?>"><a href="?app=wechat">微信Openid</a></li><li class="<?php echo $app=='alipayuid'?'active':null;?>"><a href="?app=alipayuid">支付宝用户ID</a></li><li class="<?php echo $app=='apptoken'?'active':null;?>"><a href="?app=apptoken">支付宝应用授权Token</a></li>
</ul>
<div class="tab-pane active">
<input type="hidden" id="apptype" value="<?php echo $app?>">
<input type="hidden" id="siteurl" value="<?php echo $siteurl?>">
<?php if($app=='wechat'){
$wxpay_channel = $DB->getAll("SELECT * FROM pre_weixin WHERE type=0");
$default_wx = $conf['login_wx'];
if($conf['transfer_wxpay']){
$channel = \lib\Channel::get($conf['transfer_wxpay']);
if($channel) {
$default_wx = $channel['appwxmp'];
}
}
?>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">选择微信公众号</div>
<select id="channel" class="form-control">
<?php foreach($wxpay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$default_wx?'selected':'').'>'.$channel['name'].'</option>';} ?>
</select>
</div>
<font color="green">在公众号小程序管理里面添加公众号</font>
</div>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">获取链接</div>
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
</div>
<font color="green">复制链接后在微信打开</font>
</div>
<div class="list-group-item list-group-item-info text-center">
或使用微信扫描以下二维码
</div>
<div class="list-group-item text-center">
<div id="qrcode"></div>
</div>
<?php }elseif($app=='alipayuid'){
$alipay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='alipay' OR plugin='alipaysl' OR plugin='alipayd' OR plugin='alipayrp'");
?>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">选择支付通道</div>
<select id="channel" class="form-control">
<?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$conf['login_alipay']?'selected':'').'>'.$channel['name'].'</option>';} ?>
</select>
</div>
<font color="green">支持alipay、alipaysl、alipayd支付插件,需要先在支付宝应用的授权回调地址配置好当前域名</font>
</div>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">获取链接</div>
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
</div>
<font color="green">复制链接后在支付宝打开</font>
</div>
<div class="list-group-item list-group-item-info text-center">
或使用支付宝扫描以下二维码
</div>
<div class="list-group-item text-center">
<div id="qrcode"></div>
</div>
<?php }elseif($app=='apptoken'){
$alipay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='alipaysl'");
?>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">选择支付通道</div>
<select id="channel" class="form-control">
<?php foreach($alipay_channel as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$conf['login_alipay']?'selected':'').'>'.$channel['name'].'</option>';} ?>
</select>
</div>
<font color="green">支持alipaysl支付插件,需要先在支付宝应用(第三方应用)的授权回调地址配置好回调地址</font>
</div>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">授权方式</div>
<select id="authtype" class="form-control"><option value="0">基础应用授权</option><option value="1">指定应用授权</option></select>
</div>
</div>
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">获取链接</div>
<input type="text" id="geturl" value="" class="form-control" readonly="readonly">
<div class="input-group-btn"><a href="javascript:;" class="btn btn-default copy-btn" data-clipboard-text="" title="点击复制"><i class="fa fa-copy"></i></a></div>
</div>
<font color="green">复制链接后在支付宝打开</font>
</div>
<div class="list-group-item list-group-item-info text-center">
或使用支付宝扫描以下二维码
</div>
<div class="list-group-item text-center">
<div id="qrcode"></div>
</div>
<?php }?>
</div>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<script>
var apptype = $("#apptype").val();
var siteurl = $("#siteurl").val();
$(document).ready(function(){
var clipboard = new Clipboard('.copy-btn');
clipboard.on('success', function (e) {
layer.msg('复制成功!', {icon: 1});
});
clipboard.on('error', function (e) {
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
});
$("#channel").change(function(){
var channel = $("#channel").val();
if(channel != null){
if(apptype == 'wechat'){
var geturl = siteurl+'user/openid.php?wechatid='+channel;
}else if(apptype == 'alipayuid'){
var geturl = siteurl+'user/openid.php?channel='+channel;
}else if(apptype == 'apptoken'){
var authtype = $("#authtype").val();
if(authtype == '1'){
var geturl = siteurl+'user/openid.php?act=app_auth_assign&channel='+channel;
}else{
var geturl = siteurl+'user/openid.php?act=app_auth&channel='+channel;
}
}
$("#geturl").val(geturl);
$(".copy-btn").attr('data-clipboard-text', geturl);
$('#qrcode').empty();
$('#qrcode').qrcode({
text: geturl,
width: 180,
height: 180,
foreground: "#000000",
background: "#ffffff",
typeNumber: -1
});
}else{
layer.msg('无可用的通道')
}
});
$("#channel").change();
$("#authtype").change(function(){
$("#channel").change();
});
});
</script>
+85
View File
@@ -0,0 +1,85 @@
<?php
/**
* 用户组设置
**/
include("../includes/common.php");
$title='用户组设置';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-10 center-block" style="float: none;">
<?php
$paytype = [];
$rs = $DB->getAll("SELECT * FROM pre_type WHERE status=1 ORDER BY id ASC");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
}
unset($rs);
function display_info($info){
global $paytype;
$result = '';
$arr = json_decode($info, true);
foreach($arr as $k=>$v){
if($v['channel']==0)continue;
$result .= $paytype[$k].'('.$v['channel'].'):'.$v['rate'].',';
}
return substr($result,0,-1);
}
$list = $DB->getAll("SELECT * FROM pre_group ORDER BY gid ASC");
?>
<div class="panel panel-success">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个用户组&nbsp;<span class="pull-right"><a href="./gedit.php?act=add" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>GID</th><th>用户组名称</th><th>通道与费率</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td>'.display_info($res['info']).'</td><td><a class="btn btn-xs btn-default" href="./ulist.php?gid='.$res['gid'].'">用户</a>&nbsp;<a class="btn btn-xs btn-info" href="./gedit.php?act=edit&gid='.$res['gid'].'">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['gid'].')">删除</a></td></tr>';
}
?>
</tbody>
</table>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 未设置用户组的用户是默认用户组,会自动使用已添加的可用支付通道和通道默认费率
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function delItem(id) {
if(id==0){
layer.msg('系统自带默认用户组不支持删除');
return false;
}
var confirmobj = layer.confirm('你确实要删除此用户组吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=delGroup&gid='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
</script>
+169
View File
@@ -0,0 +1,169 @@
<?php
/**
* 公告设置
**/
include("../includes/common.php");
$title='公告设置';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<link href="<?php echo $cdnpublic?>bootstrap-colorpicker/2.5.3/css/bootstrap-colorpicker.min.css" rel="stylesheet"/>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
$my=isset($_GET['my'])?$_GET['my']:null;
if($my=='edit'){
$id=intval($_GET['id']);
$rows=$DB->getRow("select * from pre_anounce where id='$id' limit 1");
if(!$rows)
showmsg('当前公告不存在!',3);
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">修改公告(ID:<?php echo $id?>)</h3></div>
<div class="panel-body">
<form action="./gonggao.php?my=edit_submit&id=<?php echo $id?>" role="form" class="form-horizontal" method="post">
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">公告内容</div>
<textarea class="form-control" name="content" rows="5" placeholder="输入公告内容" required><?php echo $rows['content']?></textarea>
</div>
</div>
<div class="list-group-item form-inline">
<div class="input-group">
<div class="input-group-addon">排序</div>
<input type="text" name="sort" value="<?php echo $rows['sort']?>" class="form-control" required/>
</div>
<div class="input-group input-colorpicker colorpicker-element">
<input type="text" name="color" value="<?php echo $rows['color']?>" class="form-control" placeholder="文字颜色" maxlength="7"/>
<span class="input-group-addon"><i></i></span>
</div>
</div>
<div class="list-group-item">
<input type="submit" value="保存" class="btn btn-primary btn-block">
</div>
</form>
</div>
</div>
<?php
}
elseif($my=='add_submit'){
$content=$_POST['content'];
$sort=intval($_POST['sort']);
$color=trim($_POST['color']);
if(!$content || !$sort){
showmsg('公告内容不能为空',3);
} else {
$sds=$DB->exec("INSERT INTO `pre_anounce` (`content`, `color`, `sort`, `addtime`, `status`) VALUES ('{$content}', '{$color}', '{$sort}', '{$date}', 1)");
if($sds){
showmsg('添加公告成功!<br/><br/><a href="./gonggao.php">>>返回公告列表</a>',1);
}else
showmsg('添加公告失败!<br/>错误信息:'.$DB->error(),4);
}
}
elseif($my=='edit_submit'){
$id=intval($_GET['id']);
$rows=$DB->getRow("select * from pre_anounce where id='$id' limit 1");
if(!$rows)
showmsg('当前公告不存在!',3);
$content=$_POST['content'];
$sort=intval($_POST['sort']);
$color=trim($_POST['color']);
if(!$content || !$sort){
showmsg('公告内容不能为空',3);
} else {
$sds=$DB->exec("UPDATE `pre_anounce` SET `content`='$content',`sort`='$sort',`color`='$color' WHERE `id`='$id'");
if($sds!==false){
showmsg('修改公告成功!<br/><br/><a href="./gonggao.php">>>返回公告列表</a>',1);
}else
showmsg('修改公告失败!<br/>错误信息:'.$DB->error(),4);
}
}else{
$list = $DB->getAll("SELECT * FROM pre_anounce ORDER BY sort ASC");
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">添加公告</h3></div>
<div class="panel-body">
<form action="./gonggao.php?my=add_submit" role="form" class="form-horizontal" method="post">
<div class="list-group-item">
<div class="input-group">
<div class="input-group-addon">公告内容</div>
<textarea class="form-control" name="content" rows="5" placeholder="输入公告内容" required></textarea>
</div>
</div>
<div class="list-group-item form-inline">
<div class="input-group">
<div class="input-group-addon">排序</div>
<input type="text" name="sort" value="50" class="form-control" required/>
</div>
<div class="input-group input-colorpicker colorpicker-element">
<input type="text" name="color" value="" class="form-control" placeholder="文字颜色" maxlength="7"/>
<span class="input-group-addon"><i></i></span>
</div>
</div>
<div class="list-group-item">
<input type="submit" value="添加" class="btn btn-primary btn-block">
<a href="./set.php?mod=gonggao" class="btn btn-default btn-block">弹出公告与首页底部设置</a>
</div>
</form>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">已发公告</h3></div>
<div class="panel-body">
<?php foreach($list as $row){?>
<div class="list-group-item">
<em class="fa fa-fw fa-volume-up"></em><font color="<?php echo $row['color']?$row['color']:null?>"><?php echo $row['content']?></font><small>&nbsp;-<?php echo $row['addtime']?></small>&nbsp;&nbsp;<?php echo $row['status']==1?'<span class="btn btn-xs btn-success" onclick="setStatus('.$row['id'].',0)">显示</span>':'<span class="btn btn-xs btn-warning" onclick="setStatus('.$row['id'].',1)">隐藏</span>'?>&nbsp;<a class="btn btn-xs btn-info" href="./gonggao.php?my=edit&id=<?php echo $row['id']?>">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" href="javascript:delItem(<?php echo $row['id']?>)">删除</a>
</div>
<?php }?>
</div>
</div>
<?php }?>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-colorpicker/2.5.3/js/bootstrap-colorpicker.min.js"></script>
<script>
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax.php?act=setGonggao&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload();
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此公告吗?', {
btn: ['确定','取消']
}, function(){
$.ajax({
type : 'GET',
url : 'ajax.php?act=delGonggao&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload();
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
});
}
$(document).ready(function(){
$('.input-colorpicker').colorpicker({format: 'hex'});
})
</script>
+134
View File
@@ -0,0 +1,134 @@
<?php
/**
* 用户组购买设置
**/
include("../includes/common.php");
$title='用户组购买设置';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
.table>tbody>tr>td{vertical-align: middle;}</style>
<div class="container" style="padding-top:70px;">
<div class="col-sm-12 col-md-10 col-lg-9 center-block" style="float: none;">
<?php
$list1 = $DB->getAll("SELECT * FROM pre_group WHERE isbuy=1 ORDER BY SORT ASC");
$list2 = $DB->getAll("SELECT * FROM pre_group WHERE isbuy=0");
?>
<div class="panel panel-primary">
<div class="panel-body">
<div class="list-group-item">用户组购买开关:<?php echo $conf['group_buy']==1?'<span style="color:green">已开启</span>&nbsp;&nbsp;<a href="javascript:changeSetting(0)" class="btn btn-danger btn-sm">点击关闭</a>':'<span style="color:red">已关闭</span>&nbsp;&nbsp;<a href="javascript:changeSetting(1)" class="btn btn-success btn-sm">点击开启</a>';?></div>
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading"><h3 class="panel-title">可购买的用户组 <b><?php echo count($list1);?></b></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>GID</th><th>用户组名称</th><th>售价</th><th>有效期(月)</th><th>排序</th><th>可见范围&nbsp;<a tabindex="0" role="button" data-toggle="popover" data-trigger="focus" title="" data-placement="top" data-content="可设置哪些用户组可以看到并购买该用户组,留空为全部可见,填写可见用户组GID,多个GID用,隔开" data-original-title="可见范围说明"><span class="glyphicon glyphicon-info-sign"></span></a></th><th>操作</th></tr></thead>
<tbody><form id="glist">
<?php
foreach($list1 as $res)
{
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td><input type="text" class="form-control input-sm" name="price['.$res['gid'].']" value="'.$res['price'].'" placeholder="填写售价" required></td><td><input type="text" class="form-control input-sm" name="expire['.$res['gid'].']" value="'.($res['expire']=='0'?'':$res['expire']).'" placeholder="0或留空为永久" required></td><td><input type="text" class="form-control input-sm" name="sort['.$res['gid'].']" value="'.$res['sort'].'" placeholder="数字越小越靠前" required></td><td><input type="text" class="form-control input-sm" name="visible['.$res['gid'].']" value="'.$res['visible'].'" placeholder="留空为全部可见" required></td><td><a class="btn btn-sm btn-warning" onclick="setItem('.$res['gid'].',0)">下架</a></td></tr>';
}
if(count($list1)>0)echo '<tr><td></td><td></td><td colspan="4"><span class="btn btn-success btn-sm btn-block" onclick="saveAll()">保存全部</span></td><td></td></tr>';
?></form>
</tbody>
</table>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">不可购买的用户组 <b><?php echo count($list2);?></b></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>GID</th><th>用户组名称</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list2 as $res)
{
echo '<tr><td><b>'.$res['gid'].'</b></td><td>'.$res['name'].'</td><td><a class="btn btn-sm btn-success" onclick="setItem('.$res['gid'].',1)">上架</a></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function saveAll(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=saveGroupPrice',
data : $("#glist").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function setItem(id,status) {
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=saveGroup',
data : {action:'changebuy', gid:id, status:status},
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function changeSetting(value){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax.php?act=set',
data : {group_buy:value},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('更换设置成功!', {
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
+120
View File
@@ -0,0 +1,120 @@
<?php
@header('Content-Type: text/html; charset=UTF-8');
$admin_cdnpublic = 4;
if($admin_cdnpublic==1){
$cdnpublic = '//lib.baomitu.com/';
}elseif($admin_cdnpublic==2){
$cdnpublic = 'https://s4.zstatic.net/ajax/libs/';
}elseif($admin_cdnpublic==4){
$cdnpublic = '//lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/';
}else{
$cdnpublic = '//mirrors.sustech.edu.cn/cdnjs/ajax/libs/';
}
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title><?php echo $title ?></title>
<link href="<?php echo $cdnpublic?>twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<link href="../assets/css/bootstrap.min.css" rel="stylesheet"/>
<link href="../assets/css/bootstrap-table.css?v=1" rel="stylesheet"/>
<link href="<?php echo $cdnpublic?>font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="<?php echo $cdnpublic?>modernizr/2.8.3/modernizr.min.js"></script>
<script src="<?php echo $cdnpublic?>jquery/2.1.4/jquery.min.js"></script>
<script src="<?php echo $cdnpublic?>twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<!--[if lt IE 9]>
<script src="<?php echo $cdnpublic?>html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="<?php echo $cdnpublic?>respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<?php if($islogin==1){?>
<nav class="navbar navbar-fixed-top navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">导航按钮</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="./">支付管理中心</a>
</div><!-- /.navbar-header -->
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li class="<?php echo checkIfActive('index,')?>">
<a href="./"><i class="fa fa-home"></i> 平台首页</a>
</li>
<li class="<?php echo checkIfActive('order')?>">
<a href="./order.php"><i class="fa fa-list"></i> 订单管理</a>
</li>
<li class="<?php echo checkIfActive('settle,slist')?>">
<a href="./slist.php"><i class="fa fa-cloud"></i> 结算管理</a>
</li>
<li class="<?php echo checkIfActive('ulist,glist,gedit,group,record,uset,domain,ustat,invitecode')?>">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> 商户管理<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./ulist.php">用户列表</a></li>
<li><a href="./glist.php">用户组设置</a></li>
<li><a href="./group.php">用户组购买</a></li>
<li><a href="./record.php">资金明细</a></li>
<li><a href="./ustat.php">支付统计</a></li>
<?php if($conf['pay_domain_forbid']==1 || $conf['pay_domain_open']==1){?><li><a href="./domain.php">授权域名</a></li><?php }?>
<?php if($conf['reg_open']==2){?><li><a href="./invitecode.php">邀请码管理</a></li><?php }?>
</ul>
</li>
<li class="<?php echo checkIfActive('pay_channel,pay_roll,pay_type,pay_plugin,pay_weixin')?>">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-credit-card"></i> 支付接口<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./pay_channel.php">支付通道</a></li>
<li><a href="./pay_type.php">支付方式</a></li>
<li><a href="./pay_plugin.php">支付插件</a></li>
<li><a href="./pay_roll.php">支付通道轮询</a></li>
<li><a href="./pay_weixin.php">公众号小程序</a></li>
</ul>
</li>
<li class="<?php echo checkIfActive('set,gonggao,set_wxkf')?>">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> 系统设置<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./set.php?mod=site">网站信息配置</a></li>
<li><a href="./set.php?mod=pay">支付相关配置</a><li>
<li><a href="./set.php?mod=risk">风控检测配置</a><li>
<li><a href="./set.php?mod=settle">结算规则配置</a><li>
<li><a href="./set.php?mod=transfer">转账付款配置</a><li>
<li><a href="./set.php?mod=oauth">快捷登录配置</a><li>
<li><a href="./set.php?mod=notice">消息提醒配置</a><li>
<li><a href="./set.php?mod=certificate">实名认证配置</a><li>
<li><a href="./gonggao.php">网站公告配置</a></li>
<li><a href="./set.php?mod=template">首页模板配置</a><li>
<li><a href="./set.php?mod=mail">邮箱与短信配置</a><li>
<li><a href="./set.php?mod=upimg">网站Logo上传</a><li>
<li><a href="./set.php?mod=cron">计划任务配置</a><li>
<li><a href="./set_wxkf.php">H5跳转微信客服支付</a></li>
</ul>
</li>
<li class="<?php echo checkIfActive('clean,log,transfer,transfer_add,risk,export,ps_receiver,ps_order,gettoken,blacklist,complain,complain_info,buyerstat')?>">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cube"></i> 其他功能<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./export.php">导出订单</a><li>
<li><a href="./transfer_add.php">转账付款</a><li>
<li><a href="./transfer.php">付款记录</a><li>
<li><a href="./risk.php">风控记录</a><li>
<li><a href="./log.php">登录日志</a><li>
<li><a href="./clean.php">数据清理</a><li>
<li><a href="./ps_receiver.php">分账规则</a><li>
<li><a href="./ps_order.php">分账记录</a><li>
<li><a href="./gettoken.php">获取用户标识</a><li>
<li><a href="./blacklist.php">黑名单管理</a></li>
<li><a href="./buyerstat.php">支付用户统计</a></li>
</ul>
</li>
<li><a href="./login.php?logout" onclick="return confirm('是否确定退出登录?')"><i class="fa fa-power-off"></i> 退出登录</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav><!-- /.navbar -->
<?php }?>
+176
View File
@@ -0,0 +1,176 @@
<?php
include("../includes/common.php");
$title='支付管理中心';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<?php
if($conf['admin_pwd']==='123456'){
$msg[]='<li class="list-group-item list-group-item-danger"><span class="btn-sm btn-danger"><i class="fa fa-info-circle"></i> 提示</span>&nbsp;请及时修改网站默认管理员密码!</li>';
}elseif(strlen($conf['admin_pwd'])<6 || is_numeric($conf['admin_pwd']) && strlen($conf['admin_pwd'])<=10 || $conf['admin_pwd']===$conf['kfqq'] || $conf['admin_user']===$conf['admin_pwd']){
$msg[]='<li class="list-group-item list-group-item-danger"><span class="btn-sm btn-danger"><i class="fa fa-info-circle"></i> 提示</span>&nbsp;网站管理员密码过于简单,请及时修改密码!</li>';
}
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-lg-9 center-block" style="float: none;">
<div id="browser-notice"></div>
<div class="row">
<div class="col-xs-12 col-lg-8">
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title" id="title">后台管理首页</h3></div>
<ul class="list-group">
<?php if($msg){foreach($msg as $x){echo $x;}}?>
<li class="list-group-item"><span class="glyphicon glyphicon-stats"></span> <b>订单总数:</b><span id="count1"></span></li>
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>商户数量:</b><span id="count2"></span></li>
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>总计余额:</b><span id="usermoney"></span> 元(1小时更新一次)</li>
<li class="list-group-item"><span class="glyphicon glyphicon-tint"></span> <b>结算总额:</b><span id="settlemoney"></span> 元(1小时更新一次)</li>
<li class="list-group-item"><span class="glyphicon glyphicon-stats"></span> <b>今日订单成功率:</b><span id="success_rate"></span> %</li>
<li class="list-group-item"><span class="glyphicon glyphicon-time"></span> <b>现在时间:</b> <?=$date?></li>
</li>
</ul>
</div>
</div>
<div class="col-xs-12 col-lg-4">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title" id="title">管理员信息</h3></div>
<ul class="list-group text-center">
<li class="list-group-item">
<img src="<?php echo ($conf['kfqq'])?'//q2.qlogo.cn/headimg_dl?bs=qq&dst_uin='.$conf['kfqq'].'&src_uin='.$conf['kfqq'].'&fid='.$conf['kfqq'].'&spec=100&url_enc=0&referer=bu_interface&term_type=PC':'../assets/img/user.png'?>" alt="avatar" class="img-circle img-thumbnail"></br>
<span class="text-muted"><strong>用户名:</strong><font color="blue"><?php echo $conf['admin_user']?></font></span><br/><span class="text-muted"><strong>用户权限:</strong><font color="orange">管理员</font></span></li>
<li class="list-group-item"><a href="../" class="btn btn-xs btn-default">返回首页</a>&nbsp;<a href="./set.php?mod=account" class="btn btn-xs btn-info">修改密码</a>&nbsp;<a href="./login.php?logout" class="btn btn-xs btn-danger">退出登录</a>
</li>
</ul>
</div>
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading"><h3 class="panel-title">支付方式收入统计(1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
<table class="table table-bordered table-striped">
<thead><tr id="paytype_head"><th>日期</th></thead>
<tbody id="paytype_list">
</tbody>
</table>
</div>
<div class="panel panel-warning">
<div class="panel-heading"><h3 class="panel-title">支付通道收入统计(1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead><tr id="channel_head"><th>日期</th></thead>
<tbody id="channel_list">
</tbody>
</table>
</div>
</div>
<div class="panel panel-warning">
<div class="panel-heading" style="background-color: #c09853;"><h3 class="panel-title">支付方式手续费利润(已扣除通道成本,1小时更新一次)<span class="pull-right"><a href="javascript:getData(true)" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></a></span></h3></div>
<table class="table table-bordered table-striped">
<thead><tr id="profit_paytype_head"><th>日期</th></thead>
<tbody id="profit_paytype_list">
</tbody>
</table>
</div>
</div>
</div>
<script>
$(document).ready(function(){
getData();
});
function getData(getnew){
getnew = getnew || false;
$('#title').html('正在加载数据中...');
$.ajax({
type : "GET",
url : "ajax.php?act=getcount"+(getnew?'&getnew=1':''),
dataType : 'json',
async: true,
success : function(data) {
$('#title').html('后台管理首页');
$('#count1').html(data.count1);
$('#count2').html(data.count2);
$('#usermoney').html(data.usermoney);
$('#settlemoney').html(data.settlemoney);
$('#success_rate').html(data.success_rate);
$("#paytype_head").html('<th>日期</th>');
$("#paytype_list").empty();
var paytype=new Array();
$.each(data.paytype, function(k, v){
paytype.push(k);
$("#paytype_head").append('<th>'+v+'</th>');
});
$("#paytype_head").append('<th>总计</th>');
var order = '';
$.each(paytype, function(k, v){
if(typeof data.order_today.paytype[v] != "undefined")order+='<td>'+data.order_today.paytype[v]+'</td>';
else order+='<td>0</td>';
});
$("#paytype_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.all+'</td></tr>');
$.each(data.order, function(k, v){
var order = '';
$.each(paytype, function(key, value){
if(typeof v.paytype[value] != "undefined")order+='<td>'+v.paytype[value]+'</td>';
else order+='<td>0</td>';
});
$("#paytype_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.all+'</td></tr>');
});
$("#channel_head").html('<th>日期</th>');
$("#channel_list").empty();
var channel=new Array();
$.each(data.channel, function(k, v){
channel.push(k);
$("#channel_head").append('<th>'+v+'</th>');
});
$("#channel_head").append('<th>总计</th>');
var order = '';
$.each(channel, function(k, v){
if(typeof data.order_today.channel[v] != "undefined")order+='<td>'+data.order_today.channel[v]+'</td>';
else order+='<td>0</td>';
});
$("#channel_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.all+'</td></tr>');
$.each(data.order, function(k, v){
var order = '';
$.each(channel, function(key, value){
if(typeof v.channel[value] != "undefined")order+='<td>'+v.channel[value]+'</td>';
else order+='<td>0</td>';
});
$("#channel_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.all+'</td></tr>');
});
$("#profit_paytype_head").html('<th>日期</th>');
$("#profit_paytype_list").empty();
var paytype=new Array();
$.each(data.paytype, function(k, v){
paytype.push(k);
$("#profit_paytype_head").append('<th>'+v+'</th>');
});
$("#profit_paytype_head").append('<th>总计</th>');
var order = '';
$.each(paytype, function(k, v){
if(typeof data.order_today.profit_paytype[v] != "undefined")order+='<td>'+data.order_today.profit_paytype[v]+'</td>';
else order+='<td>0</td>';
});
$("#profit_paytype_list").append('<tr><td>今日</td>'+order+'<td>'+data.order_today.profit_all+'</td></tr>');
$.each(data.order, function(k, v){
var order = '';
$.each(paytype, function(key, value){
if(typeof v.profit_paytype[value] != "undefined")order+='<td>'+v.profit_paytype[value]+'</td>';
else order+='<td>0</td>';
});
$("#profit_paytype_list").append('<tr><td>'+k+'</td>'+order+'<td>'+v.profit_all+'</td></tr>');
});
}
});
}
</script>
<script>
function speedModeNotice(){
var ua = window.navigator.userAgent;
if(ua.indexOf('Windows NT')>-1 && ua.indexOf('Trident/')>-1){
var html = "<div class=\"panel panel-default\"><div class=\"panel-body\">当前浏览器是兼容模式,为确保后台功能正常使用,请切换到<b style='color:#51b72f'>极速模式</b><br>操作方法:点击浏览器地址栏右侧的IE符号<b style='color:#51b72f;'><i class='fa fa-internet-explorer fa-fw'></i></b>→选择“<b style='color:#51b72f;'><i class='fa fa-flash fa-fw'></i></b><b style='color:#51b72f;'>极速模式</b>”</div></div>";
$("#browser-notice").html(html)
}
}
speedModeNotice();
</script>
+183
View File
@@ -0,0 +1,183 @@
<?php
include("../includes/common.php");
$title='邀请码管理';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="modal" align="left" id="search" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">生成邀请码</h4>
</div>
<div class="modal-body">
<form action="invitecode.php?my=add" method="POST">
<input type="text" class="form-control" name="num" placeholder="生成的个数" required><br/>
<input type="submit" class="btn btn-primary btn-block" value="生成"></form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-lg-10 center-block" style="float: none;">
<?php
function getkm($len = 18)
{
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$strlen = strlen($str);
$randstr = "";
for ($i = 0; $i < $len; $i++) {
$randstr .= $str[mt_rand(0, $strlen - 1)];
}
return $randstr;
}
$my=isset($_GET['my'])?$_GET['my']:null;
if($my=='add'){
$kind=1;
$num=intval($_POST['num']);
$value=intval($_POST['value']);
echo "<ul class='list-group'><li class='list-group-item active'>成功生成以下邀请码</li>";
for ($i = 0; $i < $num; $i++) {
$km=random(8);
$sql=$DB->query("insert into `pre_invitecode` (`code`,`addtime`,`status`) values ('".$km."',NOW(),0)");
if($sql) {
echo "<li class='list-group-item'>$km</li>";
}
}
echo '<a href="./invitecode.php" class="btn btn-default btn-block">>>返回邀请码列表</a>';
}
elseif($my=='del'){
echo '<div class="panel panel-primary">
<div class="panel-heading w h"><h3 class="panel-title">删除邀请码</h3></div>
<div class="panel-body box">';
$id=$_GET['id'];
$sql=$DB->query("DELETE FROM pre_invitecode WHERE id='$id'");
if($sql){echo '删除成功!';}
else{echo '删除失败!';}
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
}
elseif($my=='qk'){//清空邀请码
if(!checkRefererHost())exit();
echo '<div class="panel panel-primary">
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
<div class="panel-body box">
您确认要清空所有邀请码吗?清空后无法恢复!<br><a href="./invitecode.php?my=qk2">确认</a> | <a href="javascript:history.back();">返回</a></div></div>';
}
elseif($my=='qk2'){//清空邀请码结果
if(!checkRefererHost())exit();
echo '<div class="panel panel-primary">
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
<div class="panel-body box">';
if($DB->query("DELETE FROM pre_invitecode WHERE 1")==true){
echo '<div class="box">清空成功.</div>';
}else{
echo'<div class="box">清空失败.</div>';
}
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
}
elseif($my=='qkuse'){//清空已使用邀请码
if(!checkRefererHost())exit();
echo '<div class="panel panel-primary">
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
<div class="panel-body box">
您确认要清空所有邀请码吗?清空后无法恢复!<br><a href="./invitecode.php?my=qkuse2">确认</a> | <a href="javascript:history.back();">返回</a></div></div>';
}
elseif($my=='qkuse2'){//清空已使用邀请码结果
if(!checkRefererHost())exit();
echo '<div class="panel panel-primary">
<div class="panel-heading w h"><h3 class="panel-title">清空邀请码</h3></div>
<div class="panel-body box">';
if($DB->exec("DELETE FROM pre_invitecode WHERE status=1")!==false){
echo '<div class="box">清空成功.</div>';
}else{
echo'<div class="box">清空失败.</div>';
}
echo '<hr/><a href="./invitecode.php">>>返回邀请码列表</a></div></div>';
}
else
{
echo '<form action="invitecode.php" method="GET" class="form-inline">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="kw" placeholder="邀请码" required>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="invitecode.php?my=qk" class="btn btn-danger">清空</a>
<a href="invitecode.php?my=qkuse" class="btn btn-danger">清空已使用</a>
<a href="#" data-toggle="modal" data-target="#search" id="search" class="btn btn-success">生成</a>
</form>';
if(isset($_GET['kw'])) {
$sql=" `code`='{$_GET['kw']}'";
$numrows=$DB->getColumn("SELECT count(*) from pre_invitecode WHERE{$sql}");
$con='包含 '.$_GET['kw'].' 的共有 <b>'.$numrows.'</b> 个邀请码';
}else{
$numrows=$DB->getColumn("SELECT count(*) from pre_invitecode WHERE 1");
$sql=" 1";
$con='系统共有 <b>'.$numrows.'</b> 个邀请码';
}
echo $con;
?>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>邀请码</th><th>状态</th><th>添加时间</th><th>使用时间</th><th>使用者</th><th>操作</th></tr></thead>
<tbody>
<?php
$pagesize=30;
$pages=ceil($numrows/$pagesize);
$page=isset($_GET['page'])?intval($_GET['page']):1;
$offset=$pagesize*($page - 1);
$rs=$DB->query("SELECT * FROM pre_invitecode WHERE{$sql} order by id desc limit $offset,$pagesize");
while($res = $rs->fetch())
{
echo '<tr><td><b>'.$res['code'].'</b></td><td>'.($res['status']==1?'<font color="red">已使用</font>':'<font color="green">未使用</font>').'</td><td>'.$res['addtime'].'</td><td>'.$res['usetime'].'</td><td><a href="./ulist.php?column=uid&value='.$res['uid'].'" target="_blank">'.$res['uid'].'</a></td><td><a href="./invitecode.php?my=del&id='.$res['id'].'" class="btn btn-xs btn-danger" onclick="return confirm(\'你确实要删除此邀请码吗?\');">删除</a></td></tr>';
}
?>
</tbody>
</table>
</div>
<?php
echo'<ul class="pagination">';
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page>1)
{
echo '<li><a href="invitecode.php?page='.$first.$link.'">首页</a></li>';
echo '<li><a href="invitecode.php?page='.$prev.$link.'">&laquo;</a></li>';
} else {
echo '<li class="disabled"><a>首页</a></li>';
echo '<li class="disabled"><a>&laquo;</a></li>';
}
for ($i=1;$i<$page;$i++)
echo '<li><a href="invitecode.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '<li class="disabled"><a>'.$page.'</a></li>';
for ($i=$page+1;$i<=$pages;$i++)
echo '<li><a href="invitecode.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '';
if ($page<$pages)
{
echo '<li><a href="invitecode.php?page='.$next.$link.'">&raquo;</a></li>';
echo '<li><a href="invitecode.php?page='.$last.$link.'">尾页</a></li>';
} else {
echo '<li class="disabled"><a>&raquo;</a></li>';
echo '<li class="disabled"><a>尾页</a></li>';
}
echo'</ul>';
#分页
}
?>
</div>
</div>
+36
View File
@@ -0,0 +1,36 @@
<?php
if(!defined('IN_CRONLITE')) {
exit('Access Denied');
}
preg_match("#^\d.\d#", PHP_VERSION, $p_v);
$php_v = str_replace('.', '', $p_v[0]);
$is_win = strtolower(substr(PHP_OS, 0, 3)) === 'win';
$loader_ext = $is_win ? 'dll' : 'so';
$loader_path = ROOT.'assets/loader/swoole_loader_'.$php_v.'_nts.' . $loader_ext;
$loader_path = str_replace('/', DIRECTORY_SEPARATOR, $loader_path);
?>
<div class="container" style="padding-top:70px;">
<div class="row">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
if($p_v[0] < 8.0 || $p_v[0] >= 8.1){
showmsg('当前插件只支持PHP-8.0版本!');
}
if(!file_exists($loader_path)){
showmsg('Swoole Loader文件不存在,请联系管理员手动安装!');
}?>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">Swoole Loader 安装助手</h3></div>
<div class="panel-body">
<p>1、打开您的PHP配置文件(<code><?php echo php_ini_loaded_file()?></code>),如果是宝塔面板,在【软件商店】,找到PHP,点击【设置】->【配置文件】</p>
<p>2、PHP配置文件底部找一下,如果以前添加过类似<code>extension=swoole_loader_***.<?php echo $loader_ext?></code>这样的代码,先将其删掉,如果没有就下一步</p>
<p>3、将下面的代码复制到PHP配置文件的最后一行保存:</p>
<p><code>extension=<?php echo $loader_path?></code></p>
<p>4、重启php进程</p>
<p>5、刷新本页面</p>
</div>
</div>
</div>
</div>
</div>
+77
View File
@@ -0,0 +1,77 @@
<?php
/**
* 登录日志
**/
include("../includes/common.php");
$title='登录日志';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="uid">商户号</option><option value="ip">操作IP</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容(0为管理员)">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新登录日志"><i class="fa fa-refresh"></i></a>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_user.php?act=logList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: 'id',
title: 'ID',
formatter: function(value, row, index) {
return '<b>'+value+'</b>';
}
},
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return value>0?'<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>':'管理员';
}
},
{
field: 'type',
title: '操作类型'
},
{
field: 'ip',
title: '操作IP',
formatter: function(value, row, index) {
return '<a href="https://m.ip138.com/iplookup.asp?ip='+value+'" target="_blank" rel="noreferrer">'+value+'</a>';
}
},
{
field: 'date',
title: '时间'
}
],
})
})
</script>
+143
View File
@@ -0,0 +1,143 @@
<?php
/**
* 登录
**/
$verifycode = 1;//验证码开关
$login_limit_count = 5;//登录失败次数
$login_limit_file = '@login.lock';
if(!function_exists("imagecreate") || !file_exists('code.php'))$verifycode=0;
include("../includes/common.php");
if(isset($_GET['act']) && $_GET['act']=='login'){
if(!checkRefererHost())exit('{"code":403}');
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$code = trim($_POST['code']);
if(empty($username) || empty($password)){
exit(json_encode(['code'=>-1,'msg'=>'用户名或密码不能为空']));
}
if($verifycode==1 && (!$code || strtolower($code) != $_SESSION['vc_code'])){
exit(json_encode(['code'=>-1,'msg'=>'验证码错误']));
}
$errcount = $DB->getColumn("SELECT count(*) FROM `pre_log` WHERE `ip`='$clientip' AND `date`>DATE_SUB(NOW(),INTERVAL 1 DAY) AND `uid`=0 AND `type`='登录失败'");
if($errcount >= $login_limit_count && file_exists($login_limit_file)){
exit(json_encode(['code'=>-1,'msg'=>'多次登录失败,暂时禁止登录。可删除@login.lock文件解除限制']));
}
if($username == $conf['admin_user'] && $password == $conf['admin_pwd']){
$DB->insert('log', ['uid'=>0, 'type'=>'登录后台', 'date'=>'NOW()', 'ip'=>$clientip]);
$session=md5($username.$password.$password_hash);
$expiretime=time() + 2592000;
$token=authcode("{$username}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY);
setcookie("admin_token", $token, $expiretime, null, null, null, true);
unset($_SESSION['vc_code']);
exit(json_encode(['code'=>0]));
}else{
$DB->insert('log', ['uid'=>0, 'type'=>'登录失败', 'date'=>'NOW()', 'ip'=>$clientip]);
unset($_SESSION['vc_code']);
$errcount++;
$retry_times = $login_limit_count - $errcount;
if($retry_times < 0) $retry_times = 0;
if($retry_times <= 0){
file_put_contents($login_limit_file, '1');
exit(json_encode(['code'=>-1,'msg'=>'多次登录失败,暂时禁止登录。可删除@login.lock文件解除限制','vcode'=>1]));
}else{
exit(json_encode(['code'=>-1,'msg'=>'用户名或密码错误,你还可以尝试'.$retry_times.'次','vcode'=>1]));
}
}
}elseif(isset($_GET['logout'])){
if(!checkRefererHost())exit();
setcookie("admin_token", "", time() - 2592000);
exit("<script language='javascript'>window.location.href='./login.php';</script>");
}elseif($islogin==1){
exit("<script language='javascript'>alert('您已登录!');window.location.href='./';</script>");
}
$title='用户登录';
include './head.php';
?>
<nav class="navbar navbar-fixed-top navbar-default">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">导航按钮</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="./">支付管理中心</a>
</div><!-- /.navbar-header -->
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li class="active">
<a href="./login.php"><span class="glyphicon glyphicon-user"></span> 登录</a>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav><!-- /.navbar -->
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-md-8 col-lg-6 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">管理员登录</h3></div>
<div class="panel-body">
<form class="form-horizontal" role="form" onsubmit="return submitlogin()">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
<input type="text" name="user" value="" class="form-control input-lg" placeholder="用户名" required="required"/>
</div><br/>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" name="pass" class="form-control input-lg" placeholder="密码" required="required"/>
</div><br/>
<?php if($verifycode==1){?>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-adjust"></span></span>
<input type="text" class="form-control input-lg" name="code" placeholder="输入验证码" autocomplete="off" required>
<span class="input-group-addon" style="padding: 0">
<img id="verifycode" src="./code.php?r=<?php echo time();?>"height="45"onclick="this.src='./code.php?r='+Math.random();" title="点击更换验证码">
</span>
</div><br/>
<?php }?>
<div class="form-group">
<div class="col-xs-12"><input type="submit" value="立即登录" class="btn btn-primary btn-block btn-lg"/></div>
</div>
</form>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function submitlogin(){
var user = $("input[name='user']").val();
var pass = $("input[name='pass']").val();
var code = $("input[name='code']").val();
if(user=='' || pass==''){layer.alert('用户名或密码不能为空!');return false;}
var ii = layer.load(2);
$.ajax({
type : 'POST',
url : '?act=login',
data: {username:user, password:pass, code:code},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.msg('登录成功,正在跳转', {icon: 1,shade: 0.01,time: 15000});
window.location.href='./';
}else{
if(data.vcode==1){
$("#verifycode").attr('src', './code.php?r='+Math.random())
}
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
</script>
</body>
</html>
+941
View File
@@ -0,0 +1,941 @@
<?php
/**
* 订单列表
**/
include("../includes/common.php");
$title='订单列表';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$type_select = '<option value="0">所有支付方式</option>';
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
foreach($rs as $row){
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
}
unset($rs);
?>
<style>
#orderItem .orderTitle{word-break:keep-all;}
#orderItem .orderContent{word-break:break-all;}
.dates{max-width: 120px;}
@media screen and (max-width: 767px) {
.table-responsive {
overflow-y: auto;
}
}
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
</style>
<link href="../assets/css/datepicker.css" rel="stylesheet">
<div class="container-fluid" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<input type="hidden" name="subchannel" value="">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="trade_no">订单号</option><option value="out_trade_no">商户订单号</option><option value="api_trade_no">接口订单号</option><option value="bill_trade_no">用户交易单号</option><option value="name">商品名称</option><option value="money">订单金额</option><option value="realmoney">实付金额</option><option value="getmoney">分成金额</option><option value="domain">网站域名</option><option value="buyer">支付账号</option><option value="ip">支付IP</option><option value="mobile">手机号码</option><option value="param">扩展参数</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容" value="">
</div>
<div class="form-group">
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
</div>
<div class="form-group">
<select name="type" class="form-control"><?php echo $type_select?></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="channel" style="width: 80px;" placeholder="通道ID" value="">
</div>
<div class="input-group input-daterange">
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">状态未支付</option><option value="1">状态已支付</option><option value="2">状态已退款</option><option value="3">状态已冻结</option><option value="4">状态预授权</option></select>
</div>
<button type="submit" class="btn btn-primary">&nbsp;搜索&nbsp;</button>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新订单列表"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="javascript:operation(0)" data-action-type="0">改未完成</a></li>
<li><a href="javascript:operation(1)" data-action-type="1">改已完成</a></li>
<li><a href="javascript:operation(5)" data-action-type="5">API退款</a></li>
<li><a href="javascript:operation(2)" data-action-type="2">冻结订单</a></li>
<li><a href="javascript:operation(3)" data-action-type="3">解冻订单</a></li>
<li><a href="javascript:operation(4)" data-action-type="4">删除订单</a></li>
</ul>
</div>
<button type="button" onclick="statistics()" class="btn btn-default">&nbsp;统计&nbsp;</button>
</form>
<table id="listTable">
</table>
</div>
</div>
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">订单统计概况</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<template id="statistics">
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
<li>订单总金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
<li>已支付金额:<span style="font-weight: 600;">¥ {successMoney}</span></li>
<li>未支付金额:<span style="font-weight: 600;">¥ {unpaidMoney}</span></li>
<li>已退款金额:<span style="font-weight: 600;">¥ {refundMoney}</span></li>
<li>总收入利润: <span style="font-weight: 600;">¥ {platformProfit}</li>
</ul>
<ul class="list-inline" style="padding-top:10px;margin-bottom: 0;">
<li>订单总数:<span style="font-weight: 600;">{totalCount}</span></li>
<li>已支付订单:<span style="font-weight: 600;">{successCount}</span></li>
<li>未支付订单:<span style="font-weight: 600;">{unpaidCount}</span></li>
<li>已退款订单:<span style="font-weight: 600;">{refundCount}</span></li>
<li>订单成功率:<span style="font-weight: 600;">{successRate}%</span></li>
</ul>
</template>
<a style="display: none;" href="" id="vurl" rel="noreferrer" target="_blank"></a>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_order.php?act=orderList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
uniqueId: 'trade_no',
columns: [
{
field: '',
checkbox: true
},
{
field: 'trade_no',
title: '系统订单号<br/>商户订单号',
formatter: function(value, row, index) {
return '<a href="javascript:showOrder(\''+value+'\')" title="点击查看详情">'+value+'</a></b><br/>'+row.out_trade_no;
}
},
{
field: 'uid',
title: '商户号<br/>网站域名',
formatter: function(value, row, index) {
return '<a href="./ulist.php?my=search&column=uid&value='+value+'" target="_blank">'+value+'</a><br/><a onclick="openlink(\'http://'+row.domain+'\')">'+row.domain+'</a>';
}
},
{
field: 'name',
title: '商品名称<br/>订单金额',
formatter: function(value, row, index) {
return value+'<br/>¥<b>'+row.money+'</b>';
}
},
{
field: 'realmoney',
title: '实际支付<br/>商户分成',
formatter: function(value, row, index) {
return value!=null?'¥<b>'+value+'</b><br/>¥<b>'+row.getmoney+'</b>':'';
}
},
{
field: 'type',
title: '支付方式(通道ID)<br/>支付插件',
formatter: function(value, row, index) {
return row.typename ? '<img src="/assets/icon/'+row.typename+'.ico" class="type-logo" onerror="this.style.display=\'none\'">'+row.typeshowname+'(<a href="./pay_channel.php?kw='+row.channel+'" target="_blank">'+row.channel+'</a>)<br/>'+row.plugin : '';
}
},
{
field: 'ip',
visible: false,
cellStyle: function(value, row, index) {
return {css:{"max-width":"150px","word-break":"break-all"}};
},
title: '支付IP<br/>支付账号',
formatter: function(value, row, index) {
return '<a href="https://m.ip138.com/iplookup.asp?ip='+value+'" target="_blank" rel="noreferrer">'+value+'</a>&nbsp;<a href="javascript:addBlackList(1,\''+row.ip+'\')" class="btn btn-xs btn-default"><i class="fa fa-stop-circle"></i></a><br/>'+(row.buyer?row.buyer+'&nbsp;<a href="javascript:addBlackList(0,\''+row.buyer+'\')" class="btn btn-xs btn-default"><i class="fa fa-stop-circle"></i></a>':'&nbsp;');
}
},
{
field: 'addtime',
title: '创建时间<br/>完成时间',
formatter: function(value, row, index) {
return value+'<br/>'+(row.endtime?row.endtime:'&nbsp;');
}
},
{
field: 'status',
title: '支付状态',
formatter: function(value, row, index) {
var text = '';
if(value == '1'){
text = '<font color=green>已支付</font>';
}else if(value == '2'){
text = '<font color=red>已退款</font>';
if(row.refundmoney > 0 && row.refundmoney < row.realmoney){
text += '<br/><font color=red>('+row.refundmoney+'元)</font>';
}
}else if(value == '3'){
text = '<font color=red>已冻结</font>';
}else if(value == '4'){
text = '<font color=orange>预授权</font>';
}else{
text = '<font color=blue>未支付</font>';
}
if(row.plugin=='alipayd' || row.plugin=='wxpaynp'){
if(row.settle == '1'){
text += '<br/><font color=#8c8f93>待结算</font>';
}else if(row.settle == '2'){
text += '<br/><font color=#37db3c>结算成功</font>';
}else if(row.settle == '3'){
text += '<br/><font color=#ed6565>结算失败</font>';
}
}else if(row.plugin=='alipayrp'){
if(row.settle == '1'){
text += '<br/><font color=#8c8f93>待转账</font>';
}else if(row.settle == '2'){
text += '<br/><font color=#37db3c>转账成功</font>';
}else if(row.settle == '3'){
text += '<br/><font color=#ed6565>转账失败</font>';
}
}
return text;
}
},
{
field: 'status',
title: '操作',
formatter: function(value, row, index) {
let html = '<div class="btn-group dropdown-group" role="group"><button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">操作订单 <span class="caret"></span></button><ul class="dropdown-menu">';
if((row.plugin=='alipayd' || row.plugin=='wxpaynp') && (row.settle=='1'||row.settle=='3')){
html += '<li><a href="javascript:alipaydSettle(\''+row.trade_no+'\')">确认结算</a></li>';
}
else if(row.plugin=='alipayrp' && (row.settle=='1'||row.settle=='3')){
html += '<li><a href="javascript:alipayRedPacketTansfer(\''+row.trade_no+'\')">红包转账重试</a></li>';
}
if(value == '1'){
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 0)">改未完成</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li><a href="javascript:refund(\''+row.trade_no+'\')">手动退款</a></li><li><a href="javascript:freeze(\''+row.trade_no+'\')">冻结订单</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
}else if(value == '2'){
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 0)">改未完成</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 1)">改已完成</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
}else if(value == '3'){
html+= '<li><a href="javascript:unfreeze(\''+row.trade_no+'\')">解冻订单</a></li><li><a href="javascript:apirefund(\''+row.trade_no+'\')">API退款</a></li><li role="separator" class="divider"></li><li><a href="javascript:callnotify(\''+row.trade_no+'\')">重新通知</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
}else{
if(value == '4'){
html += '<li><a href="javascript:alipayPreAuthPay(\''+row.trade_no+'\')">授权资金支付</a></li>';
html += '<li><a href="javascript:alipayUnfreeze(\''+row.trade_no+'\')">授权资金解冻</a></li><li role="separator" class="divider"></li>';
}
html+= '<li><a href="javascript:setStatus(\''+row.trade_no+'\', 1)">改已完成</a></li><li role="separator" class="divider"></li><li><a href="javascript:fillorder(\''+row.trade_no+'\')">手动补单</a></li><li><a href="javascript:setStatus(\''+row.trade_no+'\', 5)">删除订单</a></li>';
}
html += '</ul></div>';
return html;
}
},
],
onLoadSuccess: function(data) {
$('.dropdown-group').on('show.bs.dropdown', function (e) {
var btnPos = $(e.target)[0].getBoundingClientRect();
var screenWidth = $(window).width();
var screenHeight = $(window).height();
var childrenWidth = $(e.target).children('.dropdown-menu').width();
var childrenHeight = $(e.target).children('.dropdown-menu').height();
var top = btnPos.bottom;
if(top + childrenHeight + 12 > screenHeight){
top = btnPos.top - childrenHeight - 12;
}
var left = btnPos.left;
if(left + childrenWidth + 7 > screenWidth){
left = screenWidth - childrenWidth - 7;
}
$(e.target).children('.dropdown-menu').css({position:'fixed', top:top, left:left});
});
}
})
})
function openlink(full_link){
window.open('javascript:window.name;', '<script>location.replace("'+full_link+'")<\/script>');
}
function statistics(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=statistics',
data: $('#searchToolbar').serializeArray(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var element = $('#modal-statistics');
var htmlContent = $("#statistics").html().replace(/\{(\w+)\}/g, function (match, key) {
return data.data[key] || '';
});
element.find('.modal-body').html(htmlContent);
element.modal('show');
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function operation(status){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择订单', {time:1500});return;
}
var checkbox = getBatchOperateData(selected, 'trade_no')[status];
if(checkbox.length == 0){
layer.msg('要处理的订单数量为0', {time:1500});return;
}
if(status == 4 && !confirm('确定要删除已选中的'+checkbox.length+'个订单吗?')) return;
if(status == 5){
return batch_apirefund(checkbox);
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=operation',
data : {status:status, checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
function showOrder(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
var status = ['<span class="label label-primary">未支付</span>','<span class="label label-success">已支付</span>','<span class="label label-danger">已退款</span>','<span class="label label-info">已冻结</span>','<span class="label label-warning">预授权</span>'];
$.ajax({
type : 'GET',
url : 'ajax_order.php?act=order&trade_no='+trade_no,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var data = data.data;
var item = '<table class="table table-condensed table-hover" id="orderItem">';
item += '<tr><td colspan="6" style="text-align:center" class="orderTitle"><b>订单信息</b></td></tr>';
item += '<tr class="orderTitle"><td class="info" class="orderTitle">系统订单号</td><td colspan="5" class="orderContent">'+data.trade_no+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">商户订单号</td><td colspan="5" class="orderContent">'+data.out_trade_no+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">接口订单号</td><td colspan="5" class="orderContent">'+data.api_trade_no+'</td></tr>';
if(data.bill_trade_no){
item += '<tr><td class="info" class="orderTitle">用户交易单号</td><td colspan="5" class="orderContent">'+data.bill_trade_no+'</td></tr>';
}
item += '<tr><td class="info">商户ID</td class="orderTitle"><td colspan="5" class="orderContent"><a href="./ulist.php?my=search&column=uid&value='+data.uid+'" target="_blank">'+data.uid+'</a></td>';
item += '<tr><td class="info" class="orderTitle">支付方式</td><td colspan="5" class="orderContent">'+data.typename+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">支付通道</td><td colspan="5" class="orderContent"><a href="./pay_channel.php?id='+data.channel+'" target="_blank">'+data.channelname+'</a></td></tr>';
if(data.subchannel > 0){
item += '<tr><td class="info" class="orderTitle">自定义子通道</td><td colspan="5" class="orderContent">'+data.subchannelname+'</td></tr>';
}
item += '<tr><td class="info" class="orderTitle">商品名称</td><td colspan="5" class="orderContent">'+data.name+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">订单金额</td><td colspan="5" class="orderContent">'+data.money+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">实际支付金额</td><td colspan="5" class="orderContent">'+data.realmoney+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">商户分成金额</td><td colspan="5" class="orderContent">'+data.getmoney+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">手续费利润</td><td colspan="5" class="orderContent">'+data.profitmoney+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">创建时间</td><td colspan="5" class="orderContent">'+data.addtime+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">完成时间</td><td colspan="5" class="orderContent">'+data.endtime+'</td></tr>';
if(data.status==2){
item += '<tr><td class="info" class="orderTitle">退款时间</td><td colspan="5" class="orderContent">'+data.refundtime+'</td></tr>';
}
item += '<tr><td class="info" class="orderTitle" title="只有在官方通道支付完成后才能显示">支付账号</td><td colspan="5" class="orderContent">'+data.buyer+(data.buyer!=null?'&nbsp;&nbsp;<a href="javascript:addBlackList(0,\''+data.buyer+'\')" class="btn btn-xs btn-default">拉黑</a>':'')+'</td></tr>';
if(data.mobile){
item += '<tr><td class="info" class="orderTitle">手机号码</td><td colspan="5" class="orderContent">'+data.mobile+'&nbsp;&nbsp;<a href="javascript:addBlackList(0,\''+data.mobile+'\')" class="btn btn-xs btn-default">拉黑</a></td></tr>';
}
item += '<tr><td class="info" class="orderTitle">网站域名</td><td colspan="5" class="orderContent"><a href="http://'+data.domain+'" target="_blank" rel="noreferrer">'+data.domain+'</a></td></tr>';
item += '<tr><td class="info" class="orderTitle">支付IP</td><td colspan="5" class="orderContent"><a href="https://m.ip138.com/iplookup.asp?ip='+data.ip+'" target="_blank" rel="noreferrer">'+data.ip+'</a>&nbsp;&nbsp;<a href="javascript:addBlackList(1,\''+data.ip+'\')" class="btn btn-xs btn-default">拉黑</a></td></tr>';
item += '<tr><td class="info" class="orderTitle">扩展参数</td><td colspan="5" class="orderContent">'+data.param+'</td></tr>';
item += '<tr><td class="info" class="orderTitle">订单状态</td><td colspan="5" class="orderContent">'+status[data.status]+'</td></tr>';
if(data.status>0){
item += '<tr><td class="info" class="orderTitle">通知状态</td><td colspan="5" class="orderContent">'+(data.notify==0?'<span class="label label-success">通知成功</span>':'<span class="label label-danger">通知失败</span>(已通知'+data.notify+'次)')+'</td></tr>';
}
item += '<tr><td colspan="6" style="text-align:center" class="orderTitle"><b>订单操作</b></td></tr>';
item += '<tr><td colspan="6"><a href="javascript:callnotify(\''+data.trade_no+'\')" class="btn btn-xs btn-default">重新通知(异步)</a>&nbsp;<a href="javascript:callreturn(\''+data.trade_no+'\')" class="btn btn-xs btn-default">重新通知(同步)</a>'+(data.combine==1?'&nbsp;<a href="javascript:showSubOrders(\''+data.trade_no+'\')" class="btn btn-xs btn-default">查看子订单列表</a>':'')+'</td></tr>';
item += '</table>';
var area = [$(window).width() > 480 ? '480px' : '100%', ';max-height:100%'];
layer.open({
type: 1,
area: area,
title: '订单详细信息',
skin: 'layui-layer-rim',
content: item
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function callnotify(trade_no){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=notify',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#vurl").attr("href",data.url);
document.getElementById("vurl").click();
searchSubmit();
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
}
});
return false;
}
function callreturn(trade_no){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=notify',
data : {trade_no:trade_no,isreturn:1},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#vurl").attr("href",data.url);
document.getElementById("vurl").click();
searchSubmit();
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
}
});
return false;
}
function refund(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=getmoney',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.open({
area: ['360px'],
title: '手动退款确认',
content: '<p>此操作将从该商户扣除订单分成金额,你需要手动退款给购买者。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">退款金额</div><input type="text" class="form-control" name="refund1" value="'+data.money+'" placeholder="请输入退款金额" autocomplete="off"/></div></div>',
yes: function(){
var money = $("input[name='refund1']").val();
if(money == ''){
layer.alert('金额不能为空');return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=refund',
data : {trade_no:trade_no, money:money},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}else{
layer.alert(data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function apirefund(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=getmoney',
data : {trade_no:trade_no,api:"1"},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.open({
area: ['360px'],
title: 'API退款确认',
content: '<p>此操作将直接原路退款该订单,退款金额不能大于订单金额。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">退款金额</div><input type="text" class="form-control" name="refund2" value="'+data.money+'" placeholder="请输入退款金额" autocomplete="off"/></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">支付密码</div><input type="text" class="form-control" name="paypwd" value="" placeholder="请输入支付密码" autocomplete="off"/></div></div>',
yes: function(){
var money = $("input[name='refund2']").val();
var paypwd = $("input[name='paypwd']").val();
if(money == '' || paypwd == ''){
layer.alert('金额或密码不能为空');return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=apirefund',
data : {trade_no:trade_no, money:money, paypwd:paypwd},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}else{
layer.alert(data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function batch_apirefund(orderids){
layer.open({
area: ['360px'],
title: 'API退款确认',
content: '<p>此操作将直接原路退款这'+orderids.length+'条订单,退款金额均为订单实际支付金额。</p><div class="form-group"><div class="input-group"><div class="input-group-addon">支付密码</div><input type="text" class="form-control" name="paypwd" value="" placeholder="请输入支付密码" autocomplete="off"/></div></div>',
yes: function(){
var paypwd = $("input[name='paypwd']").val();
if(paypwd == ''){
layer.alert('密码不能为空');return;
}
batch_apirefund_order(orderids, 0, paypwd);
}
});
}
function batch_apirefund_order(orderids, index, paypwd){
if (index >= orderids.length) {
layer.alert('已成功退款'+orderids.length+'条订单!', {icon: 1}, function(){
layer.closeAll();searchSubmit();
});
return;
}
var trade_no = orderids[index];
var row = $("#listTable").bootstrapTable('getRowByUniqueId', trade_no);
var money = row.realmoney;
var ii = layer.msg('正在退款' + trade_no + ''+money+'元)', {icon: 16, shade: 0.3, time: 0});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=apirefund',
data : {trade_no:trade_no, money:money, paypwd:paypwd},
dataType : 'json',
success : function(data) {
layer.close(ii);
index > 0 && searchSubmit();
if(data.code == 0){
batch_apirefund_order(orderids, index + 1, paypwd);
}else{
layer.alert(trade_no + data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function freeze(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=freeze',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function unfreeze(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=unfreeze',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function setStatus(trade_no, status) {
if(status==5){
var confirmobj = layer.confirm('你确实要删除此订单吗?', {
btn: ['确定','取消']
}, function(){
setStatusDo(trade_no, status);
});
}else{
setStatusDo(trade_no, status);
}
}
function setStatusDo(trade_no, status) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'get',
url : 'ajax_order.php',
data : 'act=setStatus&trade_no=' + trade_no + '&status=' + status,
dataType : 'json',
success : function(ret) {
layer.close(ii);
if (ret['code'] != 200) {
alert(ret['msg'] ? ret['msg'] : '操作失败');
}
layer.closeAll();
searchSubmit();
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function fillorder(trade_no) {
var confirmobj = layer.confirm('此操作将不管该订单是否真的支付,直接改为已支付状态并给商户分成,是否确定?', {
btn: ['确定','取消'], icon:0
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=fillorder',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function alipaydSettle(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=alipaydSettle',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function alipayPreAuthPay(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=alipayPreAuthPay',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function alipayUnfreeze(trade_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=alipayUnfreeze',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function addBlackList(stype, scontent){
var stitle = stype == 1?'IP地址':'支付账号';
layer.open({
type: 1,
area: ['380px'],
closeBtn: 2,
title: '添加黑名单',
content: '<div style="padding:15px"><div class="form-group"><div class="input-group"><div class="input-group-addon">'+stitle+'</div><input class="form-control" type="text" name="add_content" value="'+scontent+'" autocomplete="off" ></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><input class="form-control" type="text" name="add_days" value="0" autocomplete="off" placeholder="0为永久"><div class="input-group-addon">天</div></div></div><div class="form-group"><div class="input-group"><div class="input-group-addon">备注</div><input class="form-control" type="text" name="add_remark" value="" autocomplete="off" placeholder="选填"></div></div></div>',
btn: ['确认', '取消'],
yes: function(){
var content = $("input[name='add_content']").val();
var days = $("input[name='add_days']").val();
var remark = $("input[name='add_remark']").val();
if(content == ''){
$("input[name='content']").focus();return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=addBlack',
data : {type:stype, content:content, days:days, remark:remark},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll(); });
}else{
layer.alert(data.msg, {icon:0});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
});
}
function alipayRedPacketTansfer(trade_no){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_order.php?act=alipayRedPacketTansfer',
data : {trade_no:trade_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function showSubOrders(trade_no){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_order.php?act=subOrders&trade_no='+trade_no,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var list = data.data;
var status = ['<span class="label label-primary">未支付</span>','<span class="label label-success">已支付</span>','<span class="label label-danger">已退款</span>'];
var settle = ['<span class="label label-info">未结算</span>','<span class="label label-success">已结算</span>'];
var item = '<table class="table table-condensed table-hover" id="orderItem">';
item += '<thead><th class="orderTitle">系统订单号</th><th class="orderTitle">接口订单号</th><th class="orderTitle">订单金额</th class="orderTitle"><th class="orderTitle">订单状态</th><th class="orderTitle">结算状态</th></thead><tbody>';
for(var i=0; i<list.length; i++){
var statustext = status[list[i].status];
if(list[i].status == 2 && list[i].refundmoney > 0 && list[i].refundmoney < list[i].money){
statustext += '<font color=red>('+list[i].refundmoney+')</font>';
}
item += '<tr><td>'+list[i].sub_trade_no+'</td><td>'+list[i].api_trade_no+'</td><td>¥<b>'+list[i].money+'</b></td><td>'+statustext+'</td><td>'+(data.settle>0?settle[list[i].settle]:'')+'</td></tr>';
}
item += '</tbody></table>';
var area = [$(window).width() > 680 ? '680px' : '100%'];
layer.open({
type: 1,
area: area,
title: '合单支付 - 子订单列表',
skin: 'layui-layer-rim',
shadeClose: true,
content: item
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function getBatchOperateData(selections, field) {
var counts = {
0: field ? [] : 0, // 改未完成
1: field ? [] : 0, // 改已完成
2: field ? [] : 0, // 冻结订单
3: field ? [] : 0, // 解冻订单
4: field ? [] : 0, // 删除订单
5: field ? [] : 0 // API退款
};
selections.forEach(function(row) {
var status = parseInt(row.status);
if (status == 1) {
if (field) {
counts[0].push(row[field]);
counts[2].push(row[field]);
counts[4].push(row[field]);
counts[5].push(row[field]);
} else {
counts[0]++;
counts[2]++;
counts[4]++;
counts[5]++;
}
} else if (status == 2) {
if (field) {
counts[0].push(row[field]);
counts[1].push(row[field]);
counts[4].push(row[field]);
} else {
counts[0]++;
counts[1]++;
counts[4]++;
}
} else if (status == 3) {
if (field) {
counts[3].push(row[field]);
counts[4].push(row[field]);
counts[5].push(row[field]);
} else {
counts[3]++;
counts[4]++;
counts[5]++;
}
} else {
if (field) {
counts[1].push(row[field]);
counts[4].push(row[field]);
} else {
counts[1]++;
counts[4]++;
}
}
});
return counts;
}
$(document).ready(function(){
$('.input-datepicker, .input-daterange').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
clearBtn: true,
language: 'zh-CN'
});
$("#batchAction").click(function(e) {
e.preventDefault();
var selections = $('#listTable').bootstrapTable('getSelections'),
button = $(this);
var counts = getBatchOperateData(selections);
button.next('.dropdown-menu').find('a[data-action-type]').each(function() {
var actionType = $(this).data('action-type');
var count = counts[actionType];
var originalText = $(this).text().split('(')[0];
$(this).text(originalText + (count > 0 ? ' (可执行' + count + '条)' : ' (0)'));
});
});
})
</script>
+599
View File
@@ -0,0 +1,599 @@
<?php
/**
* 支付通道
**/
include("../includes/common.php");
$title='支付通道';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$type_select = '<option value="0">所有支付方式</option>';
$type_select2 = '';
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
foreach($rs as $row){
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
$type_select2 .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
}
unset($rs);
?>
<style>
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
</style>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">支付通道修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他通道名称重复">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">分成比例</label>
<div class="col-sm-10">
<div class="input-group"><input type="text" class="form-control" name="rate" id="rate" placeholder="在没配置用户组的情况下以此费率为准" title="是指给商户的分成比例"><span class="input-group-addon">%</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">通道成本</label>
<div class="col-sm-10">
<div class="input-group"><input type="text" class="form-control" name="costrate" id="costrate" placeholder="仅用于统计利润,可留空,默认为0"><span class="input-group-addon">%</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">通道模式</label>
<div class="col-sm-10">
<div class="input-group"><select name="mode" id="mode" class="form-control" onchange="changeMode()">
<option value="0">支付金额扣除手续费后加入商户余额(默认)</option><option value="1">支付完成后不给商户加余额,同时需扣手续费</option>
</select><a tabindex="0" class="input-group-addon" role="button" data-toggle="popover" data-trigger="focus" title="通道模式说明" data-placement="bottom" data-content="【第一种模式】资金由平台代收,然后结算给商户,手续费从每笔订单直接扣除 【第二种模式】资金由上游直接结算给商户,手续费从商户余额扣除,商户需先充值余额否则无法支付"><span class="glyphicon glyphicon-info-sign"></span></a></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">支付方式</label>
<div class="col-sm-10">
<select name="type" id="type" class="form-control" onchange="changeType()">
<option value="0">请选择支付方式</option><?php echo $type_select2; ?>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">支付插件</label>
<div class="col-sm-10">
<select name="plugin" id="plugin" class="form-control">
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">单日限额</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="daytop" id="daytop" placeholder="0或留空为没有单日限额,超出限额会暂停使用该通道" title="修改后第二天生效">
</div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label no-padding-right">单笔最小</label>
<div class="col-sm-8">
<input type="text" class="form-control" name="paymin" id="paymin" placeholder="留空无单笔最小限额">
</div>
</div>
</div><div class="col-sm-6">
<div class="form-group">
<label class="col-sm-4 control-label no-padding-right">单笔最大</label>
<div class="col-sm-8">
<input type="text" class="form-control" name="paymax" id="paymax" placeholder="留空无单笔最大限额">
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="container" style="padding-top:70px;">
<div class="row">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<input type="hidden" class="form-control" name="id">
<input type="hidden" class="form-control" name="batch">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="kw" placeholder="通道ID/名称">
</div>
<div class="form-group">
<input type="text" class="form-control" name="plugin" style="width: 100px;" placeholder="支付插件" value="">
</div>
<div class="form-group">
<select name="type" class="form-control"><?php echo $type_select?></select>
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="1">状态已开启</option><option value="0">状态已关闭</option></select>
</div>
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i> 搜索</button>
<a href="javascript:searchClear()" class="btn btn-default"><i class="fa fa-refresh"></i> 重置</a>
<a href="javascript:addframe()" class="btn btn-success"><i class="fa fa-plus"></i> 新增</a>
</form>
<table id="listTable">
</table>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
$("#listTable").bootstrapTable({
url: 'ajax_pay.php?act=channelList',
pageNumber: 1,
pageSize: 15,
sidePagination: 'client',
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: 'id',
title: 'ID',
formatter: function(value, row, index) {
return '<b>'+value+'</b>';
}
},
{
field: 'name',
title: '显示名称'
},
{
field: 'mode',
title: '通道模式',
formatter: function(value, row, index) {
if(value == '1'){
return '商户直清'
}else{
return '平台代收'
}
}
},
{
field: 'rate',
title: '分成比例'
},
{
field: 'type',
title: '支付方式',
formatter: function(value, row, index) {
return '<img src="/assets/icon/'+row.typename+'.ico" class="type-logo" onerror="this.style.display=\'none\'">'+row.typeshowname;
}
},
{
field: 'plugin',
title: '支付插件',
formatter: function(value, row, index) {
return '<span onclick="showPlugin(\''+value+'\')" title="查看支付插件详情">'+value+'</span>';
}
},
{
field: '',
title: '今日收款',
formatter: function(value, row, index) {
return '<a onclick="getAll(0,'+row.id+',this)" title="点此获取最新数据">[刷新]</a>';
}
},
{
field: '',
title: '昨日收款',
formatter: function(value, row, index) {
return '<a onclick="getAll(1,'+row.id+',this)" title="点此获取最新数据">[刷新]</a>';
}
},
{
field: '',
title: '订单成功率',
visible: false,
formatter: function(value, row, index) {
return '<a onclick="getSuccessRate(' + row.id +',this)" title="点此获取最新数据">[刷新]</a>';
}
},
{
field: 'status',
title: '状态',
formatter: function(value, row, index) {
if(value == '1'){
return '<a class="btn btn-xs btn-success" onclick="setStatus('+row.id+',0)">已开启</a>';
}else{
return '<a class="btn btn-xs btn-warning" onclick="setStatus('+row.id+',1)">已关闭</a>';
}
}
},
{
field: '',
title: '操作',
formatter: function(value, row, index) {
return '<a class="btn btn-xs btn-primary" onclick="editInfo('+row.id+')">配置密钥</a>&nbsp;<a class="btn btn-xs btn-info" onclick="editframe('+row.id+')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('+row.id+')">删除</a>&nbsp;<a href="./order.php?channel='+row.id+'" target="_blank" class="btn btn-xs btn-default">订单</a>&nbsp;<a onclick="copyframe('+row.id+')" class="btn btn-xs btn-default"><i class="fa fa-copy"></i></a>&nbsp;<a onclick="testpay('+row.id+')" class="btn btn-xs btn-default">测试</a>';
}
},
],
})
})
function changeType(plugin){
plugin = plugin || null;
if(plugin == null){
plugin = $("#plugin").val();
}
var typeid = $("#type").val();
if(typeid==0)return;
$("#plugin").empty();
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getPlugins&typeid='+typeid,
dataType : 'json',
success : function(data) {
if(data.code == 0){
$.each(data.data, function (i, res) {
$("#plugin").append('<option value="'+res.name+'">'+res.showname+'</option>');
})
if(plugin!=null)$("#plugin").val(plugin);
}else{
layer.msg(data.msg, {icon:2, time:1500})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function changeMode(){
var mode = parseInt($("#mode").val());
if(mode>0){
$("#daytop").val('');
$("#daytop").prop("disabled", true);
}else{
$("#daytop").prop("disabled", false);
}
}
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增支付通道");
$("#action").val("add");
$("#id").val('');
$("#name").val('');
$("#rate").val('');
$("#costrate").val('');
$("#type").val(0);
$("#daytop").val('');
$("#paymin").val('');
$("#paymax").val('');
$("#plugin").empty();
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getChannel&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改支付通道");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#rate").val(data.data.rate);
$("#costrate").val(data.data.costrate);
$("#type").val(data.data.type);
$("#daytop").val(data.data.daytop);
$("#paymin").val(data.data.paymin);
$("#paymax").val(data.data.paymax);
$("#mode").val(data.data.mode);
changeType(data.data.plugin);
changeMode()
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function copyframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getChannel&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("快速复制支付通道");
$("#action").val("copy");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#rate").val(data.data.rate);
$("#costrate").val(data.data.costrate);
$("#type").val(data.data.type);
$("#daytop").val(data.data.daytop);
$("#paymin").val(data.data.paymin);
$("#paymax").val(data.data.paymax);
$("#mode").val(data.data.mode);
changeType(data.data.plugin);
changeMode()
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function save(){
if($("#name").val()==''||$("#rate").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
if($("#type").val()==0){
layer.alert('请选择支付方式!');return false;
}
if($("#plugin").val()==0 || $("#plugin").val()==null){
layer.alert('请选择支付插件!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveChannel',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
layer.closeAll();
$("#modal-store").modal('hide');
searchSubmit();
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此支付通道吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=delChannel&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.closeAll();
searchSubmit();
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=setChannel&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
searchSubmit();
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function editInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=channelInfo&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var area = [$(window).width() > 520 ? '520px' : '100%', ';max-height:100%'];
layer.open({
type: 1,
area: area,
title: '配置对接密钥',
skin: 'layui-layer-rim',
content: data.data
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function saveInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveChannelInfo&id='+id,
data : $("#form-info").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
layer.closeAll();
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function showPlugin(name){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getPlugin&name='+name,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var item = '<table class="table table-condensed table-hover">';
item += '<tr><td class="info">插件名称</td><td colspan="5">'+data.data.name+'</td></tr><tr><td class="info">插件描述</td><td colspan="5">'+data.data.showname+'</td></tr><tr><td class="info">插件网址</td><td colspan="5">'+(data.data.link?'<a href="'+data.data.link+'" target="_blank" rel="noreferrer">'+data.data.author+'</a>':data.data.author)+'</td></tr><tr><td class="info">插件路径</td><td colspan="5">/plugins/'+data.data.name+'/</td></tr>';
item += '</table>';
layer.open({
type: 1,
shadeClose: true,
title: '支付插件详情',
content: item
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function getAll(type, channel, obj){
var ii = layer.load();
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getChannelMoney&type='+type+'&channel='+channel,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$(obj).html(data.money);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function getSuccessRate(channel, obj) {
var ii = layer.load();
$.ajax({
type: 'GET',
url: 'ajax_pay.php?act=getSuccessRate&channel=' + channel,
dataType: 'json',
success: function(data) {
layer.close(ii);
if (data.code == 0) {
$(obj).html(data.data);
} else {
layer.alert(data.msg, {icon: 2})
}
},
error: function(data) {
layer.msg('服务器错误');
return false;
}
});
}
function testpay(id) {
var ii = layer.open({
area: ['360px'],
title: '测试支付',
content: '<div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-shopping-cart"></span></span><input class="form-control" placeholder="订单名称" value="支付测试" name="test_name" type="text"></div></div><div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-yen"></span></span><input class="form-control" placeholder="订单金额" value="1" name="test_money" type="text"></div></div>',
yes: function(){
var name = $("input[name='test_name']").val();
var money = $("input[name='test_money']").val();
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=testpay',
data : {channel:id, name:name, money:money},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.close(ii);
window.open(data.url);
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
});
}
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
+42
View File
@@ -0,0 +1,42 @@
<?php
/**
* 支付插件
**/
include("../includes/common.php");
$title='支付插件';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-sm-12 col-md-10 col-lg-9 center-block" style="float: none;">
<?php
$my=isset($_GET['my'])?$_GET['my']:null;
if($my=='refresh') {
\lib\Plugin::updateAll();
exit("<script language='javascript'>alert('刷新插件列表成功!');history.go(-1);</script>");
}else{
$list = \lib\Plugin::getAll();
?>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个支付插件&nbsp;<span class="pull-right"><a href="./pay_plugin.php?my=refresh" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i> 刷新插件列表</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>插件名称</th><th>插件描述</th><th>插件作者</th><th>包含的支付方式</th><th>包含的转账方式</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
echo '<tr><td><b>'.$res['name'].'</b></td><td>'.$res['showname'].'</td><td>'.($res['link']?'<a href="'.$res['link'].'" target="_blank" rel="noreferrer">'.$res['author'].'
</a>':$res['author']).'</td><td>'.$res['types'].'</td><td>'.$res['transtypes'].'</td></tr>';
}
?>
</tbody>
</table>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 支付插件目录:/plugins/,请将符合要求的支付插件源码解压到支付插件目录,然后点击 刷新插件列表 即可显示在该列表中。
</div>
</div>
<?php }?>
</div>
</div>
+309
View File
@@ -0,0 +1,309 @@
<?php
/**
* 支付通道轮询设置
**/
include("../includes/common.php");
$title='支付通道轮询设置';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
.form-inline .form-control{display: inline-block;width: auto;vertical-align: middle;}</style>
<div class="container" style="padding-top:70px;">
<div class="col-md-10 center-block" style="float: none;">
<?php
$paytype = [];
$type_select = '';
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
}
unset($rs);
$rolltype = ['顺序轮询','随机轮询','首个启用'];
$list = $DB->getAll("SELECT * FROM pre_roll ORDER BY id ASC");
?>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">轮询组修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他轮询组名称重复">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">支付方式</label>
<div class="col-sm-10">
<select name="type" id="type" class="form-control">
<option value="0">请选择支付方式</option><?php echo $type_select; ?>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">轮询方式</label>
<div class="col-sm-10">
<select name="kind" id="kind" class="form-control">
<option value="0">按顺序依次轮询</option><option value="1">按权重随机轮询</option><option value="2">仅使用第一个已启用的</option>
</select>
</div>
</div>
<div class="form-group hide">
<label class="col-sm-2 control-label">支付通道</label>
<div class="col-sm-10">
<select id="channel" class="form-control">
</select>
</div>
</div>
<!--div class="form-group">
<label class="col-sm-2 control-label">通道配置</label>
<div class="col-sm-10">
<dl class="fieldlist" data-name="list" data-listidx="0">
<dd class="form-inline">
<select name="list[][channel]" class="form-control">
</select>
<input type="text" name="list[][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)">
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
</dd>
<dd>
<a href="javascript:;" class="btn btn-sm btn-success pay-append"><i class="fa fa-plus"></i> 追加</a>
</dd>
</dl>
</div>
</div-->
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 按顺序依次轮询不支持设置权重,按权重随机轮询支持设置每个通道的权重
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个轮询组&nbsp;<span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>显示名称</th><th>支付方式</th><th>轮询方式</th><th>轮询规则</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['name'].'</td><td>'.$paytype[$res['type']].'</td><td>'.$rolltype[$res['kind']].'</td><td>'.$res['info'].'</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-primary" onclick="editInfo('.$res['id'].')">配置通道</a>&nbsp;<a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增轮询组");
$("#action").val("add");
$("#id").val('');
$("#name").val('');
$("#type").val(0);
$("#kind").val(0);
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getRoll&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改轮询组");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#type").val(data.data.type);
$("#kind").val(data.data.kind);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function save(){
if($("#name").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
if($("#type").val()==0){
layer.alert('请选择支付方式!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveRoll',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此轮询组吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=delRoll&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=setRoll&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function editInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$("#channel").empty();
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=rollInfo&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$.each(data.channels, function (i, res) {
$("#channel").append('<option value="'+res.id+'">'+res.name+'</option>');
})
var item = '<div class="modal-body"><form class="form" id="form-info"><dl class="fieldlist" data-name="list" data-listidx="0">';
item += '</dl><button type="button" id="save" onclick="saveInfo('+id+')" class="btn btn-primary btn-block">保存</button><br/>备注:顺序轮询设置权重值无效</form></div>';
var area = [$(window).width() > 520 ? '520px' : '100%', '480px'];
layer.open({
type: 1,
area: area,
title: '配置轮询组',
skin: 'layui-layer-rim',
content: item,
success: function(){
if(data.info == null){
$(".fieldlist").append('<dd class="form-inline"><select name="list[0][channel]" class="form-control">'+$("#channel").html()+'</select> <input type="text" name="list[0][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger" disabled><i class="fa fa-times"></i></span> </dd>');
}else{
$.each(data.info, function (i, res) {
var num = parseInt(Math.random()*(99999-10+1)+10,10);
$(".fieldlist").append('<dd class="form-inline"><select name="list['+num+'][channel]" class="form-control" default="'+res.channel+'">'+$("#channel").html()+'</select> <input type="text" name="list['+num+'][weight]" class="form-control" value="'+res.weight+'" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> </dd>');
$("select[name='list["+num+"][channel]']").val(res.channel);
})
}
$(".fieldlist").append('<dd><a href="javascript:;" class="btn btn-sm btn-success pay-append"><i class="fa fa-plus"></i> 追加</a></dd>');
}
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function saveInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveRollInfo&id='+id,
data : $("#form-info").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
$(document).on("click", ".pay-append", function (e) {
var select = $("#channel").html();
var num = parseInt(Math.random()*(99999-10+1)+10,10);
var html = '<dd class="form-inline"><select name="list['+num+'][channel]" class="form-control">'+select+'</select> <input type="text" name="list['+num+'][weight]" class="form-control" value="" size="10" placeholder="权重(1-99)"> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> </dd>';
$(this).parent().parent().find('dd[class="form-inline"]:last').append(html);
});
$(document).on("click", "dd .btn-remove", function () {
var container = $(this).closest("dl");
$(this).closest("dd").remove();
});
</script>
+230
View File
@@ -0,0 +1,230 @@
<?php
/**
* 支付方式
**/
include("../includes/common.php");
$title='支付方式';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
.type-logo{width: 18px;margin-top: -2px;padding-right: 4px;}
</style>
<div class="container" style="padding-top:70px;">
<div class="col-md-8 center-block" style="float: none;">
<?php
function display_device($device){
if($device==1)
return 'PC';
elseif($device==2)
return 'Mobile';
else
return 'PC+Mobile';
}
$list = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
?>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">支付方式修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right"></label>
<div class="col-sm-10">
<div class="alert alert-warning">
注意:同一个调用值+支持设备不能重复
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">调用值</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅限英文,要与支付文档一致">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">显示名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="showname" id="showname" placeholder="仅显示使用">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">支持设备</label>
<div class="col-sm-10">
<select name="device" id="device" class="form-control">
<option value="0">PC+Mobile</option>
<option value="1">PC</option>
<option value="2">Mobile</option>
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个支付方式&nbsp;<span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>调用值</th><th>名称</th><th>支持设备</th><th>今日收款</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
echo '<tr><td><b>'.$res['name'].'</b></td><td><img src="/assets/icon/'.$res['name'].'.ico" class="type-logo" onerror="this.style.display=\'none\'">'.$res['showname'].'</td><td>'.display_device($res['device']).'</td><td><a onclick="getAll(0,'.$res['id'].',this)" title="点此获取最新数据">[刷新]</a></td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a>&nbsp;<a href="./order.php?type='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增支付方式");
$("#action").val("add");
$("#id").val('');
$("#name").val('');
$("#showname").val('');
$("#device").val(0);
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getPayType&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改支付方式");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#showname").val(data.data.showname);
$("#device").val(data.data.device);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function save(){
if($("#name").val()==''||$("#showname").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=savePayType',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delItem(id) {
if(id<4){
layer.msg('系统自带支付方式暂不支持删除');
return false;
}
var confirmobj = layer.confirm('你确实要删除此支付方式吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=delPayType&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=setPayType&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function getAll(type, typeid, obj){
var ii = layer.load();
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getTypeMoney&type='+type+'&typeid='+typeid,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$(obj).html(data.money);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
</script>
+220
View File
@@ -0,0 +1,220 @@
<?php
/**
* 公众号小程序
**/
include("../includes/common.php");
$title='公众号小程序';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-8 center-block" style="float: none;">
<?php
function display_type($type){
if($type==1)
return '微信小程序';
else
return '微信服务号';
}
$list = $DB->getAll("SELECT * FROM pre_weixin ORDER BY id ASC");
?>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">公众号小程序修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-2 control-label">类别</label>
<div class="col-sm-10">
<select name="type" id="type" class="form-control" onchange="shownote()">
<option value="0">微信服务号</option>
<option value="1">微信小程序</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅用于显示,不要重复">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">APPID</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="appid" id="appid" placeholder="">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">APPSECRET</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="appsecret" id="appsecret" placeholder="">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right text-muted">说明</label>
<div class="col-sm-10">
<span class="text-muted" id="type0" style="display:none">需要在【微信公众平台->公众号设置->功能设置】设置<font color="red">网页授权域名</font>,如果用于支付,还需要在微信支付【商户平台->产品中心->开发配置】设置<font color="red">JSAPI支付授权目录</font></span>
<span class="text-muted" id="type1" style="display:none">需要在【小程序后台->开发->开发设置->服务器域名】设置<font color="red">request合法域名</font>,如果用于支付,还需要在微信支付后台绑定此小程序</span>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">系统共有 <b><?php echo count($list);?></b> 个公众号/小程序&nbsp;<span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>类别</th><th>名称</th><th>APPID</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.display_type($res['type']).'</td><td>'.$res['name'].'</td><td>'.$res['appid'].'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a>&nbsp;<a onclick="testweixin('.$res['id'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function shownote(){
var type = $("#type").val();
if(type == 1){
$("#type0").hide();
$("#type1").show();
}else{
$("#type0").show();
$("#type1").hide();
}
}
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增公众号/小程序");
$("#action").val("add");
$("#id").val('');
$("#type").val(0);
$("#name").val('');
$("#appid").val('');
$("#appsecret").val('');
shownote()
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getWeixin&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改公众号/小程序");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#type").val(data.data.type);
$("#name").val(data.data.name);
$("#appid").val(data.data.appid);
$("#appsecret").val(data.data.appsecret);
shownote()
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function save(){
if($("#name").val()==''||$("#appid").val()==''||$("#appsecret").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveWeixin',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此公众号/小程序吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=delWeixin&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function testweixin(id) {
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=testweixin',
data : {id:id},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.alert(data.msg, {icon:1});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
</script>
+234
View File
@@ -0,0 +1,234 @@
<?php
/**
* 企业微信账号列表
**/
include("../includes/common.php");
$title='企业微信账号列表';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-8 center-block" style="float: none;">
<?php
$list = $DB->getAll("SELECT * FROM pre_wework ORDER BY id ASC");
?>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">企业微信修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">名称</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅用于显示,不要重复">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">企业ID</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="appid" id="appid" placeholder="">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">Secret</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="appsecret" id="appsecret" placeholder="">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">企业微信账号列表&nbsp;<span class="pull-right"><a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a></span></h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>名称</th><th>企业ID</th><th>客服账号数量</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
$wxkf_allnum = 0;
foreach($list as $res)
{
$wxkf_num = $DB->getColumn("SELECT COUNT(*) FROM pre_wxkfaccount WHERE wid='{$res['id']}'");
$wxkf_allnum += $wxkf_num;
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['name'].'</td><td>'.$res['appid'].'</td><td><span style="font-weight:700;color:#f40;">'.$wxkf_num.'</span> [<a href="javascript:refreshnum('.$res['id'].')">刷新</a>]</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a>&nbsp;<a onclick="testwework('.$res['id'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
}
?>
</tbody>
</table>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 当前共有<span style="font-weight:700;color:#f40;"><?php echo count($list);?></span>个企业微信,总共<span style="font-weight:700;color:#f40;"><?php echo $wxkf_allnum ?></span>个客服账号<?php if($conf['wework_paymsgmode']==1)echo '<font color="red">也即单个用户48小时内最多拉起'.$wxkf_allnum.'次微信客服支付</font>';?><br/>如需在企业下添加多个客服账号,需先在开发配置停用API,然后再添加客服账号。
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增企业微信");
$("#action").val("add");
$("#id").val('');
$("#name").val('');
$("#appid").val('');
$("#appsecret").val('');
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getWework&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改企业微信");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#appid").val(data.data.appid);
$("#appsecret").val(data.data.appsecret);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function save(){
if($("#name").val()==''||$("#appid").val()==''||$("#appsecret").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=saveWework',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此企业微信吗?', {
btn: ['确定','取消'], icon:0
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=delWework&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=setWework&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function refreshnum(id) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=refreshWework',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1,closeBtn:false}, function(){window.location.reload()});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function testwework(id) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=testWework',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:1});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
</script>
+26
View File
@@ -0,0 +1,26 @@
<?php
/**
* 支付插件页面
**/
include("../includes/common.php");
$title='支付插件页面';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
$channelid = isset($_GET['channel'])?intval($_GET['channel']):0;
$func = isset($_GET['func'])?$_GET['func']:'';
if($channelid == 0 || empty($func)) showmsg('参数错误',3);
$channel = \lib\Channel::get($channelid);
if(!$channel) showmsg('当前支付通道不存在',3);
try{
\lib\Plugin::loadForAdmin($func);
}catch(Exception $e){
showmsg($e->getMessage(),3);
}
?>
</div>
</div>
+483
View File
@@ -0,0 +1,483 @@
<?php
/**
* 分账记录
**/
include("../includes/common.php");
$title='分账记录';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
.tips {cursor: pointer;}
.dates{max-width: 120px;}
@media screen and (max-width: 767px) {
.table-responsive {
overflow-y: auto;
}
}
</style>
<link href="../assets/css/datepicker.css" rel="stylesheet">
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="trade_no">系统订单号</option><option value="api_trade_no">接口订单号</option><option value="money">分账金额</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容">
</div>
<div class="form-group">
<input type="text" class="form-control" name="rid" style="width: 80px;" placeholder="分账规则" value="">
</div>
<div class="input-group input-daterange">
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待分账</option><option value="1">已提交</option><option value="2">分账成功</option><option value="3">分账失败</option><option value="4">已取消</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新记录列表"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" id="batchAction" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="javascript:batch_act('submit')" data-action-type="submit">批量分账</a></li>
<li><a href="javascript:batch_act('return')" data-action-type="return">批量回退</a></li>
<li><a href="javascript:batch_act('unfreeze')" data-action-type="unfreeze">批量取消</a></li>
<li role="separator" class="divider"></li>
<li><a href="javascript:operation('2')" data-action-type="2">改为成功</a></li>
<li><a href="javascript:operation('3')" data-action-type="3">改为失败</a></li>
<li><a href="javascript:operation('4')" data-action-type="4">改为取消</a></li>
<li><a href="javascript:operation('5')" data-action-type="5">删除</a></li>
</ul>
</div>
<button type="button" onclick="statistics()" class="btn btn-default">&nbsp;统计&nbsp;</button>
</form>
<table id="listTable">
</table>
</div>
</div>
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">分账统计概况</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<template id="statistics-template">
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
<li>分账总金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
<li>成功分账:<span style="font-weight: 600;">¥ {successMoney}</span></li>
<li>失败金额:<span style="font-weight: 600;">¥ {failMoney}</span></li>
</ul>
<ul class="list-inline" style="padding-top:10px;margin-bottom: 0;">
<li>分账总数:<span style="font-weight: 600;">{totalCount}</span></li>
<li>成功分账:<span style="font-weight: 600;">{successCount}</span></li>
<li>分账失败:<span style="font-weight: 600;">{failCount}</span></li>
<li>成功率:<span style="font-weight: 600;">{successRate}%</span></li>
</ul>
</template>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$.action_arr = {
'submit': '提交分账',
'return': '分账回退',
'unfreeze': '取消分账',
'query': '查询结果',
};
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_profitsharing.php?act=orderList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
uniqueId: 'id',
columns: [
{
field: '',
checkbox: true
},
{
field: 'trade_no',
title: '系统订单号',
formatter: function(value, row, index) {
return '<b><a href="./order.php?column=trade_no&value='+value+'" target="_blank">'+value+'</a></b>';
}
},
{
field: 'rid',
title: '分账规则'
},
{
field: 'channelid',
title: '支付通道',
formatter: function(value, row, index) {
return value + '__' + row.channelname;
}
},
{
field: 'money',
title: '分账金额',
formatter: function(value, row, index) {
if(row.status == '0' || row.status == '3'){
return '<a href="javascript:editmoney('+row.id+', \''+value+'\')" title="修改分账金额">'+value+'</a>';
}
return value;
}
},
{
field: 'addtime',
title: '时间'
},
{
field: 'status',
title: '分账状态',
formatter: function(value, row, index) {
if(value == '1'){
return '<font color=orange>已提交</font>';
}else if(value == '2'){
return '<font color=green>分账成功</font>';
}else if(value == '3'){
return '<font color=red>分账失败</font>' + (row.result ? ' <span onclick="showmsg(\''+row.result+'\')" class="tips" title="失败原因"><i class="fa fa-info-circle"></i></span>' : '');
}else if(value == '4'){
return '<font color=grey>已取消</font>';
}else{
return '<font color=blue>待分账</font>';
}
}
},
{
field: 'status',
title: '操作',
formatter: function(value, row, index) {
if(value == '1'){
return '<a href="javascript:do_query('+row.id+')" class="btn btn-info btn-xs">查询结果</a>';
}else if(value == '2'){
return '<a href="javascript:do_return('+row.id+')" class="btn btn-danger btn-xs">分账回退</a>';
}else if(value == '3'){
return '<a href="javascript:do_submit('+row.id+')" class="btn btn-primary btn-xs">重试</a>&nbsp;<a href="javascript:do_unfreeze('+row.id+')" class="btn btn-danger btn-xs">取消</a>';
}else if(value == '0'){
return '<a href="javascript:do_submit('+row.id+')" class="btn btn-primary btn-xs">提交分账</a>&nbsp;<a href="javascript:do_unfreeze('+row.id+')" class="btn btn-danger btn-xs">取消</a>';
}
}
},
]
})
})
function operation(status){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择订单', {time:1500});return;
}
var checkbox = new Array();
$.each(selected, function(key, item){
checkbox.push(item.id)
})
if(status == 5 && !confirm('确定要删除已选中的'+checkbox.length+'个订单吗?')) return;
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=operation',
data : {status:status, checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
function batch_act(action){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择订单', {time:1500});return;
}
var checkbox = getBatchOperateData(selected, 'id')[action];
if(checkbox.length == 0){
layer.msg('要处理的订单数量为0', {time:1500});return;
}
var content_arr = {
'submit': '是否将这'+checkbox.length+'条订单进行分账?',
'return': '是否将这'+checkbox.length+'条已分账的订单回退?资金将从分账接收方的账户回退给分账方。',
'unfreeze': '是否将这'+checkbox.length+'条订单取消分账?取消分账后将解冻资金到商户号,后续无法再次发起分账。'
};
var confirmobj = layer.confirm(content_arr[action], {
title: $.action_arr[action],
btn: ['确定','取消'],
icon:0
}, function(){
batch_act_order(checkbox, 0, action);
}, function(){
layer.close(confirmobj);
});
}
function batch_act_order(ids, index, action){
if (index >= ids.length) {
layer.alert('已成功'+$.action_arr[action]+ids.length+'条订单!', {icon: 1}, function(){
layer.closeAll();searchSubmit();
});
return;
}
var id = ids[index];
var row = $("#listTable").bootstrapTable('getRowByUniqueId', id);
var ii = layer.msg('正在' + $.action_arr[action] + row.trade_no + ''+row.money+'元)', {icon: 16, shade: 0.3, time: 0});
var url_arr = {
'submit': 'ajax_profitsharing.php?act=submit',
'return': 'ajax_profitsharing.php?act=return',
'unfreeze': 'ajax_profitsharing.php?act=unfreeeze'
};
$.ajax({
type : 'POST',
url : url_arr[action],
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
index > 0 && searchSubmit();
if(data.code == 0){
batch_act_order(ids, index + 1, action);
}else{
layer.alert(row.trade_no + $.action_arr[action] + '失败:' + data.msg, {icon:7});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function getBatchOperateData(selections, field) {
var counts = {
'submit': field ? [] : 0, // 批量分账
'return': field ? [] : 0, // 批量回退
'unfreeze': field ? [] : 0, // 批量取消
};
selections.forEach(function(row) {
var status = parseInt(row.status);
if (status == 0) {
if (field) {
counts['submit'].push(row[field]);
counts['unfreeze'].push(row[field]);
} else {
counts['submit']++;
counts['unfreeze']++;
}
} else if (status == 2) {
if (field) {
counts['return'].push(row[field]);
} else {
counts['return']++;
}
} else if (status == 3) {
if (field) {
counts['submit'].push(row[field]);
counts['unfreeze'].push(row[field]);
} else {
counts['submit']++;
counts['unfreeze']++;
}
}
});
return counts;
}
function do_submit(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=submit',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code >= 0){
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function do_query(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=query',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var msg = '查询结果:正在分账';
if(data.status == 1) msg = '查询结果:分账成功';
else if(data.status == 2) msg = '查询结果:分账失败,原因:'+data.reason;
layer.alert(msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
}else{
layer.alert('查询失败:'+data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function do_unfreeze(id){
var confirmobj = layer.confirm('取消分账后将解冻资金到商户号,后续无法再次发起分账,是否继续?', {
btn: ['确定','取消']
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=unfreeeze',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
}else{
layer.alert('解冻剩余资金失败:'+data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
});
}
function do_return(id){
var confirmobj = layer.confirm('将已分账的资金从分账接收方的账户回退给分账方,是否继续?', {
btn: ['确定','取消']
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=return',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();searchSubmit()});
}else{
layer.alert('退分账失败:'+data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
});
}
function showmsg(result){
layer.alert(result, {title:'失败原因'});
}
function editmoney(id, money){
layer.prompt({title: '修改分账金额', value: money, formType: 0}, function(text, index){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=editmoney',
data : {id:id,money:text},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.closeAll();
layer.msg('修改成功', {time:800});
searchSubmit()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
});
}
function statistics(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=statistics',
data: $('#searchToolbar').serializeArray(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var element = $('#modal-statistics');
var htmlContent = $("#statistics-template").html().replace(/\{(\w+)\}/g, function (match, key) {
return data.data[key] || '';
});
element.find('.modal-body').html(htmlContent);
element.modal('show');
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
$(document).ready(function(){
$('.input-datepicker, .input-daterange').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
clearBtn: true,
language: 'zh-CN'
});
$("#batchAction").click(function(e) {
e.preventDefault();
var selections = $('#listTable').bootstrapTable('getSelections'),
button = $(this);
var counts = getBatchOperateData(selections);
button.next('.dropdown-menu').find('a[data-action-type]').each(function() {
var actionType = $(this).data('action-type');
var count = counts[actionType];
if(typeof count == 'undefined') return;
var originalText = $(this).text().split('(')[0];
$(this).text(originalText + (count > 0 ? ' (可执行' + count + '条)' : ' (0)'));
});
});
})
</script>
+355
View File
@@ -0,0 +1,355 @@
<?php
/**
* 分账规则列表
**/
include("../includes/common.php");
$title='分账规则列表';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
tbody tr>td:nth-child(4){overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:160px;}
tbody tr>td:nth-child(5){overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:320px;}
</style>
<div class="container" style="padding-top:70px;">
<div class="row">
<div class="col-md-12">
<?php
$support_plugins = \lib\ProfitSharing\CommUtil::$plugins;
$channels = $DB->getAll("SELECT id,name,plugin,mode FROM pre_channel WHERE plugin IN ('".implode("','",$support_plugins)."') ORDER BY id ASC");
$channel_select = '';
foreach($channels as $row){
$channel_select .= '<option value="'.$row['id'].'" plugin="'.$row['plugin'].'" mode="'.$row['mode'].'">'.$row['id'].'__'.$row['name'].'</option>';
}
$link = '';
$sql = " 1";
if(isset($_GET['value']) && !empty($_GET['value'])) {
$value=daddslashes($_GET['value']);
$sql .= " AND A.`{$_GET['column']}`='{$value}'";
$link .= '&column='.$_GET['column'].'&value='.urlencode($_GET['value']);
}
?>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">分账规则修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">支付通道</label>
<div class="col-sm-9">
<select name="channel" id="channel" class="form-control" onchange="changeChannel()">
<option value="0">请选择支付通道</option><?php echo $channel_select; ?>
</select>
<font color="green">只支持<?php echo implode("、",$support_plugins)?>支付插件</font>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">商户ID</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="uid" id="uid" placeholder="可留空,留空则为当前支付通道所有订单">
<font color="green" id="uid_note" style="display:none">填写商户ID后,将自动从商户余额扣除分账的金额</font>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">商户子通道</label>
<div class="col-sm-9">
<select name="subchannel" id="subchannel" class="form-control"></select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">接收方账号</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="account" id="account" placeholder="">
<font color="green" id="account_note"></font>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">接收方姓名</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="name" id="name" placeholder="可留空,不填写则不校验真实姓名">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">分账比例</label>
<div class="col-sm-9">
<div class="input-group"><input type="text" class="form-control" name="rate" id="rate" placeholder="填写1~100的数字"><span class="input-group-addon">%</span></div>
<font color="green">一般限制最高30%(微信还需要减去手续费,例如手续费是0.6%,则填写29.4%</font>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label no-padding-right">订单最小金额</label>
<div class="col-sm-9">
<div class="input-group"><input type="text" class="form-control" name="minmoney" id="minmoney" placeholder="订单超过该金额才进行分账"><span class="input-group-addon">元</span></div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="panel panel-info">
<div class="panel-heading"><h3 class="panel-title">分账规则列表</h3></div>
<div class="panel-body">
<form action="./ps_receiver.php" method="GET" class="form-inline">
<div class="form-group">
<label><b>搜索</b></label>
<select name="column" class="form-control" default="<?php echo @$_GET['column']?>"><option value="channel">通道ID</option><option value="uid">商户ID</option><option value="account">接收方账号</option><option value="name">接收方姓名</option></select>
<input type="text" class="form-control" name="value" placeholder="输入搜索内容" value="<?php echo @$_GET['value']?>">
<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i>&nbsp;搜索</button>&nbsp;
<a href="javascript:addframe()" class="btn btn-success"><i class="fa fa-plus"></i>&nbsp;新增</a>&nbsp;
<a href="?" class="btn btn-default" title="刷新列表"><i class="fa fa-refresh"></i></a>
</div>
</form>
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>支付通道</th><th>商户ID</th><th>商户子通道</th><th>接收方账号/姓名</th><th>分账比例</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
$numrows=$DB->getColumn("SELECT count(*) from pre_psreceiver A WHERE{$sql}");
$pagesize=15;
$pages=ceil($numrows/$pagesize);
$page=isset($_GET['page'])?intval($_GET['page']):1;
$offset=$pagesize*($page - 1);
$rs=$DB->query("SELECT A.*,B.name channelname,C.name subchannelname,C.apply_id FROM pre_psreceiver A LEFT JOIN pre_channel B ON A.channel=B.id LEFT JOIN pre_subchannel C ON A.subchannel=C.id WHERE{$sql} order by A.id desc limit $offset,$pagesize");
while($res = $rs->fetch())
{
echo '<tr><td><b>'.$res['id'].'</b></td><td>'.$res['channel'].'__'.$res['channelname'].'</td><td><a href="./ulist.php?my=search&column=uid&value='.$res['uid'].'" target="_blank">'.$res['uid'].'</a></td><td>'.($res['subchannel']?$res['subchannel'].'__'.$res['subchannelname']:'').'</td><td>'.$res['account'].($res['name']?''.$res['name']:'').'</td><td>'.$res['rate'].'</td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a>&nbsp;<a href="./ps_order.php?rid='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a></td></tr>';
}
?>
</tbody>
</table>
</div>
<?php
echo'<center><ul class="pagination">';
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page>1)
{
echo '<li><a href="ps_receiver.php?page='.$first.$link.'">首页</a></li>';
echo '<li><a href="ps_receiver.php?page='.$prev.$link.'">&laquo;</a></li>';
} else {
echo '<li class="disabled"><a>首页</a></li>';
echo '<li class="disabled"><a>&laquo;</a></li>';
}
$start=$page-10>1?$page-10:1;
$end=$page+10<$pages?$page+10:$pages;
for ($i=$start;$i<$page;$i++)
echo '<li><a href="ps_receiver.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '<li class="disabled"><a>'.$page.'</a></li>';
for ($i=$page+1;$i<=$end;$i++)
echo '<li><a href="ps_receiver.php?page='.$i.$link.'">'.$i .'</a></li>';
if ($page<$pages)
{
echo '<li><a href="ps_receiver.php?page='.$next.$link.'">&raquo;</a></li>';
echo '<li><a href="ps_receiver.php?page='.$last.$link.'">尾页</a></li>';
} else {
echo '<li class="disabled"><a>&raquo;</a></li>';
echo '<li class="disabled"><a>尾页</a></li>';
}
echo'</ul></center>';
?>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增分账规则");
$("#action").val("add");
$("#subchannel").empty();
$("#id").val('');
$("#channel").val(0);
$("#uid").val('');
$("#subchannel").val(0);
$("#account").val('');
$("#name").val('');
$("#rate").val('');
$("#minmoney").val('');
}
function changeChannel(subchannel){
subchannel = subchannel || null
var channel = parseInt($("#channel").val());
if(channel>0){
var plugin = $("#channel option:selected").attr('plugin');
if(plugin == 'wxpayn' || plugin == 'wxpaynp')
$("#account_note").text('支持填写商户号或个人OpenIdOpenId获取地址:<?php echo $siteurl?>user/openid.php?channel='+channel);
else if(plugin == 'alipay' || plugin == 'alipaysl')
$("#account_note").text('支持填写支付宝UID(2088开头的16位数字)或支付宝账号');
else
$("#account_note").text('');
var mode = $("#channel option:selected").attr('mode');
if(mode == '1')
$("#uid_note").hide();
else
$("#uid_note").show();
}else{
$("#account_note").text('');
}
getSubChannels(subchannel);
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_profitsharing.php?act=get_receiver&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改分账规则");
$("#action").val("edit");
$("#subchannel").empty();
$("#id").val(data.data.id);
$("#channel").val(data.data.channel);
$("#uid").val(data.data.uid);
$("#subchannel").val(data.data.subchannel);
$("#account").val(data.data.account);
$("#name").val(data.data.name);
$("#rate").val(data.data.rate);
$("#minmoney").val(data.data.minmoney);
changeChannel(data.data.subchannel);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function save(){
if($("#channel").val()=='0'||$("#account").val()==''){
layer.alert('必填项不能为空!');return false;
}
var url = 'ajax_profitsharing.php?act=add_receiver';
if($("#action").val() == 'edit') url = 'ajax_profitsharing.php?act=edit_receiver';
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : url,
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此分账规则吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=del_receiver',
data : {id: id},
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_profitsharing.php?act=set_receiver',
data : {id:id, status:status},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon: 1}, function(){layer.closeAll();window.location.reload()});
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function getSubChannels(subchannel){
subchannel = subchannel || null;
var uid = $("#uid").val();
var channel = $("#channel").val();
$("#subchannel").empty();
if(uid == '' || channel == '0') return;
$.ajax({
type : 'GET',
url : 'ajax_pay.php?act=getSubChannels&channel='+channel+'&uid='+uid,
dataType : 'json',
success : function(data) {
if(data.code == 0){
$("#subchannel").append('<option value="0">可留空,留空表示当前商户所有子通道</option>');
$.each(data.data, function (i, res) {
$("#subchannel").append('<option value="'+res.id+'">'+res.id+'__'+res.name+'</option>');
})
if(subchannel!=null)$("#subchannel").val(subchannel);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
$(document).ready(function(){
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
if($(items[i]).attr("default")!=''){
$(items[i]).val($(items[i]).attr("default"));
}
}
$("#uid").change(function(){
getSubChannels();
})
})
</script>
+198
View File
@@ -0,0 +1,198 @@
<?php
/**
* 资金明细
**/
include("../includes/common.php");
$title='资金明细';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
.dates{max-width: 120px;}
@media screen and (max-width: 767px) {
.table-responsive {
overflow-y: auto;
}
}
</style>
<link href="../assets/css/datepicker.css" rel="stylesheet">
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="type">操作类型</option><option value="money">变更金额</option><option value="trade_no">关联订单号</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容">
</div>
<div class="form-group">
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
</div>
<div class="input-group input-daterange">
<input type="text" id="starttime" name="starttime" class="form-control dates" placeholder="开始日期" autocomplete="off" title="留空则不限时间范围">
<span class="input-group-addon" onclick="$('#starttime').val('');$('#endtime').val('');" title="清除"><i class="fa fa-chevron-right"></i></span>
<input type="text" id="endtime" name="endtime" class="form-control dates" placeholder="结束日期" autocomplete="off" title="留空则不限时间范围">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新明细列表"><i class="fa fa-refresh"></i></a>
<button type="button" onclick="statistics()" class="btn btn-default">&nbsp;统计&nbsp;</button>
</form>
<table id="listTable">
</table>
</div>
</div>
<div class="modal" id="modal-statistics" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">资金明细统计</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<template id="statistics-template">
<ul class="list-inline" style="margin-bottom: 0;padding-bottom: 10px;border-bottom: 1px solid #dddddd;">
<li>增加金额:<span style="font-weight: 600;">¥ {incMoney}</span></li>
<li>减少金额:<span style="font-weight: 600;">¥ {decMoney}</span></li>
<li>总计金额:<span style="font-weight: 600;">¥ {totalMoney}</span></li>
</ul>
</template>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_user.php?act=recordList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
}
},
{
field: 'type',
title: '操作类型',
formatter: function(value, row, index) {
return row.action==2?'<font color="red">'+value+'</font>':'<font color="green">'+value+'</font>';
}
},
{
field: 'money',
title: '变更金额',
formatter: function(value, row, index) {
return (row.action==2?'- ':'+ ')+value;
}
},
{
field: 'oldmoney',
title: '变更前金额'
},
{
field: 'newmoney',
title: '变更后金额'
},
{
field: 'date',
title: '时间'
},
{
field: 'trade_no',
title: '关联订单号',
formatter: function(value, row, index) {
return value?'<a href="./order.php?column=trade_no&value='+value+'" target="_blank">'+value+'</a>':'无';
}
},
{
field: '',
title: '操作',
visible: false,
formatter: function(value, row, index) {
return '<a class="btn btn-xs btn-danger" onclick="delItem('+row.id+')">删除</a>';
}
},
],
})
})
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此记录吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=delRecord&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.closeAll();
searchSubmit();
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function statistics(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=record_stats',
data: $('#searchToolbar').serializeArray(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var element = $('#modal-statistics');
var htmlContent = $("#statistics-template").html().replace(/\{(\w+)\}/g, function (match, key) {
return data.data[key] || '';
});
element.find('.modal-body').html(htmlContent);
element.modal('show');
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
$(document).ready(function(){
$('.input-datepicker, .input-daterange').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
clearBtn: true,
language: 'zh-CN'
});
})
</script>
+92
View File
@@ -0,0 +1,92 @@
<?php
/**
* 风控记录
**/
include("../includes/common.php");
$title='风控记录';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="uid">商户号</option><option value="url">风控网址</option><option value="content">风控内容</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容">
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="-1">风控类型</option><option value="0">关键词屏蔽</option><option value="1">订单成功率</option><option value="2">连续通知失败</option><option value="3">订单投诉率</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新风控记录"><i class="fa fa-refresh"></i></a>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_order.php?act=riskList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: 'id',
title: 'ID',
formatter: function(value, row, index) {
return '<b>'+value+'</b>';
}
},
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return '<b><a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a></b>';
}
},
{
field: 'type',
title: '风控类型',
formatter: function(value, row, index) {
if(value == 1){
return '订单成功率';
}else if(value == 2){
return '连续通知失败';
}else if(value == 3){
return '订单投诉率';
}else{
return '关键词屏蔽';
}
}
},
{
field: 'content',
title: '风控内容'
},
{
field: 'url',
title: '风控网址'
},
{
field: 'date',
title: '时间'
}
],
})
})
</script>
+1700
View File
File diff suppressed because it is too large Load Diff
+109
View File
@@ -0,0 +1,109 @@
<?php
/**
* H5跳转微信客服支付设置
**/
include("../includes/common.php");
$title='H5跳转微信客服支付设置';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$callback_url = $siteurl.'wework.php';
$errmsg = $CACHE->read('wxkferrmsg');
if($errmsg){
$arr = unserialize($errmsg);
$errmsg = $arr['time'].' - '.$arr['errmsg'];
}
$account_list = $DB->getAll("SELECT A.* FROM pre_wxkfaccount A LEFT JOIN pre_wework B ON A.wid=B.id WHERE B.status=1");
$account_select = '<option value="0">多客服账号轮询</option>';
foreach($account_list as $row){
$account_select .= '<option value="'.$row['id'].'">'.$row['openkfid'].' - '.$row['name'].'</option>';
}
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">H5跳转微信客服支付设置</h3></div>
<div class="panel-body">
<?php if($errmsg){?><div class="alert alert-warning">回调接口上一次报错信息:<?php echo $errmsg;?></div><?php }?>
<form onsubmit="return saveSetting(this)" method="post" class="form-horizontal" role="form">
<div class="form-group">
<label class="col-sm-3 control-label">回调URL</label>
<div class="col-sm-9"><input type="text" value="<?php echo $callback_url; ?>" class="form-control" readonly/></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">Token</label>
<div class="col-sm-9"><input type="text" name="wework_token" value="<?php echo $conf['wework_token']; ?>" class="form-control"/></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">EncodingAESKey</label>
<div class="col-sm-9"><input type="text" name="wework_aeskey" value="<?php echo $conf['wework_aeskey']; ?>" class="form-control"/></div>
</div><hr/>
<div class="form-group">
<label class="col-sm-3 control-label">是否开启H5跳转微信客服支付</label>
<div class="col-sm-9"><select class="form-control" name="wework_payopen" default="<?php echo $conf['wework_payopen']?>"><option value="0">关闭</option><option value="1">开启</option></select><font color="green">开启前需确保以上配置正确无误,否则会导致手机浏览器无法微信支付</font></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">微信客服支付消息模式</label>
<div class="col-sm-9"><select class="form-control" name="wework_paymsgmode" default="<?php echo $conf['wework_paymsgmode']?>"><option value="0">发送确认消息,用户回复后发送支付链接(默认)</option><option value="1">直接发送支付链接(用户将无法支付第二单)</option></select><font color="green">让用户回复消息,可防止因微信限制发消息导致用户无法在同一个客服二次支付</font></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">客服账号ID选择</label>
<div class="col-sm-9"><select name="wework_paykfid" id="wework_paykfid" class="form-control" default="<?php echo $conf['wework_paykfid']; ?>"><?php echo $account_select?></option></select></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">人工客服链接</label>
<div class="col-sm-9"><input type="text" name="wework_contact" value="<?php echo $conf['wework_contact']; ?>" class="form-control" placeholder="选填,填写后在支付消息后面会追加人工客服链接"/></div>
</div><br/>
<div class="form-group">
<label class="col-sm-3 control-label">支付消息尾部附加内容</label>
<div class="col-sm-9"><input type="text" name="wework_remark" value="<?php echo $conf['wework_remark']; ?>" class="form-control" placeholder="选填,填写后在支付消息后面会追加自定义内容"/><font color="green">支持变量值:[qq]当前商户的联系QQ</font></div>
</div><br/>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9"><input type="submit" name="submit" value="保存" class="btn btn-primary form-control"/><br/><br/><a href="pay_wework.php" class="btn btn-success btn-block">企业微信账号列表</a><br/>
</div>
</div>
</form>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span>
此功能可以通过<a href="https://kf.weixin.qq.com/" target="_blank" rel="noreferrer">微信客服</a>,从手机网站跳转到微信内进行支付。<br/>注:1、企业微信需要完成企业认证,否则接待客户数量会有限制。<br/>2、只能使用独立版<a href="https://kf.weixin.qq.com/" target="_blank" rel="noreferrer">微信客服</a>获取token并配置回调,不能开启企业微信内的微信客服应用!
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
$(items[i]).val($(items[i]).attr("default")||0);
}
function saveSetting(obj){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax.php?act=set',
data : $(obj).serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('设置保存成功!', {
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
</script>
+194
View File
@@ -0,0 +1,194 @@
<?php
/**
* 批量结算
**/
include("../includes/common.php");
$title='批量结算';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
img.logo{width:14px;height:14px;margin:0 5px 0 3px;}
</style>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">批量结算操作<span class="pull-right"><a href="javascript:createBatch()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 生成结算批次</a></span></h3></div>
<table class="table table-striped">
<thead><tr><th>批次号</th><th>总金额</th><th>总数量</th><th>生成时间</th><th>操作</th></thead>
<tbody>
<?php
$pagesize=15;
$pages=ceil($numrows/$pagesize);
$page=isset($_GET['page'])?intval($_GET['page']):1;
$offset=$pagesize*($page - 1);
$rs=$DB->query("SELECT * FROM pre_batch order by time desc limit $offset,$pagesize");
while($res = $rs->fetch())
{
echo '<tr><td><b>'.$res['batch'].'</b></td><td>'.$res['allmoney'].'</td><td>'.$res['count'].'</td><td>'.$res['time'].'</td><td><a href="./slist.php?batch='.$res['batch'].'" class="btn btn-xs btn-info">结算列表</a>&nbsp;<a href="javascript:download_csv(\''.$res['batch'].'\')" class="btn btn-xs btn-warning">导出表格</a>&nbsp;<a href="javascript:transfer(\''.$res['batch'].'\')" class="btn btn-xs btn-success">批量转账</a>&nbsp;<a href="javascript:completeBatch(\''.$res['batch'].'\')" class="btn btn-xs btn-primary">改为完成</a></td></tr>';
}
?>
</tbody>
</table>
<?php
echo'<div class="text-center"><ul class="pagination">';
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page>1)
{
echo '<li><a href="settle.php?page='.$first.$link.'">首页</a></li>';
echo '<li><a href="settle.php?page='.$prev.$link.'">&laquo;</a></li>';
} else {
echo '<li class="disabled"><a>首页</a></li>';
echo '<li class="disabled"><a>&laquo;</a></li>';
}
for ($i=1;$i<$page;$i++)
echo '<li><a href="settle.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '<li class="disabled"><a>'.$page.'</a></li>';
if($pages>=10)$sss=$page+10;else $sss=$pages;
for ($i=$page+1;$i<=$sss;$i++)
echo '<li><a href="settle.php?page='.$i.$link.'">'.$i .'</a></li>';
echo '';
if ($page<$pages)
{
echo '<li><a href="settle.php?page='.$next.$link.'">&raquo;</a></li>';
echo '<li><a href="settle.php?page='.$last.$link.'">尾页</a></li>';
} else {
echo '<li class="disabled"><a>&raquo;</a></li>';
echo '<li class="disabled"><a>尾页</a></li>';
}
echo'</ul></div>';
#分页
?>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 结算标准:金额大于<?php echo $conf['settle_money']?>元,或主动申请的<br/><span class="glyphicon glyphicon-info-sign"></span> 点击 生成结算批次 之后会将所有"<font color="blue">待结算</font>"状态的记录更改为"<font color="orange">正在结算</font>",通过转账接口转账之后会将状态更改为"<font color="green">已完成</font>",如果是手动转账,需要手动将状态更改为"<font color="green">已完成</font>"
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
function createBatch(){
var confirmobj = layer.confirm('你确定要生成结算批次吗?', {
btn: ['确定','取消']
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_settle.php?act=create_batch',
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('生成结算批次成功!该批次总数量:'+data.count+',总金额:'+data.allmoney, {
icon: 1,
closeBtn: false
},function(){
window.location.reload();
});
}else{
layer.alert(data.msg, {icon: 0})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function transfer(batch){
$.ajax({
type : 'GET',
url : 'ajax_settle.php?act=paypwd_check',
dataType : 'json',
success : function(data) {
if(data.code == 0){
var paymsg = '';
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=1&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/alipay.ico" class="logo">支付宝批量转账</a>';
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=2&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/wxpay.ico" class="logo">微信批量转账</a>';
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=3&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/qqpay.ico" class="logo">QQ钱包批量转账</a>';
paymsg+='<a class="btn btn-default btn-block" href="transfer_batch.php?type=4&batch='+batch+'" style="margin-top:10px;"><img width="20" src="../assets/icon/bank.ico" class="logo">银行卡批量转账</a>';
layer.alert('<center>'+paymsg+'<hr><a class="btn btn-default btn-block" onclick="layer.closeAll()">关闭</a></center>',{
btn:[],
title:'请选择批量转账方式',
closeBtn: false,
shadeClose: true
});
}else{
layer.prompt({title: '请输入支付密码', value: '', formType: 1}, function(text, index){
$.ajax({
type : 'POST',
url : 'ajax_settle.php?act=paypwd_input',
data : {paypwd:text},
dataType : 'json',
success : function(data) {
if(data.code == 0){
transfer(batch);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function completeBatch(batch){
var confirmobj = layer.confirm('是否将该批次所有结算记录状态改为已完成?', {
btn: ['确定','取消']
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_settle.php?act=complete_batch',
data : {batch: batch},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {
icon: 1,
closeBtn: false
});
}else{
layer.alert(data.msg, {icon: 0})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function download_csv(batch){
var paymsg = '';
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&batch='+batch+'" style="margin-top:10px;">结算信息汇总表格</a>';
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=alipay&batch='+batch+'" style="margin-top:10px;">支付宝批量付款表格</a>';
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=mybank&batch='+batch+'" style="margin-top:10px;">网商银行批量转账表格</a>';
paymsg+='<a class="btn btn-default btn-block" href="download.php?act=settle&type=wxpay&batch='+batch+'" style="margin-top:10px;">微信批量转账到零钱表格</a>';
layer.alert('<center>'+paymsg+'<hr><a class="btn btn-default btn-block" onclick="layer.closeAll()">关闭</a></center>',{
btn:[],
title:'请选择CSV表格模板',
closeBtn: false,
shadeClose: true
});
}
</script>
+327
View File
@@ -0,0 +1,327 @@
<?php
/**
* 结算列表
**/
include("../includes/common.php");
$title='结算列表';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="row">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<input type="hidden" class="form-control" name="batch">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="value" placeholder="结算账号/姓名">
</div>
<div class="form-group">
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="0">所有结算方式</option><option value="1">支付宝</option><option value="2">微信</option><option value="3">QQ钱包</option><option value="4">银行卡</option></select>
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">待结算</option><option value="1">已完成</option><option value="2">正在结算</option><option value="3">结算失败</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="settle.php" class="btn btn-success">批量结算</a>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新记录列表"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量修改 <span class="caret"></span></button>
<ul class="dropdown-menu"><li><a href="javascript:operation(0)">待结算</a></li><li><a href="javascript:operation(1)">已完成</a></li><li><a href="javascript:operation(2)">正在结算</a></li><li><a href="javascript:operation(3)">结算失败</a></li><li><a href="javascript:operation(4)">删除记录</a></li></ul>
</div>
</form>
<table id="listTable">
</table>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_settle.php?act=settleList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: '',
checkbox: true
},
{
field: 'id',
title: 'ID',
formatter: function(value, row, index) {
return '<b>'+value+'</b>';
}
},
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return '<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>';
}
},
{
field: 'type',
title: '结算方式',
formatter: function(value, row, index) {
let typename = '';
if(value == '1'){
typename='<img src="/assets/icon/alipay.ico" width="16" onerror="this.style.display=\'none\'">支付宝';
}else if(value == '2'){
typename='<img src="/assets/icon/wxpay.ico" width="16" onerror="this.style.display=\'none\'">微信';
}else if(value == '3'){
typename='<img src="/assets/icon/qqpay.ico" width="16" onerror="this.style.display=\'none\'">QQ钱包';
}else if(value == '4'){
typename='<img src="/assets/icon/bank.ico" width="16" onerror="this.style.display=\'none\'">银行卡';
}else if(value == '5'){
typename='支付机构';
}
if(row.auto!=1) typename+='<small>[手动]</small>'
return typename;
}
},
{
field: 'account',
title: '结算账号/姓名',
formatter: function(value, row, index) {
if(row.type == '5'){
return value+'&nbsp;'+row.username;
}else{
return '<span onclick="inputInfo('+row.id+')" title="点击直接修改">'+value+'&nbsp;'+row.username+'</span>';
}
}
},
{
field: 'money',
title: '结算金额/实际到账',
formatter: function(value, row, index) {
return '<b>'+value+'</b>&nbsp;/&nbsp;<b>'+row.realmoney+'</b>';
}
},
{
field: 'addtime',
title: '创建时间'
},
{
field: 'endtime',
title: '完成时间'
},
{
field: 'status',
title: '状态',
formatter: function(value, row, index) {
if(value == '1'){
return '<font color=green>已完成</font>' + (row.jumpurl ? '<br/><a href="javascript:showQrcode(\''+row.jumpurl+'\')" class="btn btn-xs btn-success"><i class="fa fa-qrcode"></i> 确认收款</a>' : '');
}else if(value == '2'){
return '<font color=orange>正在结算</font>';
}else if(value == '3'){
return '<a href="javascript:setResult('+row.id+')" title="点此填写失败原因"><font color=red>结算失败</font></a>';
}else{
return '<font color=blue>待结算</font>';
}
}
},
{
field: '',
title: '操作',
formatter: function(value, row, index) {
return '<select onChange="javascript:setStatus(\''+row.id+'\',this.value)" class=""><option selected>变更状态</option><option value="0">待结算</option><option value="1">已完成</option><option value="2">正在结算</option><option value="3">结算失败</option><option value="4">删除记录</option></select>';
}
},
],
})
})
function operation(status){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择记录', {time:1500});return;
}
var checkbox = new Array();
$.each(selected, function(key, item){
checkbox.push(item.id)
})
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_settle.php?act=opslist',
data : {status:status, checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
function setStatusDo(id, status) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'get',
url : 'ajax_settle.php',
data : 'act=setSettleStatus&id=' + id + '&status=' + status,
dataType : 'json',
success : function(ret) {
layer.close(ii);
if (ret['code'] != 200) {
alert(ret['msg'] ? ret['msg'] : '操作失败');
}
layer.closeAll();
searchSubmit();
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function setStatus(id, status) {
if(status==4){
var confirmobj = layer.confirm('你确实要删除此记录并退回商户余额吗?', {
btn: ['确定','取消'], icon:0
}, function(){
setStatusDo(id, status);
});
}else{
setStatusDo(id, status);
}
}
function setResult(id) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_settle.php?act=settle_result',
data : {id:id},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.prompt({title: '填写失败原因', value: data.result, formType: 2}, function(text, index){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_settle.php?act=settle_setresult',
data : {id:id,result:text},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.msg('填写失败原因成功');
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function inputInfo(id) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_settle.php?act=settle_info&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.open({
type: 1,
title: '修改数据',
skin: 'layui-layer-rim',
content: data.data,
success: function(){
$("#pay_type").val(data.pay_type);
}
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function saveInfo(id) {
var pay_type=$("#pay_type").val();
var pay_account=$("#pay_account").val();
var pay_name=$("#pay_name").val();
if(pay_account=='' || pay_name==''){layer.alert('请确保每项不能为空!');return false;}
$('#save').val('Loading');
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : "POST",
url : "ajax_settle.php?act=settle_save",
data : {id:id,pay_type:pay_type,pay_account:pay_account,pay_name:pay_name},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.closeAll();
layer.msg('保存成功!', {time:800});
searchSubmit();
}else{
layer.alert(data.msg);
}
$('#save').val('保存');
}
});
}
function showQrcode(url){
layer.open({
type: 1,
title: '收款方使用微信扫描以下二维码',
skin: 'layui-layer-demo',
shadeClose: true,
content: '<div id="qrcode" class="list-group-item text-center"></div>',
success: function(){
$('#qrcode').qrcode({
text: url,
width: 230,
height: 230,
foreground: "#000000",
background: "#ffffff",
typeNumber: -1
});
}
});
}
</script>
+16
View File
@@ -0,0 +1,16 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$uid=intval($_GET['uid']);
$userrow=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$userrow)sysmsg('当前用户不存在!');
$session=md5($uid.$userrow['key'].$password_hash);
$expiretime=time()+604800;
$token=authcode("{$uid}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY);
setcookie("user_token", $token, time() + 604800, '/user');
exit("<script language='javascript'>window.location.href='../user/';</script>");
+26
View File
@@ -0,0 +1,26 @@
<?php
include("../includes/common.php");
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$submit2=true;
$trade_no=daddslashes($_GET['trade_no']);
$order=$DB->getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' LIMIT 1");
if(!$order)sysmsg('该订单号不存在,请返回来源地重新发起请求!');
$paytype=$DB->getRow("SELECT id,name,status FROM pre_type WHERE id='{$order['type']}' LIMIT 1");
if(!$paytype)sysmsg('支付方式不存在');
$channelrow=$DB->getRow("SELECT id,plugin,apptype FROM pre_channel WHERE id='{$order['channel']}' LIMIT 1");
if(!$channelrow)sysmsg('支付通道不存在');
$order['typename'] = $paytype['name'];
$order['plugin'] = $channelrow['plugin'];
$order['profits'] = \lib\Payment::updateOrderProfits($order, $channelrow['plugin']);
try{
$result = \lib\Plugin::loadForSubmit($channelrow['plugin'], $trade_no);
$result['submit'] = true;
\lib\Payment::echoDefault($result);
}catch(Exception $e){
sysmsg($e->getMessage());
}
+360
View File
@@ -0,0 +1,360 @@
<?php
/**
* 付款记录
**/
include("../includes/common.php");
$title='付款记录';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="row">
<div class="col-md-12 center-block" style="float: none;">
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<div class="form-group">
<label>搜索</label>
<input type="text" class="form-control" name="value" placeholder="交易号/收款账号/姓名">
</div>
<div class="form-group">
<input type="text" class="form-control" name="uid" style="width: 100px;" placeholder="商户号" value="">
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="">所有付款方式</option><option value="alipay">支付宝</option><option value="wxpay">微信</option><option value="qqpay">QQ钱包</option><option value="bank">银行卡</option></select>
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="-1">全部状态</option><option value="0">正在处理</option><option value="1">转账成功</option><option value="2">转账失败</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="./transfer_add.php" class="btn btn-success">新增付款</a>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新付款记录"><i class="fa fa-refresh"></i></a>
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">批量操作 <span class="caret"></span></button>
<ul class="dropdown-menu"><li><a href="javascript:operation(1)">改为成功</a></li><li><a href="javascript:operation(2)">改为失败</a></li><li><a href="javascript:operation(3)">删除记录</a></li></ul>
</div>
</form>
<table id="listTable">
</table>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_transfer.php?act=transferList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: '',
checkbox: true
},
{
field: 'biz_no',
title: '交易号<br/>第三方交易号',
formatter: function(value, row, index) {
return '<b>'+value+'</b><br/>'+row.pay_order_no;
}
},
{
field: 'uid',
title: '商户号',
formatter: function(value, row, index) {
return value>0?'<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>':'管理员';
}
},
{
field: 'type',
title: '付款方式<br/>备注',
formatter: function(value, row, index) {
let typename = '';
if(value == 'alipay'){
typename='<img src="/assets/icon/alipay.ico" width="16" onerror="this.style.display=\'none\'">支付宝';
}else if(value == 'wxpay'){
typename='<img src="/assets/icon/wxpay.ico" width="16" onerror="this.style.display=\'none\'">微信';
}else if(value == 'qqpay'){
typename='<img src="/assets/icon/qqpay.ico" width="16" onerror="this.style.display=\'none\'">QQ钱包';
}else if(value == 'bank'){
typename='<img src="/assets/icon/bank.ico" width="16" onerror="this.style.display=\'none\'">银行卡';
}
return typename+'('+row.channel+')'+'<br/>'+(row.desc?'<font color="#bf7fef">'+row.desc+'</font>':'')+'';
}
},
{
field: 'account',
title: '付款账号<br/>姓名',
formatter: function(value, row, index) {
return ''+value+'<br/>'+row.username+'';
}
},
{
field: 'money',
title: '付款金额<br/>花费金额',
formatter: function(value, row, index) {
return '¥<b>'+value+'</b><br/>¥<b>'+row.costmoney+'</b>';
}
},
{
field: 'paytime',
title: '提交时间<br/>付款时间',
formatter: function(value, row, index) {
return (row.addtime ? row.addtime : value)+'<br/>'+value;
}
},
{
field: 'status',
title: '状态',
formatter: function(value, row, index) {
if(value == '1'){
return '<font color=green>转账成功</font>';
}else if(value == '2'){
return '<a href="javascript:showResult(\''+row.biz_no+'\')" title="点此查看失败原因"><font color=red>转账失败</font></a>';
}else{
return '<a href="javascript:queryStatus(\''+row.biz_no+'\')" title="点此查询转账状态"><font color=orange>正在处理</font></a>' + (row.jumpurl ? '<br/><a href="javascript:showQrcode(\''+row.jumpurl+'\')" class="btn btn-xs btn-success"><i class="fa fa-qrcode"></i> 确认收款</a>' : '');
}
}
},
{
field: 'status',
title: '操作',
formatter: function(value, row, index) {
let html = '';
if(row.status == '1'){
html += '<a href="javascript:setStatus(\''+row.biz_no+'\', 2)" class="btn btn-warning btn-xs">改为失败</a> <a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a><br/><a href="javascript:getProof(\''+row.biz_no+'\')" class="btn btn-default btn-xs">获取凭证</a> <a href="transfer_add.php?app='+row.type+'&copy='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
}else if(row.status == '2'){
html += '<a href="javascript:setStatus(\''+row.biz_no+'\', 1)" class="btn btn-success btn-xs">改为成功</a> <a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a><br/><a href="transfer_add.php?app='+row.type+'&copy='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
}else{
html += '<a href="javascript:queryStatus(\''+row.biz_no+'\')" class="btn btn-info btn-xs">查询状态</a> ';
if(row.jumpurl) html += '<a href="javascript:cancel(\''+row.biz_no+'\')" class="btn btn-warning btn-xs">撤销</a>';
else if(row.uid > 0) html += '<a href="javascript:refund(\''+row.biz_no+'\')" class="btn btn-warning btn-xs">退回</a>';
else html += '<a href="javascript:delItem(\''+row.biz_no+'\')" class="btn btn-danger btn-xs">删除</a>';
html += '<br/><a href="transfer_add.php?app='+row.type+'&copy='+row.biz_no+'" class="btn btn-default btn-xs">复制</a>';
}
return html;
}
},
],
})
})
function showResult(biz_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_transfer.php?act=transfer_result&biz_no='+biz_no,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg, {icon:0, title:'失败原因', shadeClose:true});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function queryStatus(biz_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_transfer.php?act=transfer_query&biz_no='+biz_no,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg, {title:'查询结果'});
}else{
layer.alert(data.msg, {icon:2, title:'查询失败'});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function setStatus(biz_no, status){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'post',
url : 'ajax_transfer.php?act=setTransferStatus',
data : {biz_no:biz_no, status:status},
dataType : 'json',
success : function(ret) {
layer.close(ii);
if (ret.code != 0) {
alert(ret.msg);
}
searchSubmit();
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function delItem(biz_no) {
var confirmobj = layer.confirm('你确实要删除此付款记录吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=delTransfer',
data : {biz_no:biz_no},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.closeAll();
searchSubmit();
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function refund(biz_no){
var confirmobj = layer.confirm('确定将余额退给商户并改为失败状态吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=refundTransfer',
data : {biz_no:biz_no},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function cancel(biz_no){
var confirmobj = layer.confirm('是否确定撤销转账订单?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=transfer_cancel',
data : {biz_no:biz_no},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.alert(data.msg, {icon:1}, function(){ layer.closeAll();searchSubmit(); });
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
function getProof(biz_no) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=transfer_proof',
data : {biz_no:biz_no},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
if(data.download_url){
layer.alert('获取转账凭证成功!<a href="'+data.download_url+'" target="_blank">点击下载凭证</a>', {icon:1, title:'获取凭证'});
}else{
layer.alert(data.msg, {icon:1, title:'获取凭证'});
}
}else{
layer.alert(data.msg, {icon:2, title:'获取失败'});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
function operation(status){
var selected = $('#listTable').bootstrapTable('getSelections');
if(selected.length == 0){
layer.msg('未选择记录', {time:1500});return;
}
if(status == 3 && !confirm('确定要删除已选中的'+selected.length+'条记录吗?')) return;
var checkbox = new Array();
$.each(selected, function(key, item){
checkbox.push(item.biz_no)
})
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=operation',
data : {status:status, checkbox:checkbox},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
searchSubmit();
layer.alert(data.msg);
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('请求超时');
searchSubmit();
}
});
return false;
}
function showQrcode(url){
layer.open({
type: 1,
title: '收款方使用微信扫描以下二维码',
skin: 'layui-layer-demo',
shadeClose: true,
content: '<div id="qrcode" class="list-group-item text-center"></div>',
success: function(){
$('#qrcode').qrcode({
text: url,
width: 230,
height: 230,
foreground: "#000000",
background: "#ffffff",
typeNumber: -1
});
}
});
}
</script>
+191
View File
@@ -0,0 +1,191 @@
<?php
include("../includes/common.php");
$title='转账付款';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<div class="col-xs-12 col-sm-10 col-lg-8 center-block" style="float: none;">
<?php
$app = isset($_GET['app'])?$_GET['app']:'alipay';
if($app=='alipay'){
$default_channel = $conf['transfer_alipay'];
}elseif($app=='wxpay'){
$default_channel = $conf['transfer_wxpay'];
}elseif($app=='qqpay'){
$default_channel = $conf['transfer_qqpay'];
}elseif($app=='bank'){
$default_channel = $conf['transfer_bank'];
}else{
showmsg('参数错误',4);
}
if(isset($_POST['submit'])){
if(!checkRefererHost())exit();
$out_biz_no = trim($_POST['out_biz_no']);
if(!isset($_POST['paypwd']) || $_POST['paypwd']!==$conf['admin_paypwd'])showmsg('支付密码错误',3);
$payee_account = htmlspecialchars(trim($_POST['payee_account']));
$payee_real_name = htmlspecialchars(trim($_POST['payee_real_name']));
$money = trim($_POST['money']);
$desc = htmlspecialchars(trim($_POST['desc']));
if(empty($out_biz_no) || empty($payee_account) || empty($money))showmsg('必填项不能为空',3);
if(strlen($out_biz_no)!=19 || !is_numeric($out_biz_no))showmsg('交易号输入不规范',3);
if($desc && mb_strlen($desc)>32)showmsg('转账备注最多32个字',3);
if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money) || $money<=0)showmsg('转账金额输入不规范',3);
if ($app=='qqpay' && (!is_numeric($payee_account) || strlen($payee_account)<6 || strlen($payee_account)>10))showmsg('QQ号码格式错误',3);
$channelid = isset($_POST['channel'])?$_POST['channel']:$default_channel;
$channel = \lib\Channel::get($channelid);
if(!$channel)showmsg('当前支付通道信息不存在',4);
$result = \lib\Transfer::submit($app, $channel, $out_biz_no, $payee_account, $payee_real_name, $money, $desc);
if($result['code']==0){
$paytime = $result['status'] == 1 ? 'NOW()' : null;
$data = ['biz_no'=>$out_biz_no, 'uid'=>0, 'type'=>$app, 'channel'=>$channelid, 'account'=>$payee_account, 'username'=>$payee_real_name, 'money'=>$money, 'costmoney'=>$money, 'addtime'=>'NOW()', 'paytime'=>$paytime, 'pay_order_no'=>$result['orderid'], 'status'=>$result['status'], 'desc'=>$desc];
if(isset($result['wxpackage'])) $data['ext'] = $result['wxpackage'];
$DB->insert('transfer', $data);
if($result['status'] == 1){
$result='转账成功!转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
}elseif(isset($result['wxpackage'])){
$result='提交成功!请在付款记录页面扫描二维码确认收款,1天内未确认,将退还给商家。转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
}else{
$result='提交成功!转账处理中,请稍后在付款记录页面查看结果。转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate'];
}
showmsg($result,1,'./transfer.php');
}else{
$result='转账失败:'.$result['msg'];
showmsg($result,4);
}
}
$out_biz_no = date("YmdHis").rand(11111,99999);
$channel_select = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%".$app."%')");
$copy = [];
if(isset($_GET['copy'])){
$copy = $DB->find('transfer', '*', ['biz_no'=>trim($_GET['copy'])]);
}
?>
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">转账付款</h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li class="<?php echo $app=='alipay'?'active':null;?>"><a href="?app=alipay">支付宝</a></li><li class="<?php echo $app=='wxpay'?'active':null;?>"><a href="?app=wxpay">微信</a></li><li class="<?php echo $app=='qqpay'?'active':null;?>"><a href="?app=qqpay">QQ钱包</a></li><li class="<?php echo $app=='bank'?'active':null;?>"><a href="?app=bank">银行卡</a></li>
</ul>
<div class="tab-pane active" id="alipay">
<form action="?app=<?php echo $app?>" method="POST" role="form">
<input type="hidden" name="type" value="<?php echo $app?>"/>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">通道选择</div>
<select name="channel" class="form-control" default="<?php echo $default_channel?>">
<?php foreach($channel_select as $channel){echo '<option value="'.$channel['id'].'">'.$channel['name'].''.($channel['id']==$default_channel?'(默认)':'').'</option>';} ?>
</select>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">交易号</div>
<input type="text" name="out_biz_no" value="<?php echo $out_biz_no?>" class="form-control" required/>
</div></div>
<?php if($app=='alipay'){?>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">支付宝账号</div>
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="支付宝登录账号或支付宝UID或支付宝Openid"/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">支付宝姓名</div>
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
</div></div>
<?php }elseif($app=='wxpay'){?>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">Openid</div>
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="只能填写微信Openid"/>
<div class="input-group-btn"><a href="./gettoken.php?app=wechat" class="btn btn-default">获取</a></div>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">真实姓名</div>
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
</div></div>
<?php }elseif($app=='qqpay'){?>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">收款方QQ</div>
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">真实姓名</div>
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="不填写则不校验真实姓名"/>
</div></div>
<?php }elseif($app=='bank'){?>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">银行卡号</div>
<input type="text" name="payee_account" value="<?php echo $copy['account']?>" class="form-control" required placeholder="收款方银行卡号"/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">姓名</div>
<input type="text" name="payee_real_name" value="<?php echo $copy['username']?>" class="form-control" placeholder="收款方银行账户名称"/>
</div></div>
<?php }?>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">转账金额</div>
<input type="text" name="money" value="" class="form-control" placeholder="RMB/元" required/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">转账备注</div>
<input type="text" name="desc" value="" class="form-control" placeholder="可留空,默认为:<?php echo $app=='alipay'?$conf['transfer_name']:$conf['transfer_desc']?>"/>
</div></div>
<div class="form-group">
<div class="input-group"><div class="input-group-addon">支付密码</div>
<input type="text" name="paypwd" value="" class="form-control" required/>
</div></div>
<p><input type="submit" name="submit" value="立即转账" class="btn btn-primary form-control"/></p>
<p><a href="javascript:balanceQuery()" class="btn btn-block btn-default">查询账户余额</a></p>
</form>
</div>
</div>
<div class="panel-footer">
<span class="glyphicon glyphicon-info-sign"></span> 交易号可以防止重复转账,同一个交易号只能提交同一次转账。<br/>
<a href="./set.php?mod=account">修改支付密码</a>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script>
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
$(items[i]).val($(items[i]).attr("default")||0);
}
function balanceQuery(){
var type = $("input[name=type]").val();
var channel = $("select[name=channel]").val();
if(channel == ''){
layer.alert('请先选择通道');return;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_transfer.php?act=balance_query',
dataType : 'json',
data : {type: type, channel: channel},
success : function(data) {
layer.close(ii);
if(data.code == 0){
if(data.msg){
layer.alert(data.msg);
}else{
layer.alert('账户可用余额:'+data.amount+'元');
}
}else{
if(data.msg.indexOf('插件方法不存在')>-1) data.msg = '该通道不支持查询账户余额';
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}
</script>
+179
View File
@@ -0,0 +1,179 @@
<?php
/**
* 批量转账页面
**/
include("../includes/common.php");
$type = isset($_GET['type'])?intval($_GET['type']):exit('no type');
if($type == 1){
$typename = '支付宝';
$default_channel = $conf['transfer_alipay'];
$app = 'alipay';
}elseif($type == 2){
$typename = '微信';
$default_channel = $conf['transfer_wxpay'];
$app = 'wxpay';
}elseif($type == 3){
$typename = 'QQ钱包';
$default_channel = $conf['transfer_qqpay'];
$app = 'qqpay';
}elseif($type == 4){
$typename = '银行卡';
$default_channel = $conf['transfer_bank'];
$app = 'bank';
}else{
sysmsg('参数错误');
}
$title=$typename.'批量转账';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<?php
if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])showmsg('支付密码错误,请返回重新进入该页面');
if(isset($_GET['batch'])){
$batch=$_GET['batch'];
$row=$DB->getRow("SELECT * from pre_batch where batch='$batch'");
if(!$row)showmsg('批次号不存在');
$list=$DB->getAll("SELECT * FROM pre_settle WHERE batch='{$batch}' and type={$type}");
$channel_select = $DB->getAll("SELECT id,name,plugin FROM pre_channel WHERE plugin IN (SELECT name FROM pre_plugin WHERE transtypes LIKE '%".$app."%')");
?>
<script>
var paytype = '<?php echo $type?>';
function SelectAll(chkAll) {
var items = $('.uins');
for (i = 0; i < items.length; i++) {
if (items[i].id.indexOf("uins") != -1) {
if (items[i].type == "checkbox") {
items[i].checked = chkAll.checked;
}
}
}
}
function Transfer(){
var url="ajax_settle.php?act=transfer";
$("input[name=uins]:checked:first").each(function(){
var checkself=$(this);
var id=checkself.val();
var statusself=$('#id'+id);
var channel = $("select[name='channel']").val();
statusself.html("<img src='../assets/img/load.gif' height=22>");
$.post(url, {type:paytype,channel:channel,id:id}, function(d) {
if(d.code==0){
transnum++;
var num = $('#donenum').text();
num=parseInt(num);
num++;
$('#donenum').text(num);
if(d.ret==1){
statusself.html('<font color="green">成功</font>');
}else if(d.ret==2){
statusself.html('<font color="green">已完成</font>');
}else{
statusself.html('<font color="red">失败</font>');
}
$('#res'+id).html('<font color="blue">'+d.result+'</font>');
checkself.attr('checked',false);
Transfer();
}else if(d.code==-1){
statusself.html('<font color="red">失败</font>');
alert(d.msg);
}else{
statusself.html('<font color="red">失败</font>');
}
});
return true;
});
}
var transnum = 0;
$(document).ready(function(){
var allmoney = 0;
var items = $('.money');
for (i = 0; i < items.length; i++) {
allmoney+=parseFloat(items[i].innerHTML);
}
$('#allmoney').html('总金额:'+allmoney.toFixed(2));
$('#startsend').click(function(){
var self=$(this);
if (self.attr("data-lock") === "true") return;
else self.attr("data-lock", "true");
self.html('正在转账中');
Transfer();
if(transnum<1) self.html('没有待转账的记录');
else self.html('转账处理完成');
self.attr("data-lock", "false");
});
$('.recheck').click(function(){
var self=$(this),
id=self.attr('uin');
var channel = $("select[name='channel']").val();
var url="ajax_settle.php?act=transfer";
self.html("<img src='../assets/img/load.gif' height=22>");
$.post(url, {type:paytype,channel:channel,id:id}, function(d) {
if(d.code==0){
if(d.ret==1){
self.html('<font color="green">成功</font>');
}else if(d.ret==2){
self.html('<font color="green">已完成</font>');
}else{
self.html('<font color="red">失败</font>');
}
$('#res'+id).html('<font color="blue">'+d.result+'</font>');
$('.uins[value='+id+']').attr('checked',false);
self.removeClass('nocheck');
}else if(d.code==-1){
self.html('<font color="red">失败</font>');
alert(d.msg);
}else{
self.html('<font color="red">失败</font>');
}
});
});
});
</script>
<div class="col-md-12 center-block" style="float: none;">
<div class="panel panel-default">
<div class="panel-heading" style="text-align:center">
<div class="panel-title"><p><h3 class="panel-title"><?php echo $typename?>批量转账</h3></p>
<div class="input-group"><div class="input-group-addon">通道选择</div>
<select name="channel" class="form-control">
<?php foreach($channel_select as $channel){echo '<option value="'.$channel['id'].'" '.($channel['id']==$default_channel?'selected':'').'>'.$channel['name'].''.($channel['id']==$default_channel?'(默认)':'').'</option>';} ?>
</select>
</div>
<div class="input-group" style="padding:8px 0;">
<div class="input-group-addon btn">全选<input type="checkbox" onclick="SelectAll(this)" /></div>
<div class="input-group-addon btn" id="startsend">点此开始转账</div>
<div class="input-group-addon btn"><span id="allmoney">总金额</span></div>
</div>
<div id="result"></div>
</div>
</div>
</div>
<div class="panel panel-primary">
<table class="table table-bordered table-condensed">
<tbody>
<tr>
<td align="center"><span style="color:silver;"><b>ID</b></span></td>
<td align="center"><span style="color:silver;"><b>商户ID</b></span></td>
<td align="center"><span style="color:silver;"><b>结算账号</b></span></td>
<td align="center"><span style="color:silver;"><b>结算姓名</b></span></td>
<td align="center"><span style="color:silver;"><b>金额</b></span></td>
<td align="center"><span style="color:silver;"><b>操作</b></span></td>
</tr>
<?php
echo '<tr><td colspan="6" align="center">总共<span id="hyall">'.count($list).'<span>个记录,已经处理<span id="donenum">0</span>个记录!</td></tr>';
foreach($list as $row) {
echo '<tr><td uin="'.$row['id'].'"><input name="uins" type="checkbox" id="uins" class="uins" value="'.$row['id'].'" '.($row['transfer_status']!=1?'checked':null).'>'.$row['id'].'</td><td>'.$row['uid'].'</td><td>'.$row['account'].'</td><td>'.$row['username'].'</td><td class="money">'.$row['realmoney'].'</td><td id="id'.$row['id'].'" uin="'.$row['id'].'" class="nocheck recheck" align="center">'.($row['transfer_status']!=1?'<span class="btn btn-xs btn-block btn-primary">立即转账</span>':'<font color="green">已完成</font>').'</td></tr><tr><td><span style="color:silver;">结果</span></td><td colspan="5" id="res'.$row['id'].'"><font color="blue">'.($row['transfer_status']==1?'转账订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date']:$row['transfer_result']).'</font></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
</div>
<?php }?>
</div>
+441
View File
@@ -0,0 +1,441 @@
<?php
/**
* 商户列表
**/
include("../includes/common.php");
$title='商户列表';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
$select = '';
$rs = $DB->getAll("SELECT * FROM pre_group");
foreach($rs as $row){
$select .= '<option value="'.$row['gid'].'">'.$row['name'].'</option>';
}
unset($rs);
?>
<style>
#orderItem .orderTitle{word-break:keep-all;}
#orderItem .orderContent{word-break:break-all;}
</style>
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<div class="modal" id="modal-rmb">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">余额充值与扣除</h4>
</div>
<div class="modal-body">
<form id="form-rmb" onsubmit="return false;">
<input type="hidden" name="uid" value="">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon p-0">
<select name="do"
style="-webkit-border-radius: 0;height:20px;border: 0;outline: none !important;border-radius: 5px 0 0 5px;padding: 0 5px 0 5px;">
<option value="0">充值</option>
<option value="1">扣除</option>
</select>
</span>
<input type="number" class="form-control" name="rmb" placeholder="输入金额">
<span class="input-group-addon">元</span>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-info" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="recharge">确定</button>
</div>
</div>
</div>
</div>
<form onsubmit="return searchSubmit()" method="GET" class="form-inline" id="searchToolbar">
<input type="hidden" class="form-control" name="gid">
<input type="hidden" class="form-control" name="upid">
<div class="form-group">
<label>搜索</label>
<select name="column" class="form-control"><option value="uid">商户号</option><option value="key">密钥</option><option value="account">结算账号</option><option value="username">结算姓名</option><option value="url">域名</option><option value="qq">QQ</option><option value="phone">手机号码</option><option value="email">邮箱</option></select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="value" placeholder="搜索内容">
</div>
<div class="form-group">
<select name="dstatus" class="form-control"><option value="0">全部用户</option><option value="pay_2">待审核用户</option><option value="status_1">用户状态正常</option><option value="status_0">用户状态封禁</option><option value="pay_1">支付状态正常</option><option value="pay_0">支付状态关闭</option><option value="settle_1">结算状态正常</option><option value="settle_0">结算状态关闭</option></select>
</div>
<button type="submit" class="btn btn-primary">搜索</button>&nbsp;<a href="./uset.php?my=add" class="btn btn-success">添加商户</a>
<a href="javascript:searchClear()" class="btn btn-default" title="刷新用户列表"><i class="fa fa-refresh"></i></a>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
var pay_domain = '<?php echo ($conf['pay_domain_forbid']==1 || $conf['pay_domain_open']==1)?'true':'false';?>';
$(document).ready(function(){
updateToolbar();
const defaultPageSize = 30;
const pageNumber = typeof window.$_GET['pageNumber'] != 'undefined' ? parseInt(window.$_GET['pageNumber']) : 1;
const pageSize = typeof window.$_GET['pageSize'] != 'undefined' ? parseInt(window.$_GET['pageSize']) : defaultPageSize;
$("#listTable").bootstrapTable({
url: 'ajax_user.php?act=userList',
pageNumber: pageNumber,
pageSize: pageSize,
classes: 'table table-striped table-hover table-bordered',
columns: [
{
field: 'uid',
title: '商户号/用户组',
formatter: function(value, row, index) {
let groupname = row.groupname;
if(groupname!=null && groupname.length > 14) groupname = groupname.substring(0,14);
return '<b>'+value+'</b><br/><span onclick="editGroup('+value+','+row.gid+',\''+row.endtime+'\')" style="color:blue" title="到期时间:'+(row.endtime==null?'永久':row.endtime)+'">'+groupname+'</span>';
}
},
{
field: 'money',
title: '余额',
formatter: function(value, row, index) {
return '<b><a href="javascript:showRecharge('+row.uid+')">'+value+'</a></b>';
}
},
{
field: 'settle_id',
title: '结算账号/姓名',
formatter: function(value, row, index) {
return row.account ? '<span onclick="inputInfo('+row.uid+')" title="点击修改结算账号">'+(value==2?'<font color="green">WX:</font>':'')+(value==3?'<font color="green">QQ:</font>':'')+row.account+'<br/>'+row.username+'</span>' : '<span onclick="inputInfo('+row.uid+')" title="点击修改结算账号">未设置</span>';
}
},
{
field: 'qq',
title: '联系方式',
formatter: function(value, row, index) {
return (value ? 'QQ:'+(isMobile() ? '<a href="mqqwpa://im/chat?chat_type=wpa&version=1&src_type=web&web_src=oicqzone.com&uin='+value+'">'+value+'</a>' : '<a href="tencent://message/?uin='+value+'&amp;Site=qq&amp;Menu=yes">'+value+'</a>') : '')+'<br/>'+(row.phone?row.phone:row.email);
}
},
{
field: 'url',
title: '域名/添加时间',
formatter: function(value, row, index) {
return (value?value:'')+(pay_domain=='true'?' [<a href="./domain.php?uid='+row.uid+'" target="_blank" >域名</a>]':'')+'<br/>'+row.addtime;
}
},
{
field: 'status',
title: '状态',
formatter: function(value, row, index) {
let html = '';
if(value == '1'){
html += '<a href="javascript:setStatus('+row.uid+',\'user\',0)"><font color=green><i class="fa fa-check-circle"></i>正常</font></a>';
}else{
html += '<a href="javascript:setStatus('+row.uid+',\'user\',1)"><font color=red><i class="fa fa-times-circle"></i>封禁</font></a>';
}
html += '&nbsp;';
if(row.cert == '1'){
html += '<a href="javascript:showCert('+row.uid+')" title="查看实名认证信息"><font color=green><i class="fa fa-check-circle-o"></i>已实名</font></a>';
}else{
html += '<a href="javascript:showCert('+row.uid+')" title="查看实名认证信息"><font color=grey><i class="fa fa-times-circle"></i>未实名</font></a>';
}
html += '<br/>';
if(row.pay == '2'){
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',1)"><font color=orange><i class="fa fa-exclamation-circle"></i>未审核</font></a>';
}else if(row.pay == '1'){
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',0)"><font color=green><i class="fa fa-check-circle"></i>支付</font></a>';
}else{
html += '<a href="javascript:setStatus('+row.uid+',\'pay\',1)"><font color=red><i class="fa fa-times-circle"></i>支付</font></a>';
}
html += '&nbsp;';
if(row.settle == '1'){
html += '<a href="javascript:setStatus('+row.uid+',\'settle\',0)"><font color=green><i class="fa fa-check-circle"></i>结算</font></a>';
}else{
html += '<a href="javascript:setStatus('+row.uid+',\'settle\',1)"><font color=red><i class="fa fa-times-circle"></i>结算</font></a>';
}
return html;
}
},
{
field: '',
title: '操作',
formatter: function(value, row, index) {
return '<a href="./uset.php?my=edit&uid='+row.uid+'" class="btn btn-xs btn-info">编辑</a>&nbsp;<a href="./sso.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-success">登录</a>&nbsp;<a href="javascript:delUser('+row.uid+')" class="btn btn-xs btn-danger">删除</a><br/><a href="./order.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">订单</a>&nbsp;<a href="./slist.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">结算</a>&nbsp;<a href="./record.php?uid='+row.uid+'" target="_blank" class="btn btn-xs btn-default">明细</a>';
}
},
],
})
})
function showKey(uid,key){
var clipboard;
var confirmobj = layer.confirm(key+'<input type="hidden" id="copyContent" value="'+key+'"/>', {
title:'查看密钥',shadeClose:true,btn: ['复制','重置','关闭'], success: function(){
clipboard = new Clipboard('.layui-layer-btn0',{text: function() {return key;}});
clipboard.on('success', function (e) {
$(".layui-layer-btn0").text('复制成功')
});
clipboard.on('error', function (e) {
$(".layui-layer-btn0").text('复制失败')
});
}
,end: function(){
clipboard.destroy();
}
}, function(){
}, function(){
if(!confirm('确定要重置商户'+uid+'的密钥吗?')){
showKey(uid,key);return;
}
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=resetUser&uid='+uid,
dataType : 'json',
success : function(data) {
if(data.code == 0){
alert('重置密钥成功!');
showKey(uid,data.key);
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(uid,type,status) {
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=setUser',
data : {uid:uid, type:type, status:status},
dataType : 'json',
success : function(data) {
if(data.code == 0){
searchSubmit();
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function editGroup(uid, gid, endtime){
if(endtime == 'null') endtime = '';
var html = '<div class="modal-body"><form class="form" id="form-info">';
html += '<div class="form-group"><div class="input-group"><div class="input-group-addon">用户组</div><select class="form-control" id="gid"><?php echo $select?></select></div></div>';
html += '<div class="form-group"><div class="input-group"><div class="input-group-addon">有效期</div><select class="form-control" id="endtime_set"><option value="0">永久</option><option value="1">设置日期</option></select><input type="date" class="form-control" name="endtime" value="'+endtime+'" id="endtime_show"></div></div>';
html += '<div class="form-group"><button type="button" id="save" onclick="saveGroup('+uid+')" class="btn btn-primary btn-block">保存</button></div></form></div>';
layer.open({
type: 1,
shadeClose: true,
title: '修改用户组',
content: html,
success: function(){
$("#gid").val(gid);
$("#endtime_set").val(endtime==''?0:1);
$("#endtime_set").change(function(){
if($(this).val() == 1){
$("#endtime_show").show();
}else{
$("#endtime_show").hide();
}
});
$("#gid").change(function(){
if($(this).val() == 0){
$("#endtime_set").val(0);
$("#endtime_set").change();
}
});
$("#endtime_set").change();
}
});
}
function saveGroup(uid){
var ii = layer.load(2, {shade:[0.1,'#fff']});
var gid = $("#gid").val();
var endtime = $("#endtime_set").val() == '1' ? $("#endtime_show").val() : '';
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=setUserGroup',
data : {uid:uid, gid:gid, endtime:endtime},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
},function(){layer.closeAll();searchSubmit();});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function showRecharge(uid) {
$("input[name='uid']").val(uid);
$('#modal-rmb').modal('show');
}
function inputInfo(uid) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=user_settle_info&uid='+uid,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.open({
type: 1,
title: '修改数据',
skin: 'layui-layer-rim',
content: data.data,
success: function(){
$("#pay_type").val(data.pay_type);
}
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function saveInfo(uid) {
var pay_type=$("#pay_type").val();
var pay_account=$("#pay_account").val();
var pay_name=$("#pay_name").val();
if(pay_account=='' || pay_name==''){layer.alert('请确保每项不能为空!');return false;}
$('#save').val('Loading');
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : "POST",
url : "ajax_user.php?act=user_settle_save",
data : {uid:uid,pay_type:pay_type,pay_account:pay_account,pay_name:pay_name},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.closeAll();
layer.msg('保存成功!');
searchSubmit();
}else{
layer.alert(data.msg);
}
$('#save').val('保存');
}
});
}
function showCert(uid) {
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=user_cert&uid='+uid,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var item = '<table class="table table-condensed table-hover">';
if(data.data.certtype==1){
item += '<tr><td class="info">商户号</td><td colspan="5">'+uid+'</td></tr><tr><td class="info">认证类型</td><td colspan="5">企业认证</td></tr><tr><td class="info">认证方式</td><td colspan="5">'+data.data.certmethodname+'</td><tr><tr><td class="info">公司名称</td><td colspan="5">'+data.data.certcorpname+'</td><tr><td class="info">营业执照号码</td><td colspan="5">'+data.data.certcorpno+'</td><tr><td class="info">法人姓名</td><td colspan="5">'+data.data.certname+'</td></tr><tr><td class="info">法人身份证号</td><td colspan="5">'+data.data.certno+'</td></tr><tr><td class="info">认证时间</td><td colspan="5">'+data.data.certtime+'</td></tr>';
}else{
item += '<tr><td class="info">商户号</td><td colspan="5">'+uid+'</td></tr><tr><td class="info">认证类型</td><td colspan="5">个人认证</td></tr><tr><td class="info">认证方式</td><td colspan="5">'+data.data.certmethodname+'</td><tr><tr><td class="info">真实姓名</td><td colspan="5">'+data.data.certname+'</td></tr><tr><td class="info">身份证号</td><td colspan="5">'+data.data.certno+'</td></tr><tr><td class="info">认证时间</td><td colspan="5">'+data.data.certtime+'</td></tr>';
}
item += '</table>';
layer.open({
type: 1,
shadeClose: true,
title: '查看实名认证信息',
skin: 'layui-layer-rim',
content: item
});
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function delUser(uid) {
var confirmobj = layer.confirm('你确实要删除此商户吗?', {
btn: ['确定','取消'], icon:0
}, function(){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=delUser&uid='+uid,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.closeAll();
searchSubmit();
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
}, function(){
layer.close(confirmobj);
});
}
$(document).ready(function(){
$("#recharge").click(function(){
var uid=$("input[name='uid']").val();
var actdo=$("select[name='do']").val();
var rmb=$("input[name='rmb']").val();
if(rmb==''){layer.alert('请输入金额');return false;}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : "POST",
url : "ajax_user.php?act=recharge",
data : {uid:uid,actdo:actdo,rmb:rmb},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.msg('修改余额成功', {time:800});
$('#modal-rmb').modal('hide');
searchSubmit();
}else{
layer.alert(data.msg);
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
});
})
</script>
+876
View File
@@ -0,0 +1,876 @@
<?php
/**
* 商户信息
**/
include("../includes/common.php");
$title='商户信息';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<div class="container" style="padding-top:70px;">
<?php
$usergroup = [];
$select = '';
$rs = $DB->getAll("SELECT * FROM pre_group");
foreach($rs as $row){
$usergroup[$row['gid']] = $row['name'];
$select.='<option value="'.$row['gid'].'">'.$row['name'].'</option>';
}
unset($rs);
$settle_select = '';
if($conf['settle_alipay'])$settle_select.='<option value="1">支付宝</option>';
if($conf['settle_wxpay'])$settle_select.='<option value="2">微信</option>';
if($conf['settle_qqpay'])$settle_select.='<option value="3">QQ钱包</option>';
if($conf['settle_bank'])$settle_select.='<option value="4">银行卡</option>';
$my=isset($_GET['my'])?$_GET['my']:null;
if($my=='add')
{
?>
<div class="col-sm-12 col-md-10 col-lg-8 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">添加商户</h3></div>
<div class="panel-body">
<form method="POST" onsubmit="return addUser(this)">
<h4><font color="blue">基本信息</font></h4>
<div class="form-group">
<label>手机号(登录账号):</label><br>
<input type="text" class="form-control" name="phone" value="" placeholder="和邮箱不能同时为空">
</div>
<div class="form-group">
<label>邮箱(登录账号):</label><br>
<input type="text" class="form-control" name="email" value="" placeholder="和手机号不能同时为空">
</div>
<div class="form-group">
<label>登录密码:</label><br>
<input type="text" class="form-control" name="pwd" value="" placeholder="留空则只能使用密钥登录">
</div>
<div class="form-group">
<label>用户组:</label><br>
<select class="form-control" name="gid"><?php echo $select?></select>
</div>
<div class="form-group">
<label>QQ:</label><br>
<input type="text" class="form-control" name="qq" value="" placeholder="可留空">
</div>
<div class="form-group">
<label>网站域名:</label><br>
<input type="text" class="form-control" name="url" value="" placeholder="可留空">
</div>
<h4><font color="blue">结算信息</font></h4>
<div class="form-group">
<label>结算方式:</label><br><select class="form-control" name="settle_id"><?php echo $settle_select?></select>
</div>
<div class="form-group">
<label>结算账号:</label><br>
<input type="text" class="form-control" name="account" value="" placeholder="不使用平台代收可留空">
</div>
<div class="form-group">
<label>结算账号姓名:</label><br>
<input type="text" class="form-control" name="username" value="" placeholder="不使用平台代收可留空">
</div>
<h4><font color="blue">功能开关</font></h4>
<div class="form-group">
<label>手续费扣除模式:</label><br><select class="form-control" name="mode"><option value="0">余额扣费</option><option value="1">订单加费</option></select>
</div>
<div class="row">
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>商户状态:</label><br><select class="form-control" name="status"><option value="1">1_正常</option><option value="0">0_封禁</option><option value="2">2_未审核</option></select>
</div>
</div>
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>支付权限:</label><br><select class="form-control" name="pay"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
</div>
</div>
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>结算权限:</label><br><select class="form-control" name="settle"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
</div>
</div>
</div>
<input type="submit" class="btn btn-primary btn-block" value="确定添加"></form>
<br/><a href="./ulist.php">>>返回商户列表</a>
</div></div>
<?php }
elseif($my=='edit')
{
$uid=intval($_GET['uid']);
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$row)showmsg('该商户不存在',4);
$group=\lib\Channel::getGroup($row['gid']);
?>
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li align="center" class="active"><a href="#">基本信息</a></li>
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
</ul>
<form onsubmit="return editUser(this, <?php echo $uid?>)" method="POST">
<div class="row">
<div class="col-sm-12 col-md-6">
<h4><font color="blue">基本信息</font></h4>
<div class="form-group">
<label>手机号(登录账号):</label><br>
<input type="text" class="form-control" name="phone" value="<?php echo $row['phone']?>" placeholder="和邮箱不能同时为空">
</div>
<div class="form-group">
<label>邮箱(登录账号):</label><br>
<input type="text" class="form-control" name="email" value="<?php echo $row['email']?>" placeholder="和手机号不能同时为空">
</div>
<div class="form-group">
<label>商户余额:</label><br>
<input type="text" class="form-control" name="money" value="<?php echo $row['money']?>" required>
</div>
<div class="form-group">
<label>用户组:</label><br>
<select class="form-control" name="gid" default="<?php echo $row['gid']?>"><?php echo $select?></select>
</div>
<div class="form-group">
<label>QQ:</label><br>
<input type="text" class="form-control" name="qq" value="<?php echo $row['qq']?>" placeholder="可留空">
</div>
<div class="form-group">
<label>网站域名:</label><br>
<input type="text" class="form-control" name="url" value="<?php echo $row['url']?>" placeholder="可留空">
</div>
<div class="form-group">
<label>商品名称自定义:</label><br>
<input type="text" class="form-control" name="ordername" value="<?php echo $row['ordername']?>" placeholder="默认以系统设置里面的为准">
<font color="green">支持变量值:[name]原商品名称,[order]支付订单号,[outorder]商户订单号,[time]时间戳,[qq]当前商户的联系QQ</font>
</div>
<div class="form-group">
<label>商户保证金余额:</label><br>
<input type="text" class="form-control" name="deposit" value="<?php echo $row['deposit']?>" placeholder="开启商户保证金功能后使用">
</div>
<div class="form-group">
<label>预留余额:</label><br>
<input type="text" class="form-control" name="remain_money" value="<?php echo $row['remain_money']?>" placeholder="可设置预留部分商户余额不参与每日自动结算">
</div>
<h4><font color="blue">结算信息</font></h4>
<div class="form-group">
<label>结算方式:</label><br><select class="form-control" name="settle_id" default="<?php echo $row['settle_id']?>"><?php echo $settle_select?></select>
</div>
<div class="form-group">
<label>结算账号:</label><br>
<input type="text" class="form-control" name="account" value="<?php echo $row['account']?>" placeholder="不使用平台代收可留空">
</div>
<div class="form-group">
<label>结算账号姓名:</label><br>
<input type="text" class="form-control" name="username" value="<?php echo $row['username']?>" placeholder="不使用平台代收可留空">
</div>
</div>
<div class="col-sm-12 col-md-6">
<h4><font color="blue">实名信息</font></h4>
<div class="form-group">
<label>是否实名认证:</label><br><select class="form-control" name="cert" default="<?php echo $row['cert']?>"><option value="0">0_未实名</option><option value="1">1_已实名</option></select>
</div>
<div class="form-group">
<label>认证类型:</label><br><select class="form-control" name="certtype" default="<?php echo $row['certtype']?>"><option value="0">个人实名认证</option><option value="1">企业实名认证</option></select>
</div>
<div class="form-group">
<label>认证方式:</label><br><select class="form-control" name="certmethod" default="<?php echo $row['certmethod']?>"><option value="0">支付宝快捷认证</option><option value="1">微信快捷认证</option><option value="2">手机号三要素认证</option><option value="3">人工审核认证</option></select>
</div>
<div class="form-group">
<label>真实姓名:</label><br>
<input type="text" class="form-control" name="certname" value="<?php echo $row['certname']?>">
</div>
<div class="form-group">
<label>身份证号:</label><br>
<input type="text" class="form-control" name="certno" value="<?php echo $row['certno']?>" maxlength="18">
</div>
<div class="form-group">
<label>公司名称:</label><br>
<input type="text" class="form-control" name="certcorpname" value="<?php echo $row['certcorpname']?>">
</div>
<div class="form-group">
<label>营业执照号码:</label><br>
<input type="text" class="form-control" name="certcorpno" value="<?php echo $row['certcorpno']?>" maxlength="30">
</div>
<h4><font color="blue">功能开关</font></h4>
<div class="form-group">
<label>手续费扣除模式:</label><br><select class="form-control" name="mode" default="<?php echo $row['mode']?>"><option value="0">余额扣费</option><option value="1">订单加费</option></select>
</div>
<div class="form-group">
<label>聚合收款码:</label><br><select class="form-control" name="open_code" default="<?php echo $row['open_code']?>"><option value="0">缺省(与系统设置一致)</option><option value="1">开启</option><option value="2">关闭</option></select>
</div>
<div class="row">
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>商户状态:</label><br><select class="form-control" name="status" default="<?php echo $row['status']?>"><option value="1">1_正常</option><option value="0">0_封禁</option><option value="2">2_未审核</option></select>
</div>
</div>
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>支付权限:</label><br><select class="form-control" name="pay" default="<?php echo $row['pay']?>"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
</div>
</div>
<div class="col-md-4 col-sm-12">
<div class="form-group">
<label>结算权限:</label><br><select class="form-control" name="settle" default="<?php echo $row['settle']?>"><option value="1">1_开启</option><option value="0">0_关闭</option></select>
</div>
</div>
</div>
<div class="form-group">
<label>邀请方商户ID:</label><br>
<input type="text" class="form-control" name="upid" value="<?php echo $row['upid'] == 0 ? '' : $row['upid']?>" placeholder="用于邀请返现">
</div>
<h4><font color="blue">密码修改</font></h4>
<div class="form-group">
<label>重置登录密码:</label><br>
<input type="text" class="form-control" name="pwd" value="" placeholder="不重置密码请留空">
</div>
</div>
</div>
<input type="submit" class="btn btn-primary btn-block" value="确定修改"></form>
<br/><a href="./ulist.php">>>返回商户列表</a>
</div></div>
<script>
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
$(items[i]).val($(items[i]).attr("default")||0);
}
</script>
<?php
}
elseif($my=='api')
{
$uid=intval($_GET['uid']);
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$row)showmsg('该商户不存在',4);
$group=\lib\Channel::getGroup($row['gid']);
if(!$conf['apiurl'])$conf['apiurl'] = $siteurl;
?>
<div class="modal inmodal fade" id="myModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">关闭</span>
</button>
<h4 class="modal-title">商户私钥查看窗口</h4>
</div>
<div class="modal-body">
<div class="form-group"><font color="red"><i class="fa fa-info-circle"></i> 请及时复制保存商户私钥!当前窗口关闭后,无法再次查询商户私钥,本站也不会保存。如遗失商户私钥,可重新生成进行替换。</font></div>
<div class="form-group">
<label>商户私钥</label>
<textarea class="form-control" name="merchant_private_key" rows="5" readonly></textarea>
<center><a href="javascript:;" class="btn btn-default" data-clipboard-text="" title="点击复制" id="merchant_private_key_copy"><i class="fa fa-copy"></i> 复制</a></center>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
</div>
</div>
</div>
</div>
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">商户密钥信息 UID:<?php echo $uid?></h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
<li align="center" class="active"><a href="#">密钥信息</a></li>
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
</ul>
<form class="form-horizontal">
<input type="hidden" name="uid" value="<?php echo $uid?>"/>
<div class="form-group">
<label class="col-sm-2 control-label">接口地址</label>
<div class="col-sm-9">
<div class="input-group"><input class="form-control" type="text" value="<?php echo $conf['apiurl']?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $conf['apiurl']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">商户ID</label>
<div class="col-sm-9">
<div class="input-group"><input class="form-control" type="text" value="<?php echo $uid?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $uid?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
</div>
</div>
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>V1接口(MD5签名方式):</h4></div></div>
<div class="form-group">
<label class="col-sm-2 control-label">商户MD5密钥</label>
<div class="col-sm-9">
<div class="input-group"><input class="form-control" type="text" value="<?php echo $row['key']?>" readonly><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $row['key']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-4"><a href="/doc_old.html" class="btn btn-sm btn-info" target="_blank">查看V1开发文档</a>&nbsp;&nbsp;<a href="javascript:resetKey()" class="btn btn-sm btn-danger">重置商户MD5密钥</a>
</div>
</div>
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>V2接口(RSA签名方式):</h4></div></div>
<div class="form-group">
<label class="col-sm-2 control-label">平台公钥</label>
<div class="col-sm-9">
<div class="input-group"><textarea class="form-control" name="platform_public_key" rows="3" readonly><?php echo $conf['public_key']?></textarea><div class="input-group-addon"><a href="javascript:;" class="copy-btn" data-clipboard-text="<?php echo $conf['public_key']?>" title="点击复制"><i class="fa fa-copy"></i></a></div></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">商户公钥</label>
<div class="col-sm-9">
<div class="input-group"><textarea class="form-control" name="merchant_public_key" rows="3" readonly><?php echo $row['publickey']?></textarea><div class="input-group-addon"><a href="javascript:;" class="copy-btn" title="点击复制" onclick="alert('请仔细分清各种密钥区别,只需要复制平台公钥和商户私钥即可!如商户私钥遗失请重新生成。')"><i class="fa fa-copy"></i></a></div></div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-4"><a href="/doc.html" class="btn btn-sm btn-info" target="_blank">查看V2开发文档</a>&nbsp;&nbsp;<?php if($row['publickey']){?><a href="javascript:createRsaPair()" class="btn btn-sm btn-danger">重置商户RSA密钥对</a><?php }else{?><a href="javascript:createRsaPair()" class="btn btn-sm btn-success">生成商户RSA密钥对</a><?php }?>
</div>
</div>
<div class="line line-dashed b-b line-lg pull-in"></div>
<div class="form-group"><div class="col-sm-offset-2 col-sm-4"><h4>签名方式开关设置:</h4></div></div>
<div class="form-group">
<label class="col-sm-2 control-label">签名方式开关</label>
<div class="col-sm-9">
<select class="form-control" name="keytype" default="<?php echo $row['keytype']?>"><option value="0">开启MD5+RSA签名(兼容模式)</option><option value="1">仅开启RSA签名(安全模式)</option></select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-4"><input type="button" id="editKeyType" value="确定修改" class="btn btn-primary form-control"/><br/>
</div>
</div>
</form>
<br/><a href="./ulist.php">>>返回商户列表</a>
</div></div>
<script>
var items = $("select[default]");
for (i = 0; i < items.length; i++) {
$(items[i]).val($(items[i]).attr("default")||0);
}
</script>
<?php
}
elseif($my=='edit2')
{
$uid=intval($_GET['uid']);
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$row)showmsg('该商户不存在',4);
$group=\lib\Channel::getGroup($row['gid']);
$channelinfo = json_decode($row['channelinfo'], true);
?>
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
<li align="center" class="active"><a href="#">自定义接口信息</a></li>
<?php if($group['subchannel_type']){?><li align="center"><a href="./uset.php?my=subchannel&uid=<?php echo $uid?>">自定义子通道</a></li><?php }?>
</ul>
<form onsubmit="return editUserChannelInfo(this, <?php echo $uid?>)" method="POST">
<?php
foreach(explode(',',$group['settings']) as $row){
$arr = explode(':', $row);
echo '<div class="form-group">
<label>'.$arr[1].':</label><br>
<input type="text" class="form-control" name="setting['.$arr[0].']" value="'.$channelinfo[$arr[0]].'" required>
</div>';
}
?>
<input type="submit" class="btn btn-primary btn-block" value="确定修改"></form>
<br/><a href="./ulist.php">>>返回商户列表</a>
</div></div>
<?php
}
elseif($my=='subchannel')
{
$uid=intval($_GET['uid']);
$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1");
if(!$row)showmsg('该商户不存在',4);
$group=\lib\Channel::getGroup($row['gid']);
$paytype = [];
$paytypes = [];
$type_select = '';
$rs = $DB->getAll("SELECT * FROM pre_type ORDER BY id ASC");
foreach($rs as $row){
$paytype[$row['id']] = $row['showname'];
$paytypes[$row['id']] = $row['name'];
if(in_array($row['name'], $group['subchannel_type'])){
$type_select .= '<option value="'.$row['id'].'">'.$row['showname'].'</option>';
}
}
unset($rs);
$list = $DB->getAll("SELECT A.*,B.type,B.name channelname FROM pre_subchannel A LEFT JOIN pre_channel B ON A.channel=B.id WHERE A.uid='$uid' ORDER BY A.id ASC");
?>
<style>td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:300px;}</style>
<div class="modal" id="modal-store" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content animated flipInX">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="modal-title">自定义子通道修改/添加</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="form-store">
<input type="hidden" name="action" id="action"/>
<input type="hidden" name="id" id="id"/>
<input type="hidden" name="uid" value="<?php echo $uid?>"/>
<div class="form-group">
<label class="col-sm-2 control-label">支付方式</label>
<div class="col-sm-10">
<select name="type" id="type" class="form-control" onchange="changeType()">
<option value="0">请选择支付方式</option><?php echo $type_select; ?>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">支付通道</label>
<div class="col-sm-10">
<select name="channel" id="channel" class="form-control">
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label no-padding-right">备注</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="name" placeholder="仅显示使用,不要与其他备注重复">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="store" onclick="save()">保存</button>
</div>
</div>
</div>
</div>
<div class="col-md-12 col-lg-10 center-block" style="float: none;">
<div class="panel panel-primary">
<div class="panel-heading"><h3 class="panel-title">修改商户信息 UID:<?php echo $uid?></h3></div>
<div class="panel-body">
<ul class="nav nav-tabs">
<li align="center"><a href="./uset.php?my=edit&uid=<?php echo $uid?>">基本信息</a></li>
<li align="center"><a href="./uset.php?my=api&uid=<?php echo $uid?>">密钥信息</a></li>
<?php if($group['settings']){?><li align="center"><a href="./uset.php?my=edit2&uid=<?php echo $uid?>">自定义接口信息</a></li><?php }?>
<li align="center" class="active"><a href="#">自定义子通道</a></li>
</ul>
<div class="panel panel-success">
<div class="panel-heading"><h3 class="panel-title">当前商户共有 <b><?php echo count($list);?></b> 个子通道&nbsp;
<span class="pull-right">
<a href="javascript:addframe()" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> 新增</a>
</span>
</h3></div>
<div class="table-responsive">
<table class="table table-striped">
<thead><tr><th>ID</th><th>支付方式</th><th>支付通道</th><th>子通道备注</th><th>自定义支付参数</th><th>状态</th><th>操作</th></tr></thead>
<tbody>
<?php
foreach($list as $res)
{
if(empty($res['info'])) $res['info'] = '点击设置';
echo '<tr><td><b>'.$res['id'].'</b></td><td><img src="/assets/icon/'.$paytypes[$res['type']].'.ico" width="16" onerror="this.style.display=\'none\'"> '.$paytype[$res['type']].'</td><td>'.$res['channel'].'_'.$res['channelname'].'</td><td>'.$res['name'].'</td><td><a href="javascript:editInfo('.$res['id'].')">'.$res['info'].'</a></td><td>'.($res['status']==1?'<a class="btn btn-xs btn-success" onclick="setStatus('.$res['id'].',0)">已开启</a>':'<a class="btn btn-xs btn-warning" onclick="setStatus('.$res['id'].',1)">已关闭</a>').'</td><td><a class="btn btn-xs btn-info" onclick="editframe('.$res['id'].')">编辑</a>&nbsp;<a class="btn btn-xs btn-danger" onclick="delItem('.$res['id'].')">删除</a>&nbsp;<a href="./order.php?subchannel='.$res['id'].'" target="_blank" class="btn btn-xs btn-default">订单</a>&nbsp;<a onclick="testpay('.$res['id'].','.$res['channel'].')" class="btn btn-xs btn-default">测试</a></td></tr>';
}
?>
</tbody>
</table>
</div>
</div>
<a href="./ulist.php">>>返回商户列表</a>
</div></div>
<?php } ?>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.js"></script>
<script src="<?php echo $cdnpublic?>clipboard.js/1.7.1/clipboard.min.js"></script>
<script>
$(document).ready(function(){
var clipboard = new Clipboard('.copy-btn');
clipboard.on('success', function (e) {
layer.msg('复制成功!', {icon: 1});
});
clipboard.on('error', function (e) {
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
});
var clipboard = new Clipboard('#merchant_private_key_copy', {
container: document.getElementById('myModal')
});
clipboard.on('success', function (e) {
layer.msg('复制成功!', {icon: 1});
});
clipboard.on('error', function (e) {
layer.msg('复制失败,请长按链接后手动复制', {icon: 2});
});
$("#editKeyType").click(function(){
var uid = $("input[name='uid']").val();
var keytype=$("select[name='keytype']").val();
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : "POST",
url : "ajax_user.php?act=edit_keytype",
data : {uid:uid, keytype:keytype},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 1){
layer.alert('修改成功!', {icon:1});
}else{
layer.alert(data.msg);
}
}
});
});
});
function resetKey(){
var uid = $("input[name='uid']").val();
var confirmobj = layer.confirm('是否确认重置该商户的MD5密钥?', {
btn: ['确定','取消']
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=resetKey',
data : {uid: uid},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.alert('重置密钥成功!', {icon:1}, function(){window.location.reload()});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function createRsaPair(){
var uid = $("input[name='uid']").val();
var confirmobj = layer.confirm('是否确定生成该商户的RSA密钥对?', {
btn: ['确定','取消']
}, function(){
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=createRsaPair',
data : {uid: uid},
dataType : 'json',
success : function(data) {
if(data.code == 0){
$("textarea[name='merchant_private_key']").val(data.private_key);
$("textarea[name='merchant_public_key']").val(data.public_key);
$("#merchant_private_key_copy").attr('data-clipboard-text', data.private_key);
layer.alert('商户RSA密钥对生成成功', {icon:1}, function(){
layer.closeAll();
$('#myModal').modal('show');
});
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function addUser(obj){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=addUser',
data : $(obj).serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('添加商户成功!商户ID'+data.uid+'<br/>密钥:'+data.key, {
icon: 1,
closeBtn: false
}, function(){
window.location.href = './ulist.php';
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
function editUser(obj, uid){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=editUser&uid='+uid,
data : $(obj).serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('修改商户信息成功!', {
icon: 1,
closeBtn: false
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
function editUserChannelInfo(obj, uid){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=editUserChannelInfo&uid='+uid,
data : $(obj).serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert('修改商户信息成功!', {
icon: 1,
closeBtn: false
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.close(ii);
layer.msg('服务器错误');
}
});
return false;
}
function changeType(channel){
channel = channel || null
var typeid = $("#type").val();
if(typeid==0)return;
$("#channel").empty();
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=getChannels&typeid='+typeid,
dataType : 'json',
success : function(data) {
if(data.code == 0){
$.each(data.data, function (i, res) {
$("#channel").append('<option value="'+res.id+'">'+res.name+'</option>');
})
if(channel!=null)$("#channel").val(channel);
}else{
layer.msg(data.msg, {icon:2, time:1500})
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}
function addframe(){
$("#modal-store").modal('show');
$("#modal-title").html("新增子通道");
$("#action").val("add");
$("#id").val('');
$("#type").val(0);
$("#channel").empty();
}
function editframe(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=getSubChannel&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
$("#modal-store").modal('show');
$("#modal-title").html("修改子通道");
$("#action").val("edit");
$("#id").val(data.data.id);
$("#name").val(data.data.name);
$("#type").val(data.data.type);
changeType(data.data.channel);
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function save(){
if($("#name").val()==''){
layer.alert('请确保各项不能为空!');return false;
}
if($("#type").val()==0){
layer.alert('请选择支付方式!');return false;
}
if($("#channel").val()==0 || $("#channel").val()==null){
layer.alert('请选择支付通道!');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=saveSubChannel',
data : $("#form-store").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
}
});
}
function delItem(id) {
var confirmobj = layer.confirm('你确实要删除此子通道吗?', {
btn: ['确定','取消'], icon:0
}, function(){
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=delSubChannel&id='+id,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.alert(data.msg, {icon: 2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}, function(){
layer.close(confirmobj);
});
}
function setStatus(id,status) {
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=setSubChannel&id='+id+'&status='+status,
dataType : 'json',
success : function(data) {
if(data.code == 0){
window.location.reload()
}else{
layer.msg(data.msg, {icon:2, time:1500});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function editInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'GET',
url : 'ajax_user.php?act=subChannelInfo&id='+id,
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
var area = [$(window).width() > 520 ? '520px' : '100%', ';max-height:100%'];
layer.open({
type: 1,
area: area,
title: '自定义支付参数',
skin: 'layui-layer-rim',
content: data.data
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function saveInfo(id){
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : 'POST',
url : 'ajax_user.php?act=saveSubChannelInfo&id='+id,
data : $("#form-info").serialize(),
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
layer.alert(data.msg,{
icon: 1,
closeBtn: false
}, function(){
window.location.reload()
});
}else{
layer.alert(data.msg, {icon: 2})
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
function testpay(subid, id) {
var ii = layer.open({
area: ['360px'],
title: '测试支付',
content: '<div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-shopping-cart"></span></span><input class="form-control" placeholder="订单名称" value="支付测试" name="test_name" type="text"></div></div><div class="form-group"><div class="input-group"><span class="input-group-addon"><span class="glyphicon glyphicon-yen"></span></span><input class="form-control" placeholder="订单金额" value="1" name="test_money" type="text"></div></div>',
yes: function(){
var name = $("input[name='test_name']").val();
var money = $("input[name='test_money']").val();
$.ajax({
type : 'POST',
url : 'ajax_pay.php?act=testpay',
data : {channel:id, subchannel:subid, name:name, money:money},
dataType : 'json',
success : function(data) {
if(data.code == 0){
layer.close(ii);
window.open(data.url);
}else{
layer.alert(data.msg, {icon:2});
}
},
error:function(data){
layer.msg('服务器错误');
return false;
}
});
}
});
}
</script>
+141
View File
@@ -0,0 +1,141 @@
<?php
/**
* 商户支付统计
**/
include("../includes/common.php");
$title='商户支付统计';
include './head.php';
if($islogin==1){}else exit("<script language='javascript'>window.location.href='./login.php';</script>");
?>
<style>
#orderItem .orderTitle{word-break:keep-all;}
#orderItem .orderContent{word-break:break-all;}
.dates{max-width: 120px;}
</style>
<link href="../assets/css/datepicker.css" rel="stylesheet">
<div class="container" style="padding-top:70px;">
<div class="col-md-12 center-block" style="float: none;">
<form method="GET" class="form-inline" id="searchToolbar">
<div class="input-group">
<label>查询日期:</label>
</div>
<div class="input-group input-daterange">
<input type="text" id="startday" name="startday" class="form-control dates" placeholder="开始日期" autocomplete="off" value="<?php echo date("Y-m-d")?>">
<span class="input-group-addon"><i class="fa fa-chevron-right"></i></span>
<input type="text" id="endday" name="endday" class="form-control dates" placeholder="结束日期" autocomplete="off" value="<?php echo date("Y-m-d")?>">
</div>
<div class="form-group">
<select name="method" class="form-control"><option value="type">以支付方式查看</option><option value="channel">以支付通道查看</option></select>
</div>
<div class="form-group">
<select name="type" class="form-control"><option value="0">订单金额统计</option><option value="1">支付金额统计</option><option value="2">分成金额统计</option><option value="3">手续费利润统计</option><option value="4">代付金额统计</option></select>
</div>
<button type="button" class="btn btn-primary" onclick="loadTable()">立即查询</button>
&nbsp;<a href="javascript:exportTable()" class="btn btn-success" id="exportbtn" style="display:none">导出</a>
</form>
<table id="listTable">
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>layer/3.1.1/layer.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
<script src="<?php echo $cdnpublic?>bootstrap-datepicker/1.9.0/locales/bootstrap-datepicker.zh-CN.min.js"></script>
<script src="../assets/js/bootstrap-table.min.js"></script>
<script src="../assets/js/bootstrap-table-page-jump-to.min.js"></script>
<script src="../assets/js/custom.js"></script>
<script>
function loadTable(){
var startday = $("input[name='startday']").val();
var endday = $("input[name='endday']").val();
var method = $("select[name='method']").val();
var type = $("select[name='type']").val();
if(startday == '' || endday == ''){
layer.alert('查询日期不能为空');return false;
}
var ii = layer.load(2, {shade:[0.1,'#fff']});
$.ajax({
type : "POST",
url : "ajax_user.php?act=userPayStat",
data : {startday:startday, endday:endday, method:method, type:type},
dataType : 'json',
success : function(data) {
layer.close(ii);
if(data.code == 0){
showTable(data);
$("#exportbtn").show();
}else{
layer.alert(data.msg, {icon: 2});
}
}
});
}
function showTable(data){
$('#listTable').bootstrapTable('destroy');
var columns = [];
$.each(data.columns, function(index, item){
if(index == 'uid'){
columns.push({
field: index,
title: item,
sortable: true,
formatter: function(value, row, index) {
if(value == 0){
return '管理员';
}else if(value>0){
return '<a href="./ulist.php?column=uid&value='+value+'" target="_blank">'+value+'</a>';
}else{
return value;
}
}
});
}else if(index == 'name'){
columns.push({
field: index,
title: item,
});
}else{
columns.push({
field: index,
title: item,
sortable: true,
formatter: function(value, row, index) {
if(value == null) return 0;
else return value.toFixed(2)
}
});
}
})
$("#listTable").bootstrapTable({
data: data.data,
pageSize: 20,
sidePagination: 'client',
classes: 'table table-striped table-hover table-bordered',
columns: columns,
})
return false;
}
function exportTable(){
var startday = $("input[name='startday']").val();
var endday = $("input[name='endday']").val();
var method = $("select[name='method']").val();
var type = $("select[name='type']").val();
if(startday == '' || endday == ''){
layer.alert('查询日期不能为空');return false;
}
window.location.href='./download.php?act=ustat&startday='+startday+'&endday='+endday+'&method='+method+'&type='+type;
}
$(document).ready(function(){
$('.input-datepicker, .input-daterange').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
clearBtn: true,
language: 'zh-CN'
});
loadTable()
})
</script>