diff --git a/Application/Callback/Controller/BaseController.class.php b/Application/Callback/Controller/BaseController.class.php index 65b29bbda..6aa04e2cf 100644 --- a/Application/Callback/Controller/BaseController.class.php +++ b/Application/Callback/Controller/BaseController.class.php @@ -4,6 +4,7 @@ namespace Callback\Controller; use Think\Controller; use Common\Api\GameApi; use Org\UcenterSDK\Ucservice; +use Think\Log; /** * 支付回调控制器 * @author 小纯洁 @@ -54,6 +55,7 @@ class BaseController extends Controller { $spend = M('Spend',"tab_"); $map['pay_order_number'] = $data['out_trade_no']; $d = $spend->where($map)->find(); + if(empty($d)){$this->record_logs("数据异常");return false;} // 支付金额判断 by zgc if ($d['pay_amount'] != $data['money']) { @@ -61,6 +63,63 @@ class BaseController extends Controller { } if($d['pay_status'] == 0){ + // 处理绑币平台币优先处理 + if ($d['deduction_amount'] > 0) { + $out_trade_no = "PF_" . date('Ymd') . date('His') . sp_random_string(4); + + $bind_balance = M('user_play', 'tab_')->where(array( + 'user_id' => $d['user_id'], + 'game_id' => $d['game_id'] + ))->getField('bind_balance'); + $request = $d; + $request['pay_order_number'] = $out_trade_no; + $request['price'] = $bind_balance; + $request['deduction_amount'] = 0; + $request['pay_way'] = -1; + $request['pay_status'] = 1; + + if ($d['deduction_amount'] > $bind_balance) + $bb = 0; + else + $bb = $bind_balance - $d['deduction_amount']; + + if ($bind_balance > 0) { + M('user_play', 'tab_')->where(array( + 'user_id' => $d['user_id'], + 'game_id' => $d['game_id'] + ))->save(array( + 'bind_balance' => $bb + )); + + $result = $this->add_spend($request); + $this->set_ratio($request['pay_order_number'], 2); // 游戏返利 + } + + if ($bb == 0) { + $mbalance = $d['deduction_amount'] - $bind_balance; + if ($mbalance > 0) { + $request['pay_way'] = 0; + $request['pay_order_number'] = $request['pay_order_number']."_1"; + $request['price'] = $mbalance; + $balance = M('user', 'tab_')->where(array( + 'id' => $d['user_id'], + ))->getField('balance'); + + if ($balance < $mbalance) { // 异常 + $this->record_logs($mbalance."平台币余额不足".$balance);return false; + } + M('user', 'tab_')->where(array( + 'id' => $d['user_id'] + ))->save(array( + 'balance' => $balance - $mbalance, + )); + $result = $this->add_spend($request); + $this->set_ratio($request['pay_order_number'], 2); // 游戏返利 + } + } + + } + $data_save['pay_status'] = 1; $data_save['order_number'] = $data['trade_no']; $map_s['pay_order_number'] = $data['out_trade_no']; @@ -464,4 +523,155 @@ class BaseController extends Controller { fwrite($myfile, $txt); fclose($myfile); } + + /** + *消费表添加数据 + */ + public function add_spend($data,$type=0){ + $spend = M("spend","tab_"); + $spend_data = $this->spend_param($data); + $ordercheck = $spend->where(array('pay_order_number'=>$spend_data["pay_order_number"]))->find(); + if($ordercheck) + { + if($type==1){ + redirect(U('Spend/notice',array('user_id'=>$ordercheck['user_id'],'game_id'=>$ordercheck['game_id'],'msg'=>'订单已经存在,请刷新充值页面重新下单!')));exit; + }else{ + $this->set_message(0,'fail',"订单已经存在,请刷新充值页面重新下单!"); + } + } + // if(!is_check_apply_promote($spend_data['game_id'],$spend_data['promote_id'])){ + // $spend_data['promote_id']=0; + // $spend_data['promote_account']="自然注册"; + // } + $result = $spend->add($spend_data); + return $result; + } + + /** + *消费记录表 参数 + */ + private function spend_param($param=array()){ + $user_entity = get_user_entity($param['user_id']); + $data_spned['user_id'] = $param["user_id"]; + $data_spned['user_account'] = $user_entity["account"]; + $data_spned['user_nickname'] = $user_entity["nickname"]; + $data_spned['game_id'] = $param["game_id"]; + $data_spned['game_appid'] = $param["game_appid"]; + $data_spned['game_name'] = get_game_name($param["game_id"]); + $data_spned['selle_ratio'] = get_game_selle_ratio($param["game_id"]); + $data_spned['server_id'] = $param["server_id"]; + $data_spned['server_name'] = $param["server_name"]; + $data_spned['game_player_name'] = $param["game_player_name"]; + $data_spned['promote_id'] = $user_entity["promote_id"]; + $data_spned['promote_account'] = $user_entity["promote_account"]; + $data_spned['order_number'] = $param["order_number"]; + $data_spned['pay_order_number'] = $param["pay_order_number"]; + $data_spned['props_name'] = $param["title"]; + $data_spned['cost'] = $param["price"];//原价 + $data_spned['deduction_amount'] = $param["deduction_amount"];// 抵扣价格 + $data_spned['discount_amount'] = $param["discount_amount"];// 折扣价格 + $data_spned['pay_time'] = NOW_TIME; + $data_spned['pay_status'] = $param["pay_status"]; + $data_spned['pay_game_status'] = 0; + $data_spned['extend'] = $param['extend']; + $data_spned['pay_way'] = $param["pay_way"]; + if($data_spned['pay_way'] != 7){ + $discount = $this->get_discount($param['game_id'],$user_entity['promote_id'],$param['user_id']); + $data_spned['pay_amount'] = $param["price"] * $discount['discount']/10;//实付金额 + $data_spned['discount_type'] = $discount['discount_type']; + }else{//苹果支付不计入折扣 + $data_spned['pay_amount'] = $param["price"]; + $data_spned['discount_type'] = 0; + } + if (isset($param['actual_amount']) && $param['actual_amount']) + $data_spned['pay_amount'] = $param['actual_amount']; // 实际支付价格 + $data_spned['spend_ip'] = $param["spend_ip"]; + $data_spned['sdk_version'] = $param["sdk_version"]; + if($param['small_user_id'] != $param['user_id']) { + $data_spned['small_id'] = $param["small_user_id"]; + $data_spned['small_account'] = get_user_account_by_id($param['small_user_id']); + } + return $data_spned; + } + + /** + * 获取用户折扣 + * @param $game_id 游戏ID + * @param $promote_id 渠道ID + * @param $user_id 用户ID + * @return mixed + */ + protected function get_discount($game_id,$promote_id,$user_id){ + //获取折扣 + $map['game_id'] = $game_id; + $map['promote_id'] =-1; + $map['status'] = 2; + $discount = M('Promote_welfare','tab_')->where($map)->find(); + if(null==$discount){ + $map['game_id'] = $game_id; + $map['promote_id'] = $promote_id == 0 ? 0 : -2; + $map['status'] = 2; + $discount = M('Promote_welfare','tab_')->where($map)->find(); + } + $discount = discount_data($discount); + if(empty($discount)){ + $res['discount'] = 10; + $res['discount_type'] = 0;//无折扣 + return $res; + } + + //判断用户是否为首冲 + $where['game_id'] = $game_id; + $where['user_id'] = $user_id; + $where['pay_status'] = 1; + $data = M('bind_spend','tab_')->where($where)->find(); + if(!empty($data) || !empty(M('spend','tab_')->where($where)->find())){ + $res['discount'] = $discount['continue_discount'];//续冲 + $res['discount_type'] = 2; + }else{ + $res['discount'] = $discount['first_discount'];//首冲 + $res['discount_type'] = 1; + } + return $res; + } + + /** + *游戏返利 + *$type 类型 1 非绑定平台币 2绑定平台币 + */ + /* public function set_ratio($data,$type = 1){ + $map['pay_order_number']=$data; + $map['pay_way'] = ($type==2) ? -1 : 0; // 判断支付类型 + $spend=M("Spend","tab_")->where($map)->find(); + $reb_map['game_id']=$spend['game_id']; + $time = time(); + $reb_map['starttime'] = ['lt',$time]; + $reb_map_str = "endtime > {$time} or endtime = 0"; + switch ($spend['promote_id']) { + case 0: + $reb_map['promote_id'] = array('in','0,-1'); + break; + default: + $reb_map['promote_id'] = array('in','1,-1'); + break; + } + + + //如果是绑币则判断是否开启绑币返利 + if($type == 2){$reb_map['bind_status'] = 1;} + $rebate=M("Rebate","tab_")->where($reb_map)->where($reb_map_str)->find();// + if (!empty($rebate)) { + if($rebate['money']>0 && $rebate['status']==1){ + if($spend['pay_amount']>=$rebate['money']){ + $this->compute($spend,$rebate); + }else{ + return false; + } + }else{ + $this->compute($spend,$rebate); + } + }else{ + return false; + } + } */ } \ No newline at end of file