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
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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