window.location.href='./login.php';"); $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; }