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

625 lines
24 KiB
PHTML

2 years ago
<?php
namespace Home\Controller;
use OT\DataDictionary;
use Think\Model;
use User\Api\PromoteApi;
use User\Api\UserApi;
use Org\WeixinSDK\Weixin;
use Org\JubaobarSDK\Jubaobar;
use Org\JtpaySDK\Jtpay;
use Org\HeepaySDK\HeepaySDK;
use Org\GoldPig\GoldPig;
/**
* 前台首页控制器
* 主要获取首页聚合数据
*/
class ChargeController extends BaseController {
public function checkpwd(){
$pid=session("promote_auth.pid");
$user=new UserApi();
$map['id']=$pid;
$pro=M("promote","tab_")->where($map)->find();
if($pro['second_pwd']===$this->think_ucenter_md5($_REQUEST['pwd'],UC_AUTH_KEY)){
$this->ajaxReturn(array("status"=>1,"msg"=>"成功"));
}
else{
$this->ajaxReturn(array("status"=>0,"msg"=>"二级密码错误"));
}
}
public function checkSecond(){
$pid=session("promote_auth.pid");
$map['id']=$pid;
$data=M('promote','tab_')->where($map)->find();
if(empty($data['second_pwd'])){
$this->ajaxReturn(array("status"=>0));
}
}
public function checkAccount(){
$game_id = $_POST['game_id'];
$user_account = $_POST['user_account'];
$map['game_id'] = $game_id;
$map['user_account'] = $user_account;
$map["promote_id"] = session("promote_auth.pid");
$data = M("UserPlay","tab_")->where($map)->find();
if(empty($data)){
$this->ajaxReturn(array("status"=>0));
}else{
$this->ajaxReturn(array("status"=>1));
}
}
public function think_ucenter_md5($str, $key = 'ThinkUCenter'){
return '' === $str ? '' : md5(sha1($str) . $key);
}
public function agent_pay($p=0)
{
if (IS_POST) {
$game_id = I('game_id');
$game_name = I('game_name');
if(empty($game_name)){
$map['game_id'] = $game_id;
$game_name = M('Apply','tab_')->field('game_name')->where($map)->find();
$game_name = $game_name['game_name'];
}
$account = I('user_account');
$amount = I('amount');
if(!is_numeric($amount)){
$res_msg = '充值金额不是数字';
$this->show_agent($p);
echo "<script>layer.msg('{$res_msg}',{time:1000})</script>;
return false;";
$this->redirect('agent_pay', array('status'=>1), 3, '');
}
if($amount<0) {
$res_msg = '充值金额不正确';
$this->show_agent($p);
echo "<script>layer.msg('{$res_msg}',{time:1000})</script>;
return false;";
$this->redirect('agent_pay', array('status'=>1), 3, '');
}
$amount = abs($amount);
//$amount = 0.01;
if(empty(I('pay_type'))) {
$res_msg = '请选择充值方式';
$this->show_agent($p);
echo "<script>layer.msg('{$res_msg}',{time:1000})</script>;
return false;";
$this->redirect('agent_pay', array('status'=>1), 3, '');
}
$game_appid = $_POST['game_appid'];
$map_pw['status'] = 1;
$map_pw['game_id'] = $game_id;
$map_pw['promote_id'] = PID;
$map_pw['recharge_status'] = 1;
$discount_data = D('PromoteWelfare')->field("promote_discount,game_discount")->where($map_pw)->find();
//如果推广折扣不存在就查找找游戏统一折扣
if(empty($discount_data)){
$discount_data['promote_discount'] = M('Game','tab_')->where('id='.$game_id)->getField('discount');
}
$discount = empty($discount_data['promote_discount'])?10:$discount_data['promote_discount'];
$real_amount = $discount==0?$amount :$amount* $discount / 10;//计算折扣后的价格
//$real_amount = 0.01;
$promote = M('Promote', 'tab_')->where(array('id' => PID))->find();
$order_no = "AG_" . date('Ymd') . date('His') . sp_random_string(4);
$create['zhekou'] = $discount;
$create['pay_order_number'] = $order_no;
$create['game_id'] = $game_id;
$create['game_appid'] = $game_appid;
$create['game_name'] = $game_name;
$create['amount'] = $amount;
$create['real_amount'] = $real_amount;
$user = get_user_entity($account, true);
//页面上通过表单选择在线支付类型支付宝为alipay 财付通为tenpay
$vo = new \Think\Pay\PayVo();
$vo->setBody("会长代充")
->setFee($real_amount)//支付金额
->setTitle("平台币")
->setOrderNo($order_no)
->setSignType("MD5")
->setPayMethod("direct_dc")
->setTable("agent")
->setGameId($game_id)
->setGameName($game_name)
->setGameAppid($game_appid)
->setUserId($user['id'])
->setAccount($user['account'])
->setUserNickName($user['nickname'])
->setPromoteId(session("promote_auth.pid"))
->setPromoteName(session('promote_auth.account'))
->setMoney($amount)
->setParam($discount);
switch (I('pay_type')) {
case 'swiftpass':
//判断是否开启微信充值
if (pay_set_status('wei_xin') == 0 && pay_set_status('weixin') == 0) {
$this->error("网站未开启微信充值", '', 1);
exit();
}
if (get_wx_type() == 0) {
$weixn = new Weixin();
$is_pay = json_decode($weixn->weixin_pay("平台币充值", $order_no, $real_amount), true);
if ($is_pay['status'] === 1) {
$json_['out_trade_no'] = $order_no;
$json_['amount'] = $amount;
$json_['pay_money'] = $real_amount;
$json_['code_img_url'] = U('qrcode', array('level' => 3, 'size' => 4, 'url' => base64_encode(base64_encode($is_pay['url']))));
}
$create['pay_way'] = 2;
$this->add_agent($user, $create);
$this->show_agent($p);
echo "<script> img_qrcode(" . json_encode($json_) . ") </script>";
} else {
$vo->setService("pay.weixin.native")
->setPayWay(2);
$pay = new \Think\Pay('swiftpass', C('weixin'));
$all = $pay->buildRequestForm($vo);
$all['amount'] = $vo->getMoney();
$this->show_agent($p);
echo "<script> img_qrcode(" . json_encode($all) . ") </script>";
}
break;
case 'jft':
$sign=think_encrypt(md5($real_amount.$order_no));
$create['pay_way'] = 5;
file_put_contents("./Application/Home/OrderNo/".$order_no.'.txt',json_encode($create));
redirect(U('pay_way', array('type'=>'UnionPay','account' =>$user['account'],'pay_amount'=>$real_amount,'sign'=>$sign,'pay_order_number'=>$order_no)));
break;
case 'goldpig':
$sign=think_encrypt(md5($real_amount.$order_no));
$create['pay_way'] = 8;
file_put_contents("./Application/Home/OrderNo/".$order_no.'.txt',json_encode($create));
$this->add_agent($user, $create);
redirect(U('goldpig_pay',array('account' =>$user['account'],'pay_amount'=>$real_amount,'sign'=>$sign,'pay_order_number'=>$order_no)));
break;
case 'pingtaibi':
$model = new Model();
$model->startTrans();
$create['pay_way'] = 4;
$res = false;
if($real_amount > $promote['balance_coin']){
$res_msg = '余额不足';
}else{
//修改渠道平台币
$promote['balance_coin'] -= $real_amount;
$p_res = M('promote','tab_')->save($promote);
$this->add_agent($user, $create);
$res = $this->set_agent($create);//修改用户平台币
}
if($res && $p_res){
$model->commit();
$res_msg = empty($res_msg) ? '充值成功' : $res_msg;
}else{
$model->rollback();
}
$this->show_agent($p);
$url = U('Charge/agent_pay_list');
echo "<script>layer.msg('{$res_msg}');setTimeout(function(){window.location.href='{$url}'},1500);</script>";
break;
default:
//判断是否开启支付宝充值
if (pay_set_status('alipay') == 0) {
$this->error("网站未开启支付宝充值", '', 1);
exit();
}
$vo->setService("create_direct_pay_by_user")
->setPayWay(1);
$pay = new \Think\Pay('alipay', C('alipay'));
echo $pay->buildRequestForm($vo);
break;
}
} else {
$this->show_agent($p);
}
}
public function agent_pay_action() {
if (IS_POST) {
SafeFilter($_POST);
$game_id = I('game_id');
$game_name = I('game_name');
$p = I('p');
if(empty($game_name)){
$map['game_id'] = $game_id;
$game_name = M('Apply','tab_')->field('game_name')->where($map)->find();
$game_name = $game_name['game_name'];
}
$account = I('user_account');
$amount = I('amount');
if(!is_numeric($amount)){
$this->ajaxReturn(['status'=>0,'info'=>'充值金额不是数字','time'=>1000]);
}
if($amount <0){
$this->ajaxReturn(['status'=>0,'info'=>'充值金额错误','time'=>1000]);
}
//$amount = 0.01;
$game_appid = $_POST['game_appid'];
$map_pw['status'] = 1;
$map_pw['game_id'] = $game_id;
$map_pw['promote_id'] = PID;
$map_pw['recharge_status'] = 1;
$discount_data = D('PromoteWelfare')->field("promote_discount,game_discount")->where($map_pw)->find();
//如果推广折扣不存在就查找找游戏统一折扣
if(empty($discount_data)){
$discount_data['promote_discount'] = M('Game','tab_')->where('id='.$game_id)->getField('discount');
}
$discount = empty($discount_data['promote_discount'])?10:$discount_data['promote_discount'];
$real_amount = $discount==0?$amount :$amount* $discount / 10;//计算折扣后的价格
$promote = M('Promote', 'tab_')->where(array('id' => PID))->find();
$order_no = "AG_" . date('Ymd') . date('His') . sp_random_string(4);
$create['zhekou'] = $discount;
$create['pay_order_number'] = $order_no;
$create['game_id'] = $game_id;
$create['game_appid'] = $game_appid;
$create['game_name'] = $game_name;
$create['amount'] = $amount;
$create['real_amount'] = $real_amount;
$user = get_user_entity($account, true);
//页面上通过表单选择在线支付类型支付宝为alipay 财付通为tenpay
$vo = new \Think\Pay\PayVo();
$vo->setBody("会长代充")
->setFee($real_amount)//支付金额
->setTitle("平台币")
->setOrderNo($order_no)
->setSignType("MD5")
->setPayMethod("direct")
->setTable("agent")
->setGameId($game_id)
->setGameName($game_name)
->setGameAppid($game_appid)
->setUserId($user['id'])
->setAccount($user['account'])
->setUserNickName($user['nickname'])
->setPromoteId(session("promote_auth.pid"))
->setPromoteName(session('promote_auth.account'))
->setMoney($amount)
->setParam($discount);
switch (I('pay_type')) {
case 'swiftpass':
//判断是否开启微信充值
if (pay_set_status('wei_xin') == 0 && pay_set_status('weixin') == 0) {
$this->ajaxReturn(['status'=>0,'info'=>'网站未开启微信充值']);
exit();
}
if (get_wx_type() == 0) {
$weixn = new Weixin();
$is_pay = json_decode($weixn->weixin_pay("平台币充值", $order_no, $real_amount), true);
if ($is_pay['status'] === 1) {
$json_['out_trade_no'] = $order_no;
$json_['amount'] = $amount;
$json_['pay_money'] = $real_amount;
$json_['code_img_url'] = U('qrcode', array('level' => 3, 'size' => 4, 'url' => base64_encode(base64_encode($is_pay['url']))));
}
$create['pay_way'] = 2;
$this->add_agent($user, $create);
$data = $json_;
} else {
$vo->setService("pay.weixin.native")
->setPayWay(2);
$pay = new \Think\Pay('swiftpass', C('weixin'));
$all = $pay->buildRequestForm($vo);
$all['amount'] = $vo->getMoney();
$data = $all;
}
$this->ajaxReturn(['status'=>1,'info'=>'','data'=>$data]);
break;
default:
//判断是否开启支付宝充值
if (pay_set_status('alipay') == 0) {
$this->ajaxReturn(['status'=>0,'info'=>'网站未开启支付宝充值']);
exit();
}
$vo->setService("create_direct_pay_by_user")
->setPayWay(1);
$pay = new \Think\Pay('alipay', C('alipay'));
$url = $pay->buildRequestForm($vo);
$this->ajaxReturn(['status'=>1,'info'=>'','url'=>$url]);
break;
}
} else {
$this->ajaxReturn(['status'=>0,'info'=>'请求失败']);
}
}
/**
* 金猪支付
* @return [type] [description]
* @author cb <[email address]>
*/
public function goldpig_pay(){
if(IS_POST){
$msign=think_encrypt(md5($_POST['amount'].$_POST['pay_order_number']));
if($msign!==$_POST['sign']){
$this->error('验证失败',U('Recharge/pay'));exit;
}
if($_POST['amount']<=0){
$this->error('金额有误');
}
$user = get_user_entity($_POST['UserName'],true);
if (empty($user)) {
$this->error("账号不存在");
exit();
}
$url="./Application/Home/OrderNo/".$_POST['pay_order_number'].'.txt';
if(!file_exists($url) ){
$this->error('未知错误',U('Charge/agent_pay'));exit;
}
$goldpig=new GoldPig();
$url = $goldpig->GoldPig($user['account'],$_POST['amount'],$_POST["PayID"],$_POST["pay_order_number"],$_POST["ka_type"],$_POST["mobile"],$_POST["password"]);
if($url['status']==1){
redirect($url['msg']);
}else{
$this->error('失败',U('Charge/agent_pay'));
}
}else{
$this->display();
}
}
/**
*
*/
public function checkOrder($order_number){
$map['pay_order_number'] = $order_number;
$data = M('Agent','tab_')
->where($map)
->field('pay_status')
->find();
if ($data['pay_status'] == 1){
$this->success('支付成功');
}else{
$this->error('暂未支付');
}
}
//竣付通
public function pay_way(){
if(IS_POST){
$msign=think_encrypt(md5($_POST['pay_amount'].$_POST['pay_order_number']));
if($msign!==$_POST['sign']){
$this->error('验证失败',U('Recharge/pay'));exit;
}
#判断账号是否存在
$user = get_user_entity($_POST['account'], true);
$jtpay=new Jtpay();
#平台币记录数据
$data['pay_order_number'] = $_POST['pay_order_number'];
$data['user_id'] = $user['id'];
$data['user_account'] = $user['account'];
$data['user_nickname'] = $user['nickname'];
$data['promote_id'] = $user['promote_id'];
$data['promote_account'] = $user['promote_account'];
$data['fee'] = $_POST['pay_amount'];
$data['pay_way'] = 6;//竣付通
$data['pay_source'] = 1;
$url="./Application/Home/OrderNo/".$_POST['pay_order_number'].'.txt';
if(!file_exists($url) ){
$this->error('未知错误',U('Charge/agent_pay'));exit;
}
$create=json_decode(file_get_contents($url),true) ;
@unlink($url);
$this->add_agent($user, $create);
//$_POST['pay_amount']=0.01;
$returnurl = "http://".$_SERVER['HTTP_HOST']."/callback.php/Notify/jft_callback/model/Home";
switch ($_POST['type']) {
case 'UnionPay':
echo $jtpay->jt_pay($_POST['pay_order_number'],$_POST['pay_amount'],$_POST['account'],get_client_ip(),$_POST['p10_paychannelnum'],1,$url);
break;
default:
echo $jtpay->jt_pay($_POST['pay_order_number'],$_POST['pay_amount'],$_POST['account'],get_client_ip(),"",$_POST['p9_paymethod'],$returnurl);
break;
}
}else{
$this->assign('type',$_GET['type']);
$this->display();
}
}
public function UnionPay(){
$this->display();
}
public function show_agent($p){
$this->meta_title = "会长代充";
$pro = M('Promote', 'tab_')->where(array('id' => PID))->find();
$child = M('Promote','tab_')->field('account,balance_coin')->where(['parent_id'=>PID])->select();
$page = $p ? $p : 1; //默认显示第一页数据
$row = 10;
$count = count($child);
$arraypage = $page;
$size=$row;//每页显示的记录数
$pnum = ceil($count / $row); //总页数ceil()函数用于求大于数字的最小整数
//用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度)
$data = array_slice($child, ($arraypage-1)*$row, $row);
//分页
if($count > $row){
$page = new \Think\Page($count, $row);
$page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
$this->assign('_page', $page->show());
}
$this->assign("childData",$data);
$this->assign('pro', $pro);
$this->display();
}
public function agent_pay_list($p=0){
$map=array();
if($_REQUEST['user_account']=='%'){
$map['user_account']=array('like','%\\'.$_REQUEST['user_account'].'%');
unset($_REQUEST['user_account']);
}elseif($_REQUEST['user_account']==0){
$map['user_account']=array('like','%'.$_REQUEST['user_account'].'%');
unset($_REQUEST['user_account']);
}elseif(isset($_REQUEST['user_account'])&&trim($_REQUEST['user_account'])){
$map['user_account']=array('like','%'.$_REQUEST['user_account'].'%');
unset($_REQUEST['user_account']);
}
if($_REQUEST['game_id']>0){
$map['game_id']=$_REQUEST['game_id'];
}
$start_time = strtotime(I('time_start'));
$end_time = strtotime(I('time_end'));
if(!empty($start_time)&&!empty($end_time)){
$map['create_time'] = ['BETWEEN',[$start_time,$end_time+24*60*60-1]];
unset($_REQUEST['time_start']);unset($_REQUEST['time_end']);
}else if(!empty($start_time)){
$map['create_time'] = array('gt',$start_time);
}else if(!empty($end_time)){
$map['create_time'] = array('lt',$end_time+24*60*60-1);
}
$map['promote_id']=get_pid();
$total = M("agent","tab_")->where(array('pay_status'=>1))->where($map)->sum('amount');
$this->assign("total_amount",$total==null?0:$total);
$this->lists('agent',$p,$map);
}
/**
*添加代充记录
*/
private function add_agent($user,$data){
$agent = M("agent","tab_");
$agnet_data['order_number'] = "";
$agnet_data['pay_order_number'] = $data['pay_order_number'];
$agnet_data['game_id'] = $data['game_id'];
$agnet_data['game_appid'] = $data['game_appid'];
$agnet_data['game_name'] = $data['game_name'];
$agnet_data['promote_id'] = session('promote_auth.pid');
$agnet_data['promote_account'] = session('promote_auth.account');
$agnet_data['user_id'] = $user['id'];
$agnet_data['user_account'] = $user['account'];
$agnet_data['user_nickname'] = $user['nickname'];
$agnet_data['pay_type'] = 0;//代充 转移
$agnet_data['amount'] = $data['amount'];
$agnet_data['real_amount'] = $data['real_amount'];
$agnet_data['pay_status'] = 0;
$agnet_data['pay_way'] = $data['pay_way'];
$agnet_data['create_time'] = time();
$agnet_data['zhekou'] = $data['zhekou'];
$agent->create($agnet_data);
$result = $agent->add();
return $result;
}
/**
* @param int $level
* @param int $size
*/
public function qrcode($level=3,$size=4,$url=""){
Vendor('phpqrcode.phpqrcode');
$errorCorrectionLevel =intval($level) ;//容错级别
$matrixPointSize = intval($size);//生成图片大小
//生成二维码图片
ob_clean();
$object = new \QRcode();
echo $object->png(base64_decode(base64_decode($url)), false, $errorCorrectionLevel, $matrixPointSize, 2);
}
//获取折扣
public function get_discount($game_id){
$discount = D('PromoteWelfare')->get_discount($game_id);
$res['status'] = 1;
$res['discount'] = $discount;
$this->ajaxReturn($res);
}
protected function set_agent($data){
$agent = M("agent","tab_");
$map['pay_order_number'] = $data['pay_order_number'];
$d = $agent->where($map)->find();
if(empty($d)){return false;}
if($d['pay_status'] == 0){
$data_save['pay_status'] = 1;
$data_save['order_number'] = $data['order_number'];
$map_s['pay_order_number'] = $data['pay_order_number'];
$r = $agent->where($map_s)->save($data_save);
if($r!== false){
$user = M("user_play","tab_");
$map_play['user_id'] = $d['user_id'];
$map_play['game_id'] = $d['game_id'];
$user->where($map_play)->setInc("bind_balance",$d['amount']);
//$user->where("id=".$d['user_id'])->secInt("cumulative",$d['pay_amount']);
$pro_l=M('Promote','tab_')->where(array('id'=>$d['promote_id']))->setDec("pay_limit",$d['amount']);
}else{
$this->record_logs("修改数据失败");
}
return true;
}
else{
return true;
}
}
public function get_user_play() {
if(IS_POST) {
$data = get_user_by_game(PID,I('game_id',''));
$return=['status'=>1,'info'=>'','data'=>$data];
} else {
$return=['status'=>0,'info'=>'暂无用户数据'];
}
$this->ajaxReturn($return);
}
}