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
+114
View File
@@ -0,0 +1,114 @@
<?php
include("./inc.php");
$act=isset($_GET['act'])?daddslashes($_GET['act']):null;
if(!checkRefererHost())exit('{"code":403}');
@header('Content-Type: application/json; charset=UTF-8');
$uid=intval($_POST['uid']);
$money=daddslashes($_POST['money']);
$payer=daddslashes($_POST['payer']);
$paytype=$_POST['paytype'];
$direct=intval($_POST['direct']);
$param=!empty($_POST['remark'])?htmlspecialchars(daddslashes($_POST['remark'])):null;
if($_POST['token']!=$_SESSION['paypage_token'])showerrorjson('CSRF TOKEN ERROR');
if(!$uid || $uid!=$_SESSION['paypage_uid'])showerrorjson('收款方信息无效');
if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))showerrorjson('金额不合法');
if($conf['pay_maxmoney']>0 && $money>$conf['pay_maxmoney'])showerrorjson('最大支付金额是'.$conf['pay_maxmoney'].'元');
if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])showerrorjson('最小支付金额是'.$conf['pay_minmoney'].'元');
$blackip = $DB->find('blacklist', '*', ['type'=>1, 'content'=>$clientip], null, 1);
if($blackip)showerrorjson('系统异常无法完成付款');
if($payer){
$black = $DB->find('blacklist', '*', ['type'=>0, 'content'=>$payer], null, 1);
if($black)showerrorjson('系统异常无法完成付款');
}
if(!empty($paytype) && isset($_SESSION['paypage_typeid']) && isset($_SESSION['paypage_paymax']) && isset($_SESSION['paypage_paymin'])){
if(!empty($_SESSION['paypage_paymin']) && $_SESSION['paypage_paymin']>0 && $money<$_SESSION['paypage_paymin']){
showerrorjson('当前支付通道最大支付金额是'.$_SESSION['paypage_paymin'].'元');
}
if(!empty($_SESSION['paypage_paymax']) && $_SESSION['paypage_paymax']>0 && $money>$_SESSION['paypage_paymax']){
showerrorjson('当前支付通道最小支付金额是'.$_SESSION['paypage_paymax'].'元');
}
}
$userrow = $DB->getRow("SELECT `mode`,`ordername`,`channelinfo`,`money` FROM `pre_user` WHERE `uid`='{$uid}' LIMIT 1");
$trade_no=date("YmdHis").rand(11111,99999);
$return_url=$siteurl.'paypage/success.php?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`,`notify_url`,`return_url`,`param`,`domain`,`ip`,`buyer`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 3, NOW(), :name, :money, :notify_url, :return_url, :param, :domain, :clientip, :buyer, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$uid, ':name'=>'在线收款', ':money'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip, ':buyer'=>$payer, ':param'=>$param]))showerrorjson('创建订单失败,请返回重试!');
$_SESSION['paypage_trade_no'] = $trade_no;
$result=[];
$result['code']=0;
$result['msg']='succ';
$result['trade_no']=$trade_no;
$result['direct']=$direct;
if(!empty($paytype) && isset($_SESSION['paypage_typeid']) && isset($_SESSION['paypage_channel']) && isset($_SESSION['paypage_rate'])){
$typeid = intval($_SESSION['paypage_typeid']);
$channelid = intval($_SESSION['paypage_channel']);
$subchannelid = intval($_SESSION['paypage_subchannel']);
if($direct==1){
if($userrow['mode']==1){
$realmoney = round($money*(100+100-$_SESSION['paypage_rate'])/100,2);
$getmoney = $money;
}else{
$realmoney = $money;
$getmoney = round($money*$_SESSION['paypage_rate']/100,2);
}
if($_SESSION['paypage_mode']==1 && $realmoney-$getmoney>$userrow['money']){
showerrorjson('当前商户余额不足,无法完成支付,请商户登录用户中心充值余额');
}
if(!empty($conf['pay_payaddstart'])&&$conf['pay_payaddstart']!=0&&!empty($conf['pay_payaddmin'])&&$conf['pay_payaddmin']!=0&&!empty($conf['pay_payaddmax'])&&$conf['pay_payaddmax']!=0&&$realmoney>=$conf['pay_payaddstart'])$realmoney = round($realmoney + randomFloat(round($conf['pay_payaddmin'],2),round($conf['pay_payaddmax'],2)), 2);
$DB->update('order', ['type'=>$typeid, 'channel'=>$channelid, 'subchannel'=>$subchannelid, 'realmoney'=>$realmoney, 'getmoney'=>$getmoney], ['trade_no'=>$trade_no]);
$ordername = 'onlinepay'.time();
if(!empty($userrow['ordername']))$conf['ordername']=$userrow['ordername'];
$ordername = !empty($conf['ordername'])?ordername_replace($conf['ordername'],$ordername,$uid,$trade_no,$trade_no):$ordername;
$channel = $subchannelid > 0 ? \lib\Channel::getSub($subchannelid) : \lib\Channel::get($channelid, $userrow['channelinfo']);
if(!$channel)showerrorjson('支付通道不存在');
$channel['apptype'] = explode(',',$channel['apptype']);
$method = 'jsapi';
$order['trade_no'] = $trade_no;
$order['out_trade_no'] = $trade_no;
$order['uid'] = $uid;
$order['addtime'] = $date;
$order['name'] = '在线收款';
$order['realmoney'] = $realmoney;
$order['type'] = $typeid;
$order['channel'] = $channelid;
$order['typename'] = $paytype;
$order['profits'] = \lib\Payment::updateOrderProfits($order, $channel['plugin']);
$order['sub_openid'] = $payer;
try{
$paydata = \lib\Plugin::loadClass($channel['plugin'],'mapi',$trade_no);
}catch(Exception $e){
showerrorjson($e->getMessage());
}
if($paydata['type'] == 'jsapi'){
if(is_array($paydata['data'])) $paydata['data'] = json_encode($paydata['data']);
$result['paydata'] = $paydata['data'];
}elseif($paydata['type'] == 'error'){
showerrorjson($paydata['msg']);
}else{
$result['direct'] = 0;
$result['url'] = $paydata['url'];
}
}else{
$result['url'] = '/submit2.php?typeid='.$typeid.'&trade_no='.$trade_no;
}
}else{
$result['url'] = '/cashier.php?trade_no='.$trade_no;
}
exit(json_encode($result));
+77
View File
@@ -0,0 +1,77 @@
@charset "UTF-8";
html {font-size:62.5%;-webkit-font-smoothing:antialiased;}
body {text-align:center;font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans GB', 'Microsoft Yahei', , STHeiti, , sans-serif; -webkit-text-size-adjust:none; font-size:1.4rem;background:#f4f6f9;color:#000;-webkit-user-select:none;}
* {margin:0; padding:0;list-style:none; }
i, em, b {font-style:normal; font-weight:normal;}
input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc;}
img{width:100%;vertical-align:top;}
input,textarea,select,button{font-size:1.4rem;border:0; outline:none;font-family:"微软雅黑","Microsoft YaHei","Helvetica Neue",Helvetica,STHeiTi,sans-serif;}
*{-webkit-tap-highlight-color: rgba(0,0,0,0);}
.clear{ clear:both;}
.none{ display:none !important;}
.hide{ display:none;}
.height100{ height:100%;}
/*flex*/
html,body{height:100%;}
.container{height:100%;}
.layout-flex{display:-webkit-box;-webkit-box-orient:vertical;height:100%;}
.layout-flex .content{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch;position:relative;height:100%;}
.m-title{padding: 0.42rem 0.54rem 0.5rem;}
.m-title dl{overflow: hidden;}
.m-title dl dt{float: left; width: 0.66rem; height: 0.66rem; margin-right: 0.2rem;}
.m-title dl dt img{width: 100%; height: 100%; display: block;}
.m-title dl dd{float: left; font-size: 0.28rem; color: #161213; padding-top: 0.13rem;}
/*pop*/
.pop-wrap{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0.6);display:table;z-index:99999;}
.pop-outer{display:table-cell;vertical-align:middle;}
/*loading*/
.circle-box{width: 100%;height: 100%;position: fixed;left: 0;top: 0;}
.circle_animate{position: absolute; left: 50%; top: 43%; width: 9rem; height: 9rem; margin-left: -4.5rem; margin-top: -4.5rem; background: rgba(0, 10, 24, 0.6); border-radius: 8px; box-shadow: 0 0 4px rgba(0, 10, 24, 0.4);}
.circle_animate .circle{width: 3.6rem; height: 3.6rem; margin: 1.6rem auto 1rem; background: url(../images/loading.gif) no-repeat; background-size: 100% 100%; }
@-webkit-keyframes animate_circle{100%{-webkit-transform: rotate(360deg);}}
.circle_animate p{color: rgba(255, 255, 255, 0.7);}
/*pop*/
.pop_wrapper{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0.6);display:table;z-index:99999;}
.pop_outer{display:table-cell;vertical-align:middle;}
.pop_obtm{display:table-cell;vertical-align:bottom;}
.pop_pintip{margin: 0 2rem;}
.pop_cont{margin: 0 2rem;background-color: rgba(255,255,255,1);border-radius: 1rem;overflow: hidden;}
.pop_tip{font-size: 1.8rem;padding: 2rem 2.4rem 2rem 2.4rem;line-height: 2.8rem;word-break: break-all;border-bottom:1px solid #e5e5e5;color:#000}
.pop_wbtn{display: block;height: 4.4rem;line-height: 4.4rem;font-size: 1.7rem;color: #007FFF;
}
.pop_wbtn a{background:#0187e8}
.pop_wbtn:active{color: rgba(0,127,255,0.5);}
/*.b_top{padding:1.5rem 0.6rem;background:#0187e8;border-radius: 6px;color:#fff;margin:20px;.b_top{margin:20px 0}}*/
.b_top{padding:1.2rem 0.6rem;border-radius: 6px;color:#0076fe;font-size:2rem}
/*.pop_btn{background:#0187e8;border-radius: 6px;padding:1rem 0;color:#fff;display:block;width:85%;margin:0 auto}
.pop_btn{padding:1em;height:2.5em}*/
.pop_wrapper_white{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0);display:table;z-index:99999;}
.pop_intips{display: inline-block;border-radius: 8px;background-color: rgba(0,0,0,0.8);font-size: 1.5rem;color: #fff;padding: 1.5rem 2rem;word-break: break-all;}
@media (max-device-width: 320px){
html{font-size: 52%;}
}
+340
View File
@@ -0,0 +1,340 @@
@charset "utf-8";
/*date:2018-03-13*/
/* add====================== */
.mar10{margin:10px}
.marLeft5{margin-left:5px}
.marLeft10{margin-left:10px}
.mar20{margin:20px}
.fl{float:left}
.selTitle{font-size: 1.95rem;color:#666}
.fontGray{color:#8e8e8e}
.money{font-size:2rem;font-family: "Microsoft YaHei";}
.grayico_pay{display:inline-block;width: 3.34rem;height: 2.6rem;margin: 0 auto;overflow-y: hidden;}
.copyRight{color:#afafaf;font-size:1.5rem;margin-bottom:10px;font-family: Microsoft YaHei;}
/* 按钮====================== */
.btn{ width:100%; height:4.5rem; border-radius:6px; font-size:1.7rem;}
.btn:after{ border-radius:9px;}
.btn_blue{ background:#4182E2; color:#fff;}
.btn_blue:active{ background:#2167CD;}
.btn_blue.disable{ background: #ddd}
.btn_white{ background:#fff; color:#000;}
.btn_white:active{ background:#ddd;}
/* 1像素边框====================== */
.border{ position:relative;}
.border:after{ content:""; position:absolute; left:0; top:0; right:-100%; bottom:-100%; -webkit-transform:scale(0.5); -webkit-transform-origin:0 0; pointer-events:none;}
/*.b_all:after{ border:1px solid #4182e2;}
.b_all2:after{ border:1px solid #ddd;}*/
.b_btm:after{ border-bottom:1px solid #d5d5d5;}
/*.b_lft:after{ border-left:1px solid #ddd;}*/
.b_rgt:after{ border-right:1px solid #d5d5d5;}
/*.b_top:after{ border-top:1px solid #ddd;}*/
.b_rgt_btm:after{ border-right:1px solid #d5d5d5; border-bottom:1px solid #d5d5d5;}
/* 付款金额====================== */
.payMoney{text-align: left;color:#b7b7b7;font-size:1.8rem;margin-bottom:10px;}
/* 设置支付金额====================== */
.amount_title{padding: 0 1.5rem; font-size: 1.7rem;color: #333;line-height: 2.8rem;}
.set_amount{padding:1rem 1rem 0.5rem 1rem; margin: 2rem 1.5rem 0 1.5rem; background: #fff; position: relative;border-radius:6px;box-shadow: 0 0 1px #ebebeb;}
.set_amount .amount_hd{font-size: 1.5rem; color: #666; text-align: left;height: 2.4rem;line-height: 2.4rem;}
.set_amount .amount_bd{ height: 50px;line-height: 50px; margin: 0; text-align: left; }
.set_amount .amount_bd input{width: 100%; height: 100%; font-family: arial; font-size: 4rem;}
.set_amount .amount_bd .int_place{display: inline-block; height: 5rem; line-height: 5rem; vertical-align: middle; font-family: arial; font-size: 4rem;color: #999;}
/* .set_amount .amount_bd .input_simu{font-family: HelveticaNeue; font-size: 4.4rem;display: inline-block;color:#444;position:absolute;left:3.6rem;height:50px;bottom:10px;}
.set_amount .amount_bd .line_simu{margin-top:0.5rem;width: 1px; height: 3rem; background: #4182E2; vertical-align: middle; opacity: 0; -webkit-animation: animate_flash 1s ease-in-out infinite;}
*/
.set_amount .amount_bd .input_simu{font-family: HelveticaNeue; font-size: 34px; color:#444;height:50px; float:left;}
.set_amount .amount_bd .line_simu{margin-top:0.5rem;width: 1px; height: 40px; background: #4182E2; opacity: 0; -webkit-animation: animate_flash 1s ease-in-out infinite;float:left;}
.i_money{padding:0rem 0.5rem 0 0; font-size:24px;color: #444;font-family: arial;height:50px; float:left;}
@-webkit-keyframes animate_flash{
50%{opacity:1;}
}
.amount_bd .clearBtn{width: 3rem;height: 100%;position: absolute;right: 0;top:0;background: #fff;}
.set_amount .amount_bd .btn_clear{
position: absolute; right: 0.5rem; top: 1.5rem; width: 2rem; height: 2rem; background: url(../images/btn_clear.png) center center no-repeat; background-size: 1.4rem 1.4rem;
}
.error_tips{position: absolute; left: 50%; top: 18.2rem; width: 16rem; height: 3.2rem; line-height: 3.2rem; margin-left: -8rem; color: #fff; background: rgba(15,15,30,0.5); border-radius: 8px; display: none;}
.remark{padding: 0 1.6rem; color: #4081e1; text-align: right;height: 3.7rem;line-height: 3.7rem;}
.btn_row{padding: 0 2rem 1rem;}
/* .i_money{padding:0rem 0.5rem 0 0; font-size:23px;color: #444;font-family: arial;position:absolute;height:50px;bottom:5px;} */
.sico_pay_p{padding: 3rem 0 1.5rem 0;}
.sico_pay{display: block;width:40px;height:40px;background: url(../images/sellerLogo.png) no-repeat;background-size:40px 40px;margin: 0 auto;overflow-y: hidden;}
/*.keyboard{background: #fff;}*/
.key_table{width: 100%;border-collapse:collapse;border-spacing:1;border-spacing:0;list-style: none;padding: 0;margin: 0;}
.key_table td{width: 25%;height: 6.2rem;text-align: center;color:#444}
.key_table td.disable{background-color: #a0d7fe;}
.keyboard .key{line-height: 6.2rem; font-family:HelveticaNeue; font-size: 3.6rem;}
.keyboard .key.clear{background: url(../images/clear.png) center no-repeat; background-size:2.95rem 2.95rem;width: 2.95rem;height:2.95rem}
.keyboard .key:active{background-color: #D5D8DB;}
.keyboard{background: #fff;}
.keyboard .pay_btn{background-color: #0076fe;font-size: 2rem;color: #fff;line-height: 2.3rem;}
.pay_btn:active{background-color: #54b8ff;}
.pay_btn em{display: block;}
.pop_remark{background: rgba(255, 255, 255, 0.95); border-radius: 10px; margin: 8rem 4rem; overflow: hidden;}
.pop_remark .pop_title{padding: 1.8rem 1.5rem 0; font-size: 1.7rem;}
.pop_remark .input_wrap{margin: 1.6rem 1.5rem 2rem;}
.pop_remark .input_wrap input{width: 100%; height: 4rem; background: #fff; text-indent: 1rem;}
.pop_remark .btn_wrap{display: -webkit-box;}
.pop_remark .btn_wrap span{display: block; -webkit-box-flex: 1; width: 1px; height: 5rem; line-height: 5rem; font-size: 1.7rem; color: #007FFF;}
/* 支付确认====================== */
.pay_amount{font-size: 5rem; margin: 3.5rem 0 0.8rem;}
.remark2{font-size: 1.5rem; color: #666;}
.btn_row2{margin: 5rem 2rem 2rem;}
/* 支付成功====================== */
.bg_wt{background-color: #fff;margin-bottom: 1rem;}
.pay_stop{padding: 4rem 0 1rem 0;}
.pay_stop .ico_success{display: block;width: 6rem; height: 6rem; background: url(../images/icoSuccess.png) center no-repeat; background-size: 100% 100%;margin: 0 auto;}
.pay_suc1{font-size: 1.7rem; color: #4182e2;height: 2.6rem;line-height: 2.6rem;overflow: hidden;}
.pay_suc2{font-size: 3rem; color: #333;height: 3.9rem;line-height: 3.9rem;overflow: hidden;}
.pay_suc2 i{font-size: 1.5rem;}
.pay_suc3{font-size: 1.5rem;color: #999;height: 3.7rem;line-height: 3.7rem;overflow: hidden;}
.btn_p{padding: 2rem 0 2.4rem 0;}
.btn_wt{width: 12.5rem;color: #4182e2;background-color: #fff;}
.btn_wt:active{ background-color:#eee;}
/*discount*/
.discount{padding-bottom: 2rem;}
.discount-tit{
font-size: 2.5rem;
padding: 2.5rem 0;
color:#4182e2;
text-align: center;
}
.discount-box{
margin: 0 2rem;
background: #fff;
-wekkit-border-radius: 5px;
border-radius: 5px;
}
.discount-box img{
max-width: 18.15rem;
display: block;
margin: 0 auto;
padding: 3rem 0 1rem 0;
}
.discount-box .t1{
color:#999;
font-size: 1.4rem;
padding: 0.5rem 0;
}
.discount-box .t2{
color:#000;
font-size: 2.5rem;
}
.discount-box .t2 span{font-size: 4rem;}
.discount-box .t3{
margin: 2.5rem 1rem 0 1rem;
border-top: 1px dashed #ddd;
padding: 1rem 1rem 2.6rem 1rem;
line-height: 2.8rem;
color:#999;
}
.discount-box .clear{
overflow: hidden;
}
.discount-box .fl{
float: left;
}
.discount-box .fr{
float: right;
}
.discount-box .grey{
color:#666;
text-decoration: line-through;
}
.discount-box .orange{
color:#ff9742;
}
.discount-box .btn{
margin-top: 2.5rem;
-webkit-border-radius: 5px;
border-radius: 5px;
color:#fff;
font-size: 1.7rem;
line-height: 4.5rem;
background: #4182e2;
}
.discount-box .btn:active{
background:#2667c7;
}
.discount-box .disable,.discount-box .disable:active{
background:#ddd;
}
.tdVerTop{vertical-align:top;}
@media (max-width:340px){
.set_amount .amount_bd .input_simu {
font-family: HelveticaNeue;
font-size: 30px;
}
.keyboard .key {
line-height: 5rem;
font-size: 3rem;
}
.key_table td {
height: 5rem;
}
}
.set_remark{
display: flex;
padding: 1.5rem;
}
.have_been_set {
width: 100%;
text-align: justify;
margin-left: 3px;
}
.have_been_set>span {
font-size: 13px;
color: #b7b7b7;
}
.remark_operate{
margin-left: 15px;
display: contents;
}
.remark_operate>a{
text-decoration: none;
}
.remark_operate .remark_edit,
.remark_operate .remark_clear_away{
display: none;
}
.remark_operate.yes .remark_add{
display: none;
}
.remark_operate.yes .remark_edit,
.remark_operate.yes .remark_clear_away{
display: inline-block;
}
.remark_add,
.remark_edit,
.remark_clear_away{
color: #9da7b2;
font-size: 12px;
font-weight: 500;
margin-left: 2.5px;
padding: 3px 3px 3px 15px;
position: relative;
background: #cccccc45;
border-radius: 3px;
}
.remark_add::after{
content: '';
position: absolute;
background-image: url(data:image/png;base64,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);
background-size: 100%;
background-repeat: no-repeat;
left: 3.5px;
bottom: 6.5px;
width: 1rem;
height: 1rem;
}
.remark_edit::after {
content: '';
position: absolute;
background-image: url(data:image/png;base64,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);
background-size: 100%;
background-repeat: no-repeat;
left: 1px;
bottom: 4px;
width: 1.5rem;
height: 1.5rem;
}
.remark_clear_away::after{
content: '';
position: absolute;
background-image: url(data:image/png;base64,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);
background-size: 100%;
background-repeat: no-repeat;
left: 3px;
bottom: 6px;
width: 0.95rem;
height: 0.95rem;
}
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
height: 100%;
width: 100%;
background-color: rgba(0,0,0,0.4);
align-items: center;
justify-content: center;
}
.modal.show {
display: flex;
transition: opacity .5s linear;
opacity: 1;
}
.modal-content {
background-color: #fefefe;
margin: 50% auto;
border: 1px solid #888;
width: 80%;
border-radius: 7px;
}
.modal-header{
display: flex;
position: sticky;
justify-content: space-between;
align-items: center;
padding: 15px;
color: #626262;
border-bottom: 1px solid #ddd;
}
.modal-body {
padding: 20px;
}
.modal-header .close {
color: #aaa;
position: absolute;
right: 15px;
font-size: 24px;
font-weight: bold;
}
.modal-header .close:hover,
.modal-header .close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
.modal-body textarea {
width: 100%;
padding: 10px;
border-radius: 5px;
border: 1px solid #ddd;
resize: none;
}
.modal-body button {
width: 100%;
padding: 10px;
margin-top: 10px;
border-radius: 5px;
border: none;
background-color: #007bff;
color: #fff;
cursor: pointer;
}
.modal-body .remark-tip{
display: none;
color: red;
font-size: 12px;
margin-top: 5px;
}
+40
View File
@@ -0,0 +1,40 @@
<?php
if(!defined('IN_CRONLITE'))exit();
?><html class="weui-msg">
<head>
<meta charset="UTF-8">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>错误提示</title>
<link href="/assets/css/weui.min.css" rel="stylesheet">
<style>.page{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}</style>
</head>
<body>
<div class="container">
<div class="page">
<div class="weui-msg">
<div class="weui-msg__icon-area">
<i class="weui-icon-warn weui-icon_msg"></i>
</div>
<div class="weui-msg__text-area">
<h2 class="weui-msg__title"><?php echo $msg?></h2>
</div>
<div class="weui-msg__opr-area">
<p class="weui-btn-area">
<a href="javascript:;" class="weui-btn weui-btn_default" id="Close">关闭</a>
</p>
</div>
<div class="weui-msg__extra-area">
<div class="weui-footer"><p class="weui-footer__links"></p></div>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery/1.12.4/jquery.min.js"></script>
<script src="js/close.js"></script>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
</script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

+55
View File
@@ -0,0 +1,55 @@
<?php
include("../includes/common.php");
function showerror($msg){
global $cdnpublic;
include ROOT.'paypage/error.php';
exit;
}
function showerrorjson($msg){
$result = ['code'=>-1, 'msg'=>$msg];
exit(json_encode($result));
}
function check_paytype(){
$type=null;
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger/')!==false){
$type='wxpay';
}elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'AlipayClient/')!==false){
$type='alipay';
}elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')!==false){
$type='qqpay';
}
return $type;
}
function alipayOpenId($channel){
global $DB,$siteurl;
$channel = \lib\Channel::get($channel);
if(!$channel)showerror('支付通道不存在');
$alipay_config = require(PLUGIN_ROOT.$channel['plugin'].'/inc/config.php');
try{
[$user_type, $user_id] = alipay_oauth($alipay_config);
}catch(Exception $e){
showerror($e->getMessage());
}
return $user_id;
}
function weixinOpenId($channel){
global $DB;
$channel = \lib\Channel::get($channel);
if(!$channel)showerror('支付通道不存在');
$wxinfo = \lib\Channel::getWeixin($channel['appwxmp']);
if(!$wxinfo)showerror('支付通道绑定的微信公众号不存在');
try{
$tools = new \WeChatPay\JsApiTool($wxinfo['appid'], $wxinfo['appsecret']);
$openId = $tools->GetOpenid();
}catch(Exception $e){
showerror($e->getMessage());
}
return $openId;
}
+231
View File
@@ -0,0 +1,231 @@
<?php
$is_defend = true;
include("./inc.php");
if(isset($_GET['merchant'])){
$merchant=trim($_GET['merchant']);
$uid = authcode($merchant, 'DECODE', SYS_KEY);
if(!$uid || !is_numeric($uid))showerror('参数错误');
}elseif(isset($_SESSION['paypage_uid'])){
$uid = intval($_SESSION['paypage_uid']);
}else{
showerror('参数不完整');
}
$userrow = $DB->getRow("SELECT `uid`,`gid`,`money`,`mode`,`pay`,`cert`,`status`,`username`,`channelinfo`,`qq`,`codename`,`deposit` FROM `pre_user` WHERE `uid`='{$uid}' LIMIT 1");
if(!$userrow || $userrow['status']==0 || $userrow['pay']==0)showerror('当前商户不存在或已被封禁');
if($userrow['pay']==2 && $conf['user_review']==1)showerror('商户没通过审核,请联系官方客服进行审核');
$groupconfig = getGroupConfig($userrow['gid']);
$conf = array_merge($conf, $groupconfig);
if($conf['cert_force']==1 && $userrow['cert']==0){
showerror('当前商户未完成实名认证,无法收款');
}
if($conf['forceqq']==1 && empty($userrow['qq'])){
showerror('当前商户未填写联系QQ,无法收款');
}
if($conf['user_deposit']==1 && $conf['user_deposit_min'] > 0 && $conf['user_deposit_min'] > $userrow['deposit']){
showerror('商户保证金不足,请前往支付平台充值保证金后再发起支付');
}
$_SESSION['paypage_uid'] = $uid;
$direct = '0';
$checktype = check_paytype();
$type = isset($_GET['type'])?trim($_GET['type']):$checktype;
if($type){
if((isset($_GET['code']) || isset($_GET['auth_code'])) && $_SESSION['paypage_channel']){
$submitData = \lib\Channel::info($_SESSION['paypage_channel'], $userrow['gid']);
}else{
$submitData = \lib\Channel::submit($type, $uid, $userrow['gid']);
$_SESSION['paypage_subchannel'] = $submitData['subchannel'];
}
$_SESSION['paypage_typeid'] = $submitData['typeid'];
$_SESSION['paypage_channel'] = $submitData['channel'];
$_SESSION['paypage_rate'] = $submitData['rate'];
$_SESSION['paypage_paymax'] = $submitData['paymax'];
$_SESSION['paypage_paymin'] = $submitData['paymin'];
$_SESSION['paypage_mode'] = $submitData['mode'];
$apptype = explode(',',$submitData['apptype']);
if($checktype == 'alipay' && $type == 'alipay' && ($submitData['plugin']=='alipay' || $submitData['plugin']=='alipaysl' || $submitData['plugin']=='alipayd') && in_array('4',$apptype)){
$openId = alipayOpenId($submitData['channel']);
$direct = '1';
}elseif($checktype == 'wxpay' && $type == 'wxpay' && ($submitData['plugin']=='wxpay' || $submitData['plugin']=='wxpaysl' || $submitData['plugin']=='wxpayn' || $submitData['plugin']=='wxpaynp') && in_array('2',$apptype)){
$openId = weixinOpenId($submitData['channel']);
$direct = '1';
}elseif($checktype == 'qqpay' && $type == 'qqpay'&& $submitData['plugin']=='qqpay' && in_array('2',$apptype)){
$direct = '1';
}
}
$money = isset($_GET['money'])?$_GET['money']:null;
if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))$money = null;
$codename = !empty($userrow['codename'])?$userrow['codename']:$userrow['username'];
$csrf_token = md5(mt_rand(0,999).time());
$_SESSION['paypage_token'] = $csrf_token;
?>
<html lang="zh-cn">
<head>
<title>向商户付款</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<link rel="stylesheet" href="css/default.css">
<link rel="stylesheet" href="css/style.css?version=1001">
</head>
<body>
<div class="layout-flex wrap">
<!-- content start -->
<div class="content">
<div class="mar20">
<table>
<tbody>
<tr>
<td><span class="sico_pay" style="margin:5px 5px 10px 5px"></span></td>
<td class="selTitle"><?php echo $codename?></td>
</tr>
</tbody>
</table>
</div>
<form name="payForm" action="dopay" method="post">
<input type="hidden" name="uid" id="uid" value="<?php echo $uid?>">
<input type="hidden" name="token" id="token" value="<?php echo $csrf_token?>">
<input type="hidden" name="paytype" id="paytype" value="<?php echo $type?>">
<input type="hidden" name="direct" id="direct" value="<?php echo $direct?>">
<input type="hidden" name="payer" id="payer" value="<?php echo $openId?>">
<input type="hidden" name="trade_no" id="trade_no" value="">
<?php if($money){?><input type="hidden" name="txAmount" id="txAmount" value="<?php echo $money?>"><?php }?>
<div class="set_amount">
<div class="payMoney marLeft10">请输入付款金额</div>
<div class="amount_bd">
<i class="i_money marLeft10" style="">¥</i>
<span class="input_simu " id="amount"></span>
<!-- 模拟input -->
<em class="line_simu" id="line"></em>
<!-- 模拟闪烁的光标 -->
<div id="clearBtn" style="touch-action: pan-y; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></div>
<!-- 清除按钮 -->
</div>
</div>
<div class="set_remark">
<div class="have_been_set">
<span>备注:<span id="remark-content"></span></span>
<div class="remark_operate">
<a href="#" class="remark_add" id="openModal">添加备注</a>
<a href="#" class="remark_edit">编辑</a>
<a href="#" class="remark_clear_away">清除</a>
</div>
</div>
</div>
</form>
<div id="myModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<h5 class="title">添加备注</h5>
<span class="close" id="modal-close">&times;</span>
</div>
<div class="modal-body" id="remark-form">
<textarea name="remark" placeholder="请输入备注内容,30个字以内" rows="3"></textarea>
<button type="button">确认</button>
<div class="remark-tip">备注内容不能超过30个字</div>
</div>
</div>
</div>
</div>
<!-- content end -->
<div class="copyRight">由 <span style="font-weight:bold"><?php echo $conf['sitename']?></span> 提供服务支持</div>
<!-- 键盘 -->
<div class="keyboard">
<table class="key_table" id="keyboard" style="touch-action:pan-y; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
<tbody>
<tr>
<td class="key border b_rgt_btm" data-value="1">1</td>
<td class="key border b_rgt_btm" data-value="2">2</td>
<td class="key border b_rgt_btm" data-value="3">3</td>
<td class="key border b_btm clear" data-value="delete"></td>
</tr>
<tr>
<td class="key border b_rgt_btm" data-value="4">4</td>
<td class="key border b_rgt_btm" data-value="5">5</td>
<td class="key border b_rgt_btm" data-value="6">6</td>
<td class="pay_btn" rowspan="3" id="payBtn" style="touch-action: pan-y; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);"><em>确认</em>支付</td>
</tr>
<tr>
<td class="key border b_rgt_btm" data-value="7">7</td>
<td class="key border b_rgt_btm" data-value="8">8</td>
<td class="key border b_rgt_btm" data-value="9">9</td>
</tr>
<tr>
<td colspan="2" class="key border b_rgt" data-value="0">0</td>
<td class="key border b_rgt" data-value="dot">.</td>
</tr>
</tbody>
</table>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery/3.4.1/jquery.min.js"></script>
<script src="//open.mobile.qq.com/sdk/qqapi.js?_bid=152"></script>
<script src="js/hammer.js"></script>
<script src="js/common.js"></script>
<script src="js/pay.js?v=1004"></script>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
var tips = new Tips();
// 模态框操作
var modal = document.getElementById("myModal");
document.querySelector(".remark_add").onclick = function() {
modal.classList.add("show");
document.querySelector(".modal-header .title").innerText = "添加备注";
}
document.getElementById("modal-close").onclick = function() {
modal.classList.remove("show");
modal.addEventListener('transitionend', () => {
modal.style.display = "none";
}, { once: true });
}
// 添加备注
var submitBtn = document.querySelector("#remark-form button");
submitBtn.onclick = function() {
var remark = document.querySelector("#remark-form textarea").value;
if (remark.length > 30) {
document.querySelector(".remark-tip").style.display = "block";
document.querySelector("#remark-form textarea").style.borderColor = "red";
document.querySelector("#remark-form textarea").onfocus = function() {
document.querySelector("#remark-form textarea").style.borderColor = "#ddd";
document.querySelector(".remark-tip").style.display = "none";
}
return;
}
document.querySelector("#remark-content").innerText = remark;
modal.classList.remove("show");
modal.addEventListener('transitionend', () => {
modal.style.display = "none";
}, { once: true });
if(remark.length > 0){
document.querySelector(".remark_operate").classList.add("yes");
}
}
// 编辑备注
document.querySelector(".remark_edit").onclick = function() {
modal.classList.add("show");
document.querySelector(".modal-header .title").innerText = "编辑备注";
}
// 清除备注
document.querySelector(".remark_clear_away").onclick = function() {
document.querySelector("#remark-content").innerText = "";
document.querySelector("#remark-form textarea").value = "";
document.querySelector(".remark_operate").classList.remove("yes");
}
</script>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
if(navigator.userAgent.indexOf("AlipayClient/") > -1){
function Alipayready(callback) {
if (window.AlipayJSBridge) {
callback && callback();
} else {
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
Alipayready(function(){
$('#Close').click(function() {
AlipayJSBridge.call('popWindow');
});
})
}else if(navigator.userAgent.indexOf("MicroMessenger/") > -1){
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
} else {
jsApiCall();
}
function jsApiCall() {
$('#Close').click(function() {
WeixinJSBridge.call('closeWindow');
});
}
}else if(navigator.userAgent.indexOf("QQ/") > -1){
$('#Close').hide();
}else {
$('#Close').click(function() {
window.opener=null;window.close();
});
}
+122
View File
@@ -0,0 +1,122 @@
function getId(value){
return document.getElementById(value);
}
//ajax post
function Post(option){
var url = option.url || "";
var data = (function(){
var text = '';
if(option.data && option.data.constructor == Object){
var arr = [];
for(var key in option.data){
arr.push(key+'='+option.data[key]);
}
text = arr.join('&');
}
return text;
})();
var toJson = option.dataType == 'text' ? false : true;
var success = option.success || function(){};
var error = option.error || function(){};
var timeout = option.timeout || 30000;
var isTimeout = false;
var http = new XMLHttpRequest();
var timer = setTimeout(function(){
isTimeout = true;
http.abort();
error();
},timeout);
http.open("POST",url,true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.onreadystatechange = function(){
if(http.readyState != 4 || isTimeout){return;}
clearTimeout(timer);
if(http.status == 200){
var response = toJson ? JSON.parse(http.responseText) : http.responseText;
success(response);
}else{
error();
}
};
http.send(data);
}
//loading
function Loading(){
var obj = document.createElement('div');
var box = document.createElement('div');
var img = document.createElement('div');
var txt = document.createElement('p');
obj.className = 'circle-box none';
box.className = 'circle_animate';
img.className = 'circle';
box.appendChild(img);
box.appendChild(txt);
obj.appendChild(box);
if(script){
script.parentNode.insertBefore(obj,script);
}else{
document.body.appendChild(obj);
}
this.show = function(value){
txt.innerHTML = value || '加载中...';
obj.classList.remove('none');
};
this.hide = function(){
obj.classList.add('none');
txt.innerHTML = '';
};
}
//tips
function Tips(){
var obj = document.createElement('div');
var box = document.createElement('div');
var con = document.createElement('div');
var txt = document.createElement('div');
var p = document.createElement('p');
var btnBox = document.createElement('p');
var btn = document.createElement('span');
obj.className = 'pop_wrapper none';
box.className = 'pop_outer';
con.className = 'pop_cont';
txt.className = 'pop_tip';
p.className = 'border b_top';
btnBox.className = 'pop_wbtn';
btn.className='pop_btn'
btn.innerHTML = '我知道了';
p.appendChild(btn);
con.appendChild(txt);
con.appendChild(p);
box.appendChild(con);
obj.appendChild(box);
if(script){
script.parentNode.insertBefore(obj,script);
}else{
document.body.appendChild(obj);
}
function hideFun(){
obj.classList.add('none');
}
this.show = function(value,callback){
var fun = callback || hideFun;
txt.innerHTML = value || ' ';
p.onclick = callback || hideFun;
obj.classList.remove('none');
};
this.hide = hideFun;
}
document.body.addEventListener('touchstart',function(){},false);
var script = document.body.getElementsByTagName('script')[0];
var loading = new Loading();
File diff suppressed because one or more lines are too long
+228
View File
@@ -0,0 +1,228 @@
//insert
function keypress(e){
e.preventDefault();
var target = e.target;
var value = target.getAttribute('data-value');
var dot = valueCur.match(/\.\d{2,}$/);
if(!value || (value !== 'delete' && dot)){
return;
}
switch(value){
case '0' :
valueCur = valueCur === '0' ? valueCur : valueCur + value;
break;
case 'dot' :
valueCur = valueCur === '' ? valueCur : valueCur.indexOf('.') > -1 ? valueCur : valueCur + '.';
break;
case 'delete' :
valueCur = valueCur.slice(0,valueCur.length-1);
break;
default :
valueCur = valueCur === '0' ? value : valueCur + value;
}
if(!!valueCur && value !== 'delete' && value !== 'dot') {
var re = /^\d{1,9}(\.\d{0,2})?$/;
var limitLen = re.test(valueCur);
if (!limitLen) {
valueCur = valueCur.slice(0,valueCur.length-1);
return;
}
}
format();
}
//format
function format(){
var arr = valueCur.split('.');
var right = arr.length === 2 ? '.'+arr[1] : '';
var num = arr[0];
var left = '';
while(num.length > 3){
left = ',' + num.slice(-3) + left;
num = num.slice(0,num.length - 3);
}
left = num + left;
valueFormat = left+right;
valueFinal = valueCur === '' ? 0 : parseFloat(valueCur);
check();
}
//check
function check(){
amount.innerHTML = valueFormat;
if(valueFormat.length > 0){
clearBtn.classList.remove('none');
}else{
clearBtn.classList.add('none');
}
if(valueFinal === 0 || valueCur.match(/\.$/)){
payBtn.classList.add('disable');
}else{
payBtn.classList.remove('disable');
}
}
//clear
function clearFun(){
valueCur = '';
valueFormat = '';
valueFinal = 0;
amount.innerHTML = '';
clearBtn.classList.add('none');
payBtn.classList.add('disable');
}
//submit
function submitFun(){
if(!submitAble || payBtn.classList.contains('disable')){
return;
}
var txAmount = $("#txAmount").val();
if (!!txAmount && txAmount > 0) {
valueFinal = txAmount;
}
if(valueFinal == 0){
tips.show('请输入金额!');
return;
}
var amount = valueFinal;
var uid = $("#uid").val();
var paytype = $("#paytype").val();
var token = $("#token").val();
var direct = $("#direct").val();
var payer = $("#payer").val();
var remark = document.querySelector("#remark-content").innerText;
submitAble = false;
loading.show();
new Post({
url : 'ajax.php',
dataType : 'json',
data : {"money":amount,"payer":payer,"uid":uid,"paytype":paytype,"direct":direct,"remark":remark,"token":token},
error : function(){
loading.hide();
submitAble = true;
//update by yuwm 2018.03.14
tips.show('<span style="color:#959595;margin-top:5px">网络异常,请重新发起支付</span>');
},
success : function(data){
loading.hide();
if(data.code=="0"){//success
$("#trade_no").val(data.trade_no);
if (data.direct==1) {
if (paytype == 'wxpay') {
WxpayJsPay(data.paydata);
} else if (paytype == 'alipay') {
AlipayJsPay(data.paydata);
} else if (paytype == 'qqpay') {
QQJsPay(data.paydata);
}
}else{
window.location.href= data.url;
}
}else{
tips.show(data.msg);
}
submitAble = true;
}
});
}
//region WX JS
function WxpayJsPay(payStr){
var jsonPayStr = eval("("+payStr+")");
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
jsonPayStr,
function(res){
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
// 支付成功则关闭窗口
// tips.show("支付成功");
//WeixinJSBridge.call('closeWindow');
window.location.href="./success.php?trade_no="+$("#trade_no").val();
} else if(res.err_msg == "get_brand_wcpay_request:cancel") {
// tips.show("支付过程中用户取消");
} else if(res.err_msg == "get_brand_wcpay_request:fail") {
tips.show("支付失败");
}else{
tips.show("支付失败");
}
}
);
}
//endregion
//region ALI JS
function AlipayJsPay(payStr) {
var trade_no = $("#trade_no").val();
Alipayready(function(){
AlipayJSBridge.call("tradePay",{
tradeNO: payStr
}, function(result){
var msg = "";
if(result.resultCode == "9000"){
//AlipayJSBridge.call('closeWebview');
window.location.href="./success.php?trade_no="+$("#trade_no").val();
}else if(result.resultCode == "8000"){
msg = "正在处理中";
}else if(result.resultCode == "4000"){
msg = "订单支付失败";
}else if(result.resultCode == "6002"){
msg = "网络连接出错";
}
if (msg!="") {
tips.show(msg);
}
});
});
}
function Alipayready(callback) {
// 如果jsbridge已经注入则直接调用
if (window.AlipayJSBridge) {
callback && callback();
} else {
// 如果没有注入则监听注入的事件
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
//endregion
//region QQ JS
function QQJsPay(payStr){
var trade_no = $("#trade_no").val();
var jsonPayStr = eval("("+payStr+")");
mqq.tenpay.pay({
tokenId: jsonPayStr.tokenId,
appInfo: jsonPayStr.appInfo
}, function(result, resultCode){
if(resultCode == 0){ //支付成功
//mqq.ui.popBack();
window.location.href="./success.php?trade_no="+$("#trade_no").val();
}else{
tips.show("支付失败");
}
});
}
//endregion
var keyboard = getId('keyboard');
var clearBtn = getId('clearBtn');
var payBtn = getId('payBtn');
var valueCur = '';
var valueFormat = '';
var submitAble = true;
var valueFinal = 0;
new Hammer(keyboard).on('tap',keypress);
new Hammer(payBtn).on('tap',submitFun);
new Hammer(clearBtn).on('tap',clearFun);
var txAmount = $("#txAmount").val();
if (!!txAmount && txAmount > 0) {
submitFun()
}
+68
View File
@@ -0,0 +1,68 @@
<?php
$is_defend = true;
include("./inc.php");
@header('Content-Type: text/html; charset=UTF-8');
$trade_no=daddslashes($_GET['trade_no']);
$row=$DB->getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' limit 1");
if(!$row)showerror('订单号不存在');
if($row['status']!=1)showerror('订单未完成支付');
if(!isset($_SESSION['paypage_trade_no']) || $_SESSION['paypage_trade_no']!=$trade_no)showerror('订单校验失败');
$userrow=$DB->getRow("select codename,username from pre_user where uid='{$row['uid']}' limit 1");
$codename = !empty($userrow['codename'])?$userrow['codename']:$userrow['username'];
?>
<html class="weui-msg">
<head>
<meta charset="UTF-8">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>支付成功页面</title>
<link href="/assets/css/weui.min.css" rel="stylesheet">
<style>.page{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}</style>
</head>
<body>
<div class="container">
<div class="page">
<div class="weui-msg">
<div class="weui-msg__icon-area">
<i class="weui-icon-success weui-icon_msg"></i>
</div>
<div class="weui-msg__text-area">
<h2 class="weui-msg__title">支付成功</h2>
<h2 class="weui-msg__title"><span style="font-size:38px;font-weight:700;color:#f40;">¥<?php echo $row['money']?></span></h2>
<div class="weui-msg__custom-area">
<div class="weui-cells">
<div class="weui-cell weui-cell_example">
<span class="weui-cell__bd">收款方</span>
<span class="weui-cell__ft"><strong><?php echo $codename?></strong></span>
</div>
<div class="weui-cell weui-cell_example">
<span class="weui-cell__bd">完成时间</span>
<span class="weui-cell__ft"><?php echo $row['endtime']?></span>
</div>
<div class="weui-cell weui-cell_example">
<span class="weui-cell__bd">订单号</span>
<span class="weui-cell__ft"><?php echo $trade_no?></span>
</div>
</div>
</div>
</div>
<div class="weui-msg__opr-area">
<p class="weui-btn-area">
<a href="javascript:;" class="weui-btn weui-btn_default" id="Close">关闭</a>
</p>
</div>
<div class="weui-msg__extra-area">
<div class="weui-footer"><p class="weui-footer__links"></p><p class="weui-footer__text">Copyright © <?php echo date("Y")?> <?php echo $conf['sitename']?></p></div>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery/1.12.4/jquery.min.js"></script>
<script src="//open.mobile.qq.com/sdk/qqapi.js?_bid=152"></script>
<script src="js/close.js"></script>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
</script>
</body>
</html>
+92
View File
@@ -0,0 +1,92 @@
<?php
$is_defend = true;
include("./inc.php");
@header('Content-Type: text/html; charset=UTF-8');
$id = isset($_GET['id'])?trim($_GET['id']):exit('No id');
$type = isset($_GET['type'])?trim($_GET['type']):'transfer';
if($type == 'transfer'){
$row = $DB->find('transfer', '*', ['biz_no'=>$id]);
if(!$row) showerror('转账订单号不存在');
if($row['type'] != 'wxpay') showerror('转账类型错误');
if($row['status'] == 2) showerror('转账已失败,请重新提交!失败原因:'.$row['result']);
if(empty($row['ext'])) showerror('package_info不存在');
$channelid = $row['channel'];
$out_biz_no = $row['biz_no'];
$money = $row['money'];
$addtime = $row['addtime'];
$paytime = $row['paytime'];
$package_info = $row['ext'];
}elseif($type == 'settle'){
$row = $DB->find('settle', '*', ['id'=>$id]);
if(!$row) showerror('结算记录不存在');
if(empty($row['transfer_no']) || empty($row['transfer_channel'])) showerror('结算记录未发起转账');
if($row['transfer_status'] == 2) showerror('转账已失败,请重新提交!失败原因:'.$row['result']);
if(empty($row['transfer_ext'])) showerror('package_info不存在');
$channelid = $row['transfer_channel'];
$out_biz_no = $row['transfer_no'];
$money = $row['realmoney'];
$addtime = $row['transfer_date'];
$paytime = $row['endtime'];
$package_info = $row['transfer_ext'];
}else{
showerror('类型错误');
}
$channel = \lib\Channel::get($channelid);
if(!$channel) showerror('当前支付通道信息不存在');
$wxinfo = \lib\Channel::getWeixin($channel['appwxmp']);
if(!$wxinfo) showerror('支付通道绑定的微信公众号不存在');
$url = rtrim($siteurl, '/').$_SERVER['REQUEST_URI'];
if(!checkwechat()) showerror('请在微信客户端打开链接');
$result = \lib\Transfer::query('wxpay', $channel, $out_biz_no, '');
if($result['code'] == 0){
if($result['status'] == 2){
if($type == 'transfer' && $row['status'] == 0){
$resCount = $DB->update('transfer', ['status'=>2, 'result'=>$result['errmsg']], ['biz_no' => $out_biz_no]);
if($row['uid'] > 0 && $resCount > 0){
changeUserMoney($row['uid'], $row['costmoney'], true, '代付退回');
}
}elseif($type == 'settle' && $row['transfer_status'] == 1){
$DB->update('settle', ['transfer_status'=>2, 'transfer_result'=>$result['errmsg'], 'status'=>3, 'result'=>$result['errmsg']], ['id' => $row['id']]);
}
showerror('转账已失败,请重新提交!失败原因:'.$result['errmsg']);
}elseif($result['status'] == 1){
if($type == 'transfer' && $row['status'] == 0){
$paytimen = $result['paydate'] ?? 'NOW()';
$DB->update('transfer', ['status'=>1, 'paytime'=>$paytimen, 'result'=>''], ['biz_no' => $out_biz_no]);
}
if(empty($paytime)) $paytime = date("Y-m-d H:i:s");
include ROOT.'paypage/wxtrans_success.php';
exit;
}
}
if(isset($_GET['do']) && $_GET['do'] == 'success'){
$paytime = date("Y-m-d H:i:s");
include ROOT.'paypage/wxtrans_success.php';
exit;
}
try{
$wechat = new \lib\wechat\WechatAPI($wxinfo['id']);
$wxconfig = $wechat->getJsapiConfig($wxinfo['appid'], $url, ['requestMerchantTransfer']);
$wxconfig = json_encode($wxconfig);
}catch(Exception $e){
showerror($e->getMessage());
}
$wxtransfer = [
'mchId' => $channel['appmchid'],
'appId' => $wxinfo['appid'],
'package' => $package_info,
];
$wxtransfer = json_encode($wxtransfer);
include ROOT.'paypage/wxtrans_confirm.php';
exit;
+90
View File
@@ -0,0 +1,90 @@
<?php
if(!defined('IN_CRONLITE'))exit();
?><html class="weui-msg">
<head>
<meta charset="UTF-8">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>确认收款页面</title>
<link href="/assets/css/weui.min.css" rel="stylesheet">
<style>.page{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}</style>
</head>
<body>
<div class="container">
<div class="page">
<div class="weui-msg">
<div class="weui-msg__icon-area" style="margin-top:20px">
<i class="weui-icon-waiting weui-icon_msg"></i>
</div>
<div class="weui-msg__text-area">
<h2 class="weui-msg__title"><span style="font-size:18px;">待你收款</span></h2>
<p class="weui-msg__desc"><span style="font-size:34px;font-weight:700;line-height: 64px;">¥</span><span style="font-size:44px;font-weight:700;vertical-align:top;"><?php echo $money?></span></p>
<div class="weui-msg__custom-area">
<ul class="weui-form-preview__list">
<li role="option" class="weui-form-preview__item"><label class="weui-form-preview__label">转账时间</label><p class="weui-form-preview__value weui-cell__ft"><?php echo $addtime?></p></li>
</ul>
</div>
</div>
<div class="weui-msg__opr-area">
<p class="weui-btn-area">
<a href="javascript:;" class="weui-btn weui-btn_primary" id="Confirm" disabled>收款</a>
</p>
</div>
<div class="weui-msg__tips-area">
<p class="weui-msg__tips">1天内未确认,将退还给商家</p>
</div>
<div class="weui-msg__extra-area">
<div class="weui-footer"><p class="weui-footer__links"></p><p class="weui-footer__text">Copyright © <?php echo date("Y")?> <?php echo $conf['sitename']?></p></div>
</div>
</div>
<div role="alert" id="loadingToast">
<div class="weui-mask_transparent"></div>
<div class="weui-toast__wrp">
<div class="weui-toast">
<span class="weui-primary-loading weui-icon_toast">
<span class="weui-primary-loading__dot"></span>
</span>
<p class="weui-toast__content">正在加载</p>
</div>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery/1.12.4/jquery.min.js"></script>
<script src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
wx.config(<?php echo $wxconfig?>);
wx.ready(function () {
$('#loadingToast').fadeOut(100);
wx.checkJsApi({
jsApiList: ['requestMerchantTransfer'],
success: function (res) {
if (res.checkResult['requestMerchantTransfer']) {
jsApiCall();
} else {
alert('你的微信版本过低,请更新至最新版本。');
}
}
});
});
wx.error(function(res){
$('#loadingToast').fadeOut(100);
alert(res.errMsg);
});
function jsApiCall(){
$('#Confirm').removeAttr('disabled');
$('#Confirm').click(function() {
WeixinJSBridge.invoke('requestMerchantTransfer', <?php echo $wxtransfer?>,
function (res) {
if (res.err_msg === 'requestMerchantTransfer:ok') {
window.location.href="<?php echo $url?>&do=success";
}
}
);
});
}
</script>
</body>
</html>
+61
View File
@@ -0,0 +1,61 @@
<?php
if(!defined('IN_CRONLITE'))exit();
?><html class="weui-msg">
<head>
<meta charset="UTF-8">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>确认收款页面</title>
<link href="/assets/css/weui.min.css" rel="stylesheet">
<style>.page{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box}</style>
</head>
<body>
<div class="container">
<div class="page">
<div class="weui-msg">
<div class="weui-msg__icon-area" style="margin-top:20px">
<i class="weui-icon-success weui-icon_msg"></i>
</div>
<div class="weui-msg__text-area">
<h2 class="weui-msg__title"><span style="font-size:18px;">你已收款,资金已存入零钱</span></h2>
<p class="weui-msg__desc"><span style="font-size:34px;font-weight:700;line-height: 64px;">¥</span><span style="font-size:44px;font-weight:700;vertical-align:top;"><?php echo $money?></span></p>
<div class="weui-msg__custom-area">
<ul class="weui-form-preview__list">
<li role="option" class="weui-form-preview__item"><label class="weui-form-preview__label">转账时间</label><p class="weui-form-preview__value weui-cell__ft"><?php echo $addtime?></p></li>
<li role="option" class="weui-form-preview__item"><label class="weui-form-preview__label">收款时间</label><p class="weui-form-preview__value weui-cell__ft"><?php echo $paytime?></p></li>
</ul>
</div>
</div>
<div class="weui-msg__opr-area">
<p class="weui-btn-area">
<a href="javascript:;" class="weui-btn weui-btn_default" id="Close">关闭</a>
</p>
</div>
<div class="weui-msg__extra-area">
<div class="weui-footer"><p class="weui-footer__links"></p><p class="weui-footer__text">Copyright © <?php echo date("Y")?> <?php echo $conf['sitename']?></p></div>
</div>
</div>
</div>
</div>
<script src="<?php echo $cdnpublic?>jquery/1.12.4/jquery.min.js"></script>
<script>
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
},{ passive: false });
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
} else {
jsApiCall();
}
function jsApiCall() {
$('#Close').click(function() {
WeixinJSBridge.call('closeWindow');
});
}
</script>
</body>
</html>