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

288 lines
9.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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