test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

131 lines
6.8 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class PayResult {
/**
* Comment: 支付回调公共处理
* Author: zzw
* Date: 2019/9/27 15:23
* @param $params
*/
public static function main($params){
global $_W;
$log = pdo_get(PDO_NAME . 'paylogvfour' , array( 'tid' => $params['tid']));
$_W['uniacid'] = $params['uniacid'] ? $params['uniacid'] : $log['uniacid'];
$_W['acid'] = pdo_getcolumn('account_wechats' , array( 'uniacid' => $_W['uniacid'] ) , 'acid');
$_W['source'] = $log['source'];
$member = pdo_get(PDO_NAME."member",['id'=>$log['mid']],['openid']);
$className = $log['plugin'];
$ret = [
'weid' => $log['uniacid'] ,
'uniacid' => $log['uniacid'] ,
'result' => 'success' ,
'type' => $params['type'] ,
'tid' => $log['tid'] ,
'uniontid' => $log['uniacid'] ,
'user' => $member['openid'] ,
'fee' => $log['fee'] ,
'tag' => $log['tag'] ,
'is_usecard' => $log['is_usecard'] ,
'card_type' => $log['card_type'] ,
'card_fee' => $log['card_fee'] ,
'card_id' => $log['card_id'] ,
'blendcredit'=> $log['blendcredit']
];
Util::wl_log('rush_notify2' , PATH_DATA . "rush/data/" , $ret); //写入异步日志记录
//混合支付扣除余额
if($ret['blendcredit'] > 0){
Member::credit_update_credit2($log['mid'],-$ret['blendcredit'],'混合支付['.$log['tid'].']订单支付余额');
}
//当订单中存在开卡信息时的操作
$tid = $params['tid'];
#1、获取订单信息
if ($log['plugin'] == 'Rush') {
$orderInfo = pdo_get(PDO_NAME . "rush_order" , array( 'orderno' => $tid ) , array( 'mid','orderno','uniacid','aid','id','vip_card_id' ));
}else if($log['payfor'] == 'Halfcard'){
$orderInfo = pdo_get(PDO_NAME . "halfcard_record" , array( 'orderno' => $tid ) , array( 'mid','orderno','uniacid','aid'));
} else {
$orderInfo = pdo_get(PDO_NAME . "order" , array( 'orderno' => $tid ) , array( 'mid','orderno','uniacid','aid', 'id','vip_card_id'));
}
if(empty($member['aid'])){ //给会员添加aid 修改用户所属代理
pdo_update(PDO_NAME."member",array('aid' => $orderInfo['aid']),array('id' => $log['mid']));
}
if ($orderInfo['vip_card_id'] > 0 && !empty($orderInfo['vip_card_id'])) {
$halftype = pdo_get(PDO_NAME . 'halfcard_type' , array( 'id' => $orderInfo['vip_card_id'] ));
#2、获取用户信息
$userInfo = pdo_get(PDO_NAME . "member" , array( 'id' => $orderInfo['mid'] ) , array( 'nickname' , 'mobile' ));
$cardid = $orderInfo['vip_card_id'];
$username = $userInfo['nickname'];
$mobile = $userInfo['mobile'];
#3、到期时间计算
if ($cardid) {
$mdata = array( 'uniacid' => $_W['uniacid'] , 'mid' => $orderInfo['mid'] , 'id' => $cardid );
$vipInfo = Util::getSingelData('*' , PDO_NAME . "halfcardmember" , $mdata);
$lastviptime = $vipInfo['expiretime'];
if ($lastviptime && $lastviptime > time()) {
$limittime = $lastviptime + $halftype['days'] * 24 * 60 * 60;
} else {
$limittime = time() + $halftype['days'] * 24 * 60 * 60;
}
} else {
$limittime = time() + $halftype['days'] * 24 * 60 * 60;
}
#4、开卡信息记录 支付方式:1=余额;2=微信;3=支付宝;4=货到付款
$data = array(
'aid' => $orderInfo['aid'] ,
'uniacid' => $_W['uniacid'] ,
'mid' => $orderInfo['mid'] ,
'orderno' => createUniontid() ,
'status' => 1 ,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
'createtime' => TIMESTAMP ,
'price' => $halftype['price'] ,
'limittime' => $limittime ,
'typeid' => $halftype['id'] ,
'howlong' => $halftype['days'] ,
'todistributor' => $halftype['todistributor'] ,
'cardid' => $cardid ,
'username' => $username ,
'mobile' => $mobile
);
$data['paytype'] = $params['type'];
$data['paytime'] = time();
pdo_insert(PDO_NAME . 'halfcard_record' , $data);
$recordid = pdo_insertid();
//分销
if (p('distribution') && empty($halftype['isdistri'])) {
$_W['aid'] = $orderInfo['aid'];
$disorderid = Distribution::disCore($orderInfo['mid'] , $data['price'] , $halftype['onedismoney'] , $halftype['twodismoney'] , $halftype['threedismoney'] , $recordid , 'halfcard' , 1);
pdo_update(PDO_NAME . 'halfcard_record' , array( 'disorderid' => $disorderid ) , array( 'id' => $recordid ));
}
#5、成功开通会员卡
$halfcarddata = array(
'uniacid' => $_W['uniacid'] ,
'aid' => $data['aid'] ,
'mid' => $data['mid'] ,
'expiretime' => $data['limittime'] ,
'username' => $data['username'] ,
'levelid' => $halftype['levelid'] ,
'createtime' => time()
);
pdo_insert(PDO_NAME . 'halfcardmember' , $halfcarddata);
}
if ($params['type'] == 2 && $params['bank_type'] != 'OTHERS'){ //银行卡返现
$set = Setting::wlsetting_read('payback');
if($set['status'] > 0){
$rate = pdo_getcolumn(PDO_NAME.'payback_bank',array('uniacid'=>$_W['uniacid'],'bank'=>$params['bank_type']),'rate');
if($rate > 0){
$price = sprintf("%.2f",$ret['fee'] * $rate / 100);
if($price>0){
Payback::payCore(0,$orderInfo['mid'],-2,'sys',$price,$orderInfo['orderno'],$orderInfo['id'],$orderInfo['uniacid'],$orderInfo['aid'],0,$params['bank_type']);
}
}
}
}
//开卡操作的结束
pdo_update(PDO_NAME . 'paylogvfour' , [ 'status' => 1 , 'type' => $params['type'] ,'transaction_id'=>$params['transaction_id'],'pay_order_no'=>$params['pay_order_no']]
, ['tid' => $params['tid'] , 'uniacid' => $_W['uniacid'] ]);
$ret['from'] = 'notify';
$functionName = 'pay' . $log['payfor'] . 'Notify';
$className::$functionName($ret);
}
}