Files
pay/admin/download.php
T
2025-11-28 10:08:12 +08:00

288 lines
9.2 KiB
PHP

<?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;
}