where($where)->order($or)->paginate(6); $page = $res->render(); $data=$res->all(); foreach($data as $k=>$v){ $data[$k]['ads'] = db('payclickid')->field('adid,aidname,count(aidname) as count')->where('ldurl',$v['id'])->group('adid')->select(); } $res = $data; //公众号列表 $wechat_list = db('promotewechats')->field('name,nickname')->select(); //投手uid列表 $allots = db('member')->field('uid,username')->where(['group'=>9])->select(); //巨量域名 $domains = db('promote_domain')->select(); //充值项列表 $money_list = db('pay_setting')->field('price')->where('status',1)->select(); $this->assign('allots', $allots); $this->assign('money_list', $money_list); $this->assign('domains', $domains); $this->assign('wechat_list', $wechat_list); $this->assign('ishide', $ishide); $this->assign('res', $res); $this->assign('page', $page); $this->setMeta('回传配置'); return $this->fetch(); } //搜索页 public function searchfor(){ $data = input(''); $where = array(); if($data['domainName']!==''){ $where['domainName'] = $data['domainName']; } if($data['templateId']!==''){ $where['templateId'] = $data['templateId']; } if($data['novelId']!==''){ $where['novelId'] = $data['novelId']; } if($data['regratio']!==''){ $where['regratio'] = $data['regratio']; } if($data['payratio']!==''){ $where['payratio'] = $data['payratio']; } if($data['chapter']!==''){ $where['chapter'] = $data['chapter']; } if($data['remark']!==''){ $where['remark'] = $data['remark']; } if($data['content']!==''){ $where['content'] = $data['content']; } if($data['channel']!==''){ $where['channel'] = $data['channel']; } //公众号列表 $wechat_list = db('promotewechats')->field('name')->select(); $res=M('transfer')->where($where)->order('id desc')->paginate(5,false,['query' => request()->param(),]); $page = $res->render(); $this->assign('wechat_list', $wechat_list); $this->assign('res', $res); $this->assign('page', $page); $this->setMeta('回传配置'); return $this->fetch('index'); } //添加数据 public function add(){ $data = input('post.'); $isnovelId = db('novel')->where('id',$data['novelId'])->value('id'); if(empty($isnovelId)){ exit(json_encode(array('status'=>2,'reg'=>'小说不存在哦'))); } if(!$data['linkid']==0){ $islinkid = db('transfer')->where('linkid',$data['linkid'])->count(); if($islinkid>0){ exit(json_encode(array('status'=>2,'reg'=>'重复推广链接ID'))); } } $adminid = session('user_auth.uid'); $bigpicture = request()->file('bigpicture'); //top大图 if($bigpicture){ $info_top = $bigpicture->validate(['size'=>2048000,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info_top){ $bigpictureurl = '/public'.'/'.'uploads'.'/'.$info_top->getSaveName(); compressedImage(ROOT_PATH.$bigpictureurl, ROOT_PATH.$bigpictureurl, 40); }else{ exit(json_encode(array('status'=>2,'reg'=>'图片不能超过2mb'))); } } $wechats_info = db('promotewechats')->field('nickname,avatar,bottomimg')->where('name',$data['wechatId'])->find(); $arr = array( 'domainName'=>$data['domainName'], 'novelId'=>$data['novelId'], 'wechatId'=>$data['wechatId'], 'chapter'=>$data['chapter'], 'remark'=>$data['remark'], 'wxcopy'=>$data['wxcopy'], 'bigpicture'=>$bigpictureurl, 'buttonimg'=>$wechats_info['bottomimg'], 'nickname'=>$wechats_info['nickname'], 'avatar'=>$wechats_info['avatar'], 'addtime'=>time(), 'gsname'=>$data['gsname'], 'gid'=>$adminid, 'bookname'=>$data['bookname'], 'linkid'=>$data['linkid'], 'ybook'=>$data['ybook'], 'allot_uid'=>$data['allot_uid'], 'ad_name'=>$data['ad_name'], 'controlaccout_open'=>1, ); $res = M('transfer')->insert($arr); $linkid = db('transfer')->getLastInsID(); $pageurl = config('web_site_url').'/promotelink/index/'.$data['novelId'].'/'.$linkid; //把生成的落地页生成静态网页 $stream_opts = [ "ssl" => [ "verify_peer"=>false, "verify_peer_name"=>false, ] ]; $html = file_get_contents($pageurl,false,stream_context_create($stream_opts)); $pathdir = date('Y-m-d',time()); //目录 //$path = rand_string(6);//文件名 $testdir = "html/".$pathdir; if(!file_exists($testdir)){ mkdir($testdir,0755,true); //创建目录 } $filename = $testdir.'/'.rand_string(6).'.html'; //文件名 随机*/ $handle = fopen($filename,'a'); fwrite($handle,$html); $urls = $data['domainName'].'/'.$filename; db('transfer')->where('id',$linkid)->setField('pageurl',$urls); if($res){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } } //开启自动控户 public function controlaccoutopen(){ $d = input(''); if($d['t']==1){ // $controlaccout_time = db('transfer')->where('id',$d['id'])->value('controlaccout_time'); // if((time()-$controlaccout_time)<119){ // exit(json_encode(array('status'=>2,'msg'=>'操作频繁 请2分钟后在试'))); // } // $ip = "http://127.0.0.1:9517"; // $pushdata = array( // 'id'=>$d['id'] // ); // pushMessageToClient($ip,json_encode($pushdata)); db('transfer')->where('id',$d['id'])->update(['controlaccout_open'=>$d['t']]); exit(json_encode(array('status'=>1,'msg'=>'开启成功'))); }else{ db('transfer')->where('id',$d['id'])->update(['controlaccout_open'=>$d['t']]); exit(json_encode(array('status'=>1,'msg'=>'关闭成功'))); } } //删除 public function del(){ $id = input('id'); $pageurl = db('transfer')->field('pageurl,bigpicture')->where('id',$id)->find(); $htmlUrl = parseurl($pageurl['pageurl']); //删除该链接生成的html文件 if(file_exists($htmlUrl)){ @unlink($htmlUrl); } //删除大图 $pageurl['bigpicture'] = substr($pageurl['bigpicture'],1); if(file_exists($pageurl['bigpicture'])){ @unlink($pageurl['bigpicture']); } $res= M('transfer')->where('id',$id)->delete(); if($res){ return 1; }else{ return 0; } } //修改 public function up(){ $data = input('post.'); $cf = db('transfer')->where('linkid',$data['linkid'])->value('linkid'); if(!$cf==$data['linkid']){ if($cf){ exit(json_encode(array('status'=>2,'reg'=>'推广链接ID已在使用'))); } } // 每次切换比例 重置充值次数 $payratio = M('transfer')->where('id',$data['id'])->value('payratio'); if($payratio!=$data['payratio']){ M('transfer')->where('id',$data['id'])->update(['numberofpayments'=>0]); } $wechats_info = db('promotewechats')->field('nickname,avatar,bottomimg')->where('name',$data['wechatId'])->find(); $arr = array( 'novelId'=>$data['novelId'], 'regratio'=>$data['regratio'], 'payratio'=>$data['payratio'], 'wechatId'=>$data['wechatId'], 'nickname'=>$wechats_info['nickname'], 'avatar'=>$wechats_info['avatar'], 'buttonimg'=>$wechats_info['bottomimg'], 'chapter'=>$data['chapter'], 'remark'=>$data['remark'], 'wxcopy'=>$data['wxcopy'], 'bookname'=>$data['bookname'], 'linkid'=>$data['linkid'], 'ybook'=>$data['ybook'], 'allot_uid'=>$data['allot'], 'ad_name'=>$data['ad_name'] ); $res = M('transfer')->where('id',$data['id'])->update($arr); if($res){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'没有值修改'))); } } // 重新生成H5落地页 public function rebirthhtml(){ $id = input('id'); if(empty($id)){ exit; } $html_config = db('transfer')->field('novelId,chapter,pageurl')->where('id',$id)->find(); $filename=parseurl($html_config['pageurl']); //清空原html代码 @file_put_contents($filename,''); $pageurl = config('web_site_url').'/promotelink/index/'.$html_config['novelId'].'/'.$id; //重写生成静态网页 $stream_opts = [ "ssl" => [ "verify_peer"=>false, "verify_peer_name"=>false, ] ]; $html = file_get_contents($pageurl,false,stream_context_create($stream_opts)); if(file_exists($filename)){ $handle = fopen($filename,'w+'); fwrite($handle,$html); return '重新生成成功'; }else{ return '重写生成文件不存在'; } } //重写生成全部落地页 public function rebirthhtmls(){ $s = db('transfer')->select(); foreach($s as $k=>$v){ $arr=explode("/", $v['pageurl']); $filename=$arr[count($arr)-3].'/'; $filename.=$arr[count($arr)-2].'/'; $filename.=$arr[count($arr)-1]; //清空原html代码 file_put_contents($filename,''); $pageurl = config('web_site_url').'/promotelink/index/'.$v['novelId'].'/'.$v['id']; //重写生成静态网页 $html = file_get_contents($pageurl); if(file_exists($filename)){ $handle = fopen($filename,'a'); fwrite($handle,$html); return '更新成功'; }else{ return '重写生成文件不存在'; } } } // 修改落地页TOP图片 public function uptopimg(){ $data = input('post.'); $img = request()->file('img'); //top大图 if($img){ $yimg = db('transfer')->where('id',$data['id'])->value('bigpicture'); $info_top = $img->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info_top){ $yimg = substr($yimg,1); //删除原来图片 if(file_exists($yimg)){ @unlink($yimg); } $bigpictureurl = '/public'.'/'.'uploads'.'/'.$info_top->getSaveName(); compressedImage(ROOT_PATH.$bigpictureurl, ROOT_PATH.$bigpictureurl, 40); $res = db('transfer')->where('id',$data['id'])->update(array('bigpicture'=>$bigpictureurl)); if($res){ return 1; }else{ return 2; } }else{ echo $file->getError(); } }else{ return '修改失败'; } } // 回传日志 public function returnlog(){ $startdata = input('startdata'); $enddata = input('enddata'); $id = input('id'); $aidname = input('aidname'); $orderStatus = input('orderStatus'); $payStatus = input('payStatus'); $payStatus = $payStatus?1:2; $orderStatus = empty($orderStatus)?1:$orderStatus; if($startdata && $enddata){ // TP5有个bug url表单数据有空值自动转化了+号 因此需要去掉+ $startdata = str_replace('+',' ',$startdata); $enddata = str_replace('+',' ',$enddata); $text = "从 ".$startdata." 开始 到 ".$enddata." 的数据统计"; $startdata = strtotime($startdata); $enddata = strtotime($enddata); }else{ $startdata = strtotime(date('Y-m-d')); //一天内 $enddata = time(); //现在 $text = "从 ".date('Y-m-d')."凌晨开始 到 ".date('Y-m-d h:i:s'); } $hc = db('returnpay_log')->where(array('ldurl'=>$id,'status'=>1))->whereTime('addtime', 'between', [$startdata,$enddata])->count(); $nhc = db('returnpay_log')->where(array('ldurl'=>$id,'status'=>2))->whereTime('addtime', 'between', [$startdata,$enddata])->count(); $bhc = db('returnpay_log')->where(array('ldurl'=>$id,'status'=>3))->whereTime('addtime', 'between', [$startdata,$enddata])->where('type','like',"手动%")->count(); $bhcz = db('returnpay_log')->where(array('ldurl'=>$id,'status'=>3))->whereTime('addtime', 'between', [$startdata,$enddata])->where('type','like',"自动%")->count(); $where = array(); if($aidname){ $where['u.aidname'] = $aidname; } // 未充值 已充值 用户 if($orderStatus==1){ $where['o.status'] = 1; $data = db('returnpay_log') ->field('a.*,u.uid,u.username,u.avatar,u.channel,u.clickid,o.money,o.out_trade_no,a.aidname as ad_name') ->alias('a') ->join('member u','a.uid = u.uid') ->join('order o','a.uid = o.uid') //->join('member_clickid c','a.uid = c.uid and a.channel = c.linkid and a.clickid = c.clickid') ->where('a.ldurl',$id) ->where($where) ->group('a.uid') ->order('a.addtime desc') ->paginate(10,false,['query'=>request()->param()]); }else{ $where['o.status'] = 0; $where['u.is_vip'] = 0; $where['u.egold'] = array('<',1000); $data = db('order') ->field('o.money,o.out_trade_no,o.create_time as addtime,o.id as type,u.uid,u.username,u.avatar,u.channel,u.clickid') ->alias('o') ->join('member u','o.uid = u.uid') ->where('o.ldurl',$id) ->where($where) ->where('iscontrol',0) ->group('o.uid') ->order('o.id desc') ->paginate(10,false,['query'=>request()->param()]); } // 充值配置id $pageurl = db('transfer')->where('id',$id)->value('pageurl'); $payId = db('transfer')->where('pageurl',$pageurl)->value('payid'); $controlaccout_open = db('transfer')->where('id',$id)->value('controlaccout_open'); if($payId){ $payId = unserialize($payId); } $trId = db('transfer')->where('pageurl',$pageurl)->value('id'); // dump($clickid);die; // 展示前端时间戳 $startdata = date('Y-m-d H:i:s',$startdata); $enddata = date('Y-m-d H:i:s',$enddata); $PayClickNum = db('payclickid')->where('ldurl',$id)->count(); // 绑定推广链接ID $LinkId = db('transfer')->where('id',$id)->value('linkid'); //搜索和统计 $this->assign('payStatus', $payStatus); $this->assign('orderStatus', $orderStatus); $this->assign('hc', $hc); $this->assign('nhc', $nhc); $this->assign('bhc', $bhc); $this->assign('bhcz', $bhcz); $this->assign('startdata', $startdata); $this->assign('enddata', $enddata); $this->assign('text',$text); // 基础数据 //$this->assign('ybook',$ybook); $this->assign('aidname',$aidname); $this->assign('controlaccout_open',$controlaccout_open); $this->assign('trId',$trId); $this->assign('payId',$payId); $this->assign('PayClickNum',$PayClickNum); $this->assign('pageurl',$pageurl); $this->assign('data',$data); $this->assign('linkid',$LinkId); $this->setMeta('回传日志 绑定推广链接:'.$LinkId); return $this->fetch(); } //计划详情 public function planinfo(){ $id = input('id'); $startdata = input('startdata'); $enddata = input('enddata'); if($startdata && $enddata){ // TP5有个bug url表单数据有空值自动转化了+号 因此需要去掉+ $startdata = str_replace('+',' ',$startdata); $enddata = str_replace('+',' ',$enddata); $text = "从 ".$startdata." 开始 到 ".$enddata." 的数据统计"; $startdata = strtotime($startdata); $enddata = strtotime($enddata); }else{ $startdata = strtotime(date('Y-m-d')); //一天内 $enddata = time(); //现在 $text = "从 ".date('Y-m-d')."凌晨开始 到 ".date('Y-m-d h:i:s'); } // $t = input('t'); // if($t=='all'){ // $startdata = '1448812800'; // $enddata = '1766208739'; // $text = '全部时间段'; // }elseif($t=='2'){ // $startdata = strtotime('yesterday'); // $enddata = mktime(0,0,0,date('m'),date('d'),date('Y'))-1; // $text = $text = "从 ".date('Y-m-d H:i:s',$startdata)." 开始 到 ".date('Y-m-d H:i:s',$enddata)." 的数据统计"; // } $landingurl = db('transfer')->where('id',$id)->value('pageurl'); $adlist = $this->getrealexpend($landingurl,3,0,2); $list = $adlist['list']; if($list){ foreach($list as $k=>$v){ $value = db('planratio_set')->where('adid',$v['adId'])->find(); if($value){ $list[$k]['value'] = $value['value']; }else{ $list[$k]['value'] = 0; } $list[$k]['paynum'] = db('order')->where(['ldurl'=>$id,'adid'=>$v['adId'],'status'=>1])->where('create_time', 'between', [$startdata,$enddata])->where('is_complex',1)->where('ispay',1)->where('iscontrol',0)->count(); $list[$k]['mon'] = db('order')->where(['ldurl'=>$id,'adid'=>$v['adId'],'status'=>1])->where('create_time', 'between', [$startdata,$enddata])->where('is_complex',1)->where('ispay',1)->where('iscontrol',0)->sum('money'); $list[$k]['success'] = db('returnpay_log')->where(['ldurl'=>$id,'adid'=>$v['adId'],'status'=>1])->where('addtime', 'between', [$startdata,$enddata])->count(); $list[$k]['not'] = db('returnpay_log')->where(['ldurl'=>$id,'adid'=>$v['adId'],'status'=>2])->where('addtime', 'between', [$startdata,$enddata])->count(); $list[$k]['control'] = db('returnpay_log')->where(['ldurl'=>$id,'adid'=>$v['adId'],'status'=>3])->where('addtime', 'between', [$startdata,$enddata])->count(); $list[$k]['reg'] = db('member')->where(['adid'=>$v['adId']])->where('reg_time', 'between', [$startdata,$enddata])->count(); } } $isopen = db('transfer')->where('id',$id)->value('controlaccout_open'); // 展示前端时间戳 $startdata = date('Y-m-d H:i:s',$startdata); $enddata = date('Y-m-d H:i:s',$enddata); $this->assign('list',$list); $this->assign('startdata', $startdata); $this->assign('enddata', $enddata); $this->assign('trId',$id); $this->assign('text',$text); $this->assign('isopen',$isopen); $this->setMeta('计划详情 落地页:'.$id); return $this->fetch(); } //切换回传方式 public function openplan(){ $id = input('id'); $t = input('t'); $list = db('member_clickid')->field('ad_id')->where(['ldurl'=>$id,'ad_id'=>array('neq','')])->group('ad_id')->select(); if($t=='1'){ foreach($list as $k=>$v){ $is = db('planratio_set')->where(['adid'=>$v['adid'],'tid'=>$id])->value('id'); if(empty($is)){ db('planratio_set')->insert([ 'tid'=>$id, 'adid'=>$v['adid'], 'value'=>0 ]); } } }elseif($t=='2'){ foreach($list as $k=>$v){ $is = db('planratio_set')->where(['adid'=>$v['adid'],'tid'=>$id])->value('id'); if($is){ db('planratio_set')->where(['adid'=>$v['adid'],'tid'=>$id])->update(['counts'=>0,'value'=>0]); } } } db('transfer')->where('id',$id)->update(['openplan'=>$t]); exit(json_encode(array('status'=>1,'reg'=>'成功'))); } //修改单个计划比例 public function oneplan(){ $id = input('id'); $adid = input('adid'); $val = input('val'); $r = db('planratio_set')->where(['tid'=>$id,'adid'=>$adid,'value'=>$val])->value('id'); if($r){ exit(json_encode(array('status'=>2,'reg'=>'请勿设置重复值'))); }else{ $is = db('planratio_set')->where(['adid'=>$adid,'tid'=>$id])->value('id'); if($is){ $r = db('planratio_set')->where('id',$is)->update(['value'=>$val,'counts'=>0]); }else{ $r = db('planratio_set')->insert([ 'tid'=>$id, 'adid'=>$adid, 'value'=>$val ]); } if($r){ exit(json_encode(array('status'=>1,'reg'=>'设置成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'错误'))); } } } //单个计划回传日志 public function planreturnlog(){ $id = input('id'); $adid = input('adid'); $aidname = input('aidname'); $startdata = input('startdata'); $enddata = input('enddata'); if($startdata && $enddata){ // TP5有个bug url表单数据有空值自动转化了+号 因此需要去掉+ $startdata = str_replace('+',' ',$startdata); $enddata = str_replace('+',' ',$enddata); $text = "从 ".$startdata." 开始 到 ".$enddata." 的数据统计"; $startdata = strtotime($startdata); $enddata = strtotime($enddata); }else{ $startdata = strtotime(date('Y-m-d')); //一天内 $enddata = time(); //现在 $text = "从 ".date('Y-m-d')."凌晨开始 到 ".date('Y-m-d h:i:s'); } $t = input('t'); if($t=='all'){ $startdata = '1448812800'; $enddata = '1766208739'; $text = '全部时间段'; }elseif($t=='2'){ $startdata = strtotime('yesterday'); $enddata = mktime(0,0,0,date('m'),date('d'),date('Y'))-1; $text = $text = "从 ".date('Y-m-d H:i:s',$startdata)." 开始 到 ".date('Y-m-d H:i:s',$enddata)." 的数据统计"; } $hcout1['ldurl'] = $id; $hcout1['status'] = 1; $hcout1['adid'] = $adid; $hcout2['ldurl'] = $id; $hcout2['status'] = 2; $hcout2['adid'] = $adid; $hcout3['ldurl'] = $id; $hcout3['status'] = 3; $hcout3['adid'] = $adid; $hcout4['ldurl'] = $id; $hcout4['status'] = 3; $hcout4['adid'] = $adid; $hc = db('returnpay_log')->where($hcout1)->whereTime('addtime', 'between', [$startdata,$enddata])->count(); $nhc = db('returnpay_log')->where($hcout2)->whereTime('addtime', 'between', [$startdata,$enddata])->count(); $bhc = db('returnpay_log')->where($hcout3)->whereTime('addtime', 'between', [$startdata,$enddata])->where('type','like',"%手动%")->count(); $bhcz = db('returnpay_log')->where($hcout4)->whereTime('addtime', 'between', [$startdata,$enddata])->where('type','like',"%自动%")->count(); $where = array(); $where['a.adid'] = $adid; $data = db('returnpay_log') ->field('a.*,u.username,a.ldurl,a.clickid,a.aidname') ->alias('a') ->join('member u','a.uid = u.uid') ->where('a.ldurl',$id) ->where($where) ->whereTime('a.addtime', 'between', [$startdata,$enddata]) ->group('a.uid') ->order('a.addtime desc') ->paginate(10,false,['query'=>request()->param()]); // 展示前端时间戳 $startdata = date('Y-m-d H:i:s',$startdata); $enddata = date('Y-m-d H:i:s',$enddata); $PayClickNum = db('payclickid')->where(['ldurl'=>$id,'adid'=>$adid])->count(); $controlaccout_open = db('transfer')->where('id',$id)->value('controlaccout_open'); $pageurl = db('transfer')->where('id',$id)->value('pageurl'); $this->assign('controlaccout_open', $controlaccout_open); $this->assign('startdata', $startdata); $this->assign('enddata', $enddata); $this->assign('text',$text); $this->assign('data',$data); $this->assign('PayClickNum', $PayClickNum); $this->assign('hc', $hc); $this->assign('nhc', $nhc); $this->assign('bhc', $bhc); $this->assign('bhcz', $bhcz); $this->assign('trId',$id); $this->assign('adid',$adid); $this->assign('aidname',$aidname); $this->assign('pageurl', $pageurl); $this->setMeta($aidname.'回传详情'); return $this->fetch(); } // 未充值订单的用户clickid列表 public function notRechargedUserList(){ $startdata = input('startdata'); $enddata = input('enddata'); $pageurl = input('pageurl'); $clickid = input('clickid'); if($startdata && $enddata){ // TP5有个bug url表单数据有空值自动转化了+号 因此需要去掉+ $startdata = str_replace('+',' ',$startdata); $enddata = str_replace('+',' ',$enddata); $text = "从 ".$startdata." 开始 到 ".$enddata." 的数据统计"; $startdata = strtotime($startdata); $enddata = strtotime($enddata); }else{ $startdata = strtotime(date('Y-m-d')); //一天内 $enddata = time(); //现在 $text = "从 ".date('Y-m-d')."凌晨开始 到 ".date('Y-m-d h:i:s'); } $where = array(); if($clickid){ $where['clickid'] = array('like',"%".$clickid."%"); } $id = db('transfer')->where('pageurl',$pageurl)->value('id'); $data = db('member')->field('uid,username,avatar,reg_time,clickid,channel,ldurl')->where(array( 'pay'=>0, 'group'=>99, 'ldurl'=>$id, 'is_vip'=>0, 'egold'=>array('<',1000) ))->where($where)->whereTime('reg_time', 'between', [$startdata,$enddata])->order('uid desc')->paginate(10,false,['query'=>request()->param()]); foreach($data as $k=>$v){ $isOrder = db('order')->where('iscontrol',0)->where('uid',$v['uid'])->value('id'); if($isOrder){ unset($data[$k]); } } // 展示前端时间戳 $startdata = date('Y-m-d H:i:s',$startdata); $enddata = date('Y-m-d H:i:s',$enddata); // 绑定推广链接ID $LinkId = db('transfer')->where('pageurl',$pageurl)->value('linkid'); $this->assign('text', $text); $this->assign('startdata', $startdata); $this->assign('enddata', $enddata); $this->assign('clickid',$clickid); $this->assign('data',$data); $this->assign('pageurl',$pageurl); $this->setMeta('回传日志 绑定推广链接ID:'.$LinkId); return $this->fetch(); } // 设置充值独立配置 public function setpayid(){ $data = input(''); if($data){ if($data['payIds']){ $data['payIds'] = serialize($data['payIds']); } $res = db('transfer')->where('pageurl',$data['pageurl'])->update(['payid'=>$data['payIds']]); if($res){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'设置失败'))); } } } // 设置充值独立配置 public function setpayids(){ $data = input(''); if($data){ $list = explode('-',$data['val']); foreach($list as $k=>$v){ if(!preg_match("/^[1-9][0-9]*$/",$v)){ exit(json_encode(array('status'=>2,'reg'=>'值设置错误'))); } } foreach($list as $k=>$v){ $is = db('pay_setting')->where('price',$v)->count('id'); if(empty($is)){ $arr = array( 'status'=>0, 'create_time'=>time(), 'price'=>$v, 'egold'=>$v*100, 'type'=>1, 'description'=>'得'.($v*100).'书币', 'title'=>'普通充值' ); db('pay_setting')->insert($arr); } } $list = serialize($list); $res = db('transfer')->where('id',$data['id'])->update(['payid'=>$list]); if($res){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'设置失败'))); } } } // 修改在跑链接状态 public function openrun(){ $data = input(''); if($data){ $arr = array( 'run'=>$data['type'], 'runtime'=>time() ); db('tuiguang')->where('id',$data['linkid'])->update($arr); $res = db('transfer')->where('id',$data['id'])->update($arr); if($res){ exit(json_encode(array('status'=>1,'reg'=>'开启成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'开启失败'))); } } } // 修改TASK回传方式 public function uppaytype(){ $data = input(''); if($data){ $redis = new \Redis(); $redis->connect('127.0.0.1',6379); if($data['paytime']==0){ $res = db('transfer')->where('id',$data['id'])->update(['payopen'=>2,'paytime'=>0]); $redis->del('swoole-taskopen-is'.$data['id']); exit(json_encode(array('status'=>1,'reg'=>'任务1关闭成功。。。','type'=>2,'id'=>$data['id']))); }else{ $isopens = $redis->get('swoole-taskopen-is'.$data['id']); if($isopens){ exit(json_encode(array('status'=>2,'reg'=>'程序运行中,请先关闭'))); }else{ //定时任务进程是否完全关闭 if($data['tasktype']=='time'){ $taskopen = db('transfer')->where('id',$data['id'])->value('taskopen'); if($taskopen==1){ exit(json_encode(array('status'=>2,'reg'=>'上个定时任务还未完成'))); } } $timec = time(); $arr = array( 'paytime'=>$data['paytime'], 'paynum'=>1, 'paytimest'=>$timec, 'paynumlog'=>0, 'payopen'=>1, 'taskopen'=>$data['tasktype']=='time'?1:2, 'payclick'=>$data['click'] ); $res = db('transfer')->where('id',$data['id'])->update($arr); if($res){ $tcpurl = "http://127.0.0.1:9502"; $tcparr = array( 'id'=>$data['id'], 'time'=>$data['paytime'], 'num'=>1, 'type'=>$data['tasktype'], 'click'=>$data['click'] ); $redis->set('swoole-taskopen-is'.$data['id'],1); pushMessageToClient($tcpurl,json_encode($tcparr)); exit(json_encode(array('status'=>1,'reg'=>'任务1开启成功','type'=>1,'id'=>$data['id']))); }else{ exit(json_encode(array('status'=>2,'reg'=>'设置失败'))); } } } } } // 修改TASK回传方式 public function uppaytypes(){ $data = input(''); if($data){ $redis = new \Redis(); $redis->connect('127.0.0.1',6379); if($data['paytime2']==0){ $res = db('transfer')->where('id',$data['id'])->update(['payopen2'=>2,'paytime2'=>0]); $redis->del('swoole-taskopen2-is'.$data['id']); exit(json_encode(array('status'=>1,'reg'=>'任务2关闭成功。。。','type'=>2,'id'=>$data['id']))); }else{ $isopens = $redis->get('swoole-taskopen2-is'.$data['id']); if($isopens){ exit(json_encode(array('status'=>2,'reg'=>'程序运行中,请先关闭'))); }else{ //定时任务进程是否完全关闭 if($data['tasktype']=='time'){ $taskopen = db('transfer')->where('id',$data['id'])->value('taskopen2'); if($taskopen==1){ exit(json_encode(array('status'=>2,'reg'=>'上个定时任务还未完成'))); } } $timec = time(); $arr = array( 'paytime2'=>$data['paytime2'], 'paynum'=>1, 'paytimest'=>$timec, 'paynumlog'=>0, 'payopen2'=>1, 'taskopen2'=>$data['tasktype']=='time'?1:2, 'payclicks'=>$data['clicks'] ); $res = db('transfer')->where('id',$data['id'])->update($arr); if($res){ $tcpurl = "http://127.0.0.1:9502"; $tcparr = array( 'id'=>$data['id'], 'time2'=>$data['paytime2'], 'num'=>1, 'type'=>$data['tasktype'], 'click'=>$data['clicks'] ); $redis->set('swoole-taskopen2-is'.$data['id'],1); pushMessageToClient($tcpurl,json_encode($tcparr)); exit(json_encode(array('status'=>1,'reg'=>'任务2开启成功','type'=>1,'id'=>$data['id']))); }else{ exit(json_encode(array('status'=>2,'reg'=>'设置失败'))); } } } } } //检测查找模糊匹配clickid数量 public function isgetclick(){ $d = input(''); $where = array(); // $url = db('transfer')->where('id',$d['id'])->value('pageurl'); $where['ldurl'] = $d['id']; $where['clickid'] = array('like',"%".$d['click']."%"); $data = db('payclickid')->field('clickid')->where($where)->order('id desc')->select(); if($data){ exit(json_encode(array('status'=>1,'reg'=>'查询成功','data'=>$data,'num'=>count($data),'str'=>$d['click']))); }else{ exit(json_encode(array('status'=>2,'reg'=>'未匹配到clickid'))); } } // 补回传 public function complement(){ $data = input(''); if($data){ if($data['hcnum']>0){ $transferInfo = db('transfer')->where('pageurl',$data['pageurl'])->find(); // if($transferInfo['ybook']==0){ // exit(json_encode(array('status'=>2,'reg'=>'原书名ID为0'))); // } $linkid = $transferInfo['linkid']; $clickid = db('payclickid')->field('clickid,addtime,ldurl,uid')->where('ldurl',$transferInfo['id'])->order('id desc')->limit($data['hcnum'])->select(); if($clickid){ import("Payreturn.Payreturn", EXTEND_PATH,'.php'); $YueKaiPay = new \Payreturn(); foreach($clickid as $k=>$v){ db('payclickid')->where('uid',$v['uid'])->delete(); // 登录回传 //$this->translogin($v['clickid']); // 支付回传 $YueKaiPay->transpays($v['clickid']); $returnpaylog = array( 'uid'=>0, 'ldurl'=>$transferInfo['id'], 'type'=>'手动 补回传 1条 绑定推广链接 '.$linkid, 'addtime'=>time(), 'status'=>3, 'channel'=>$linkid ); //写入回传日志 M('returnpay_log')->insert($returnpaylog); } exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'暂无支付过的clickid'))); } }else{ exit(json_encode(array('status'=>2,'reg'=>'输入值不正确'))); } } } //自定义用户回传 public function payPass(){ $c = input('c'); $pageurl = input('pageurl'); $linkid = input('linkid'); $uid = input('uid'); if($c){ $isc = db('payclickid')->where('clickid',$c)->value('id'); if($isc){ db('payclickid')->where('clickid',$c)->delete(); //$this->translogin($c); $this->transpays($c); $transferInfo = db('transfer')->where('pageurl',$pageurl)->find(); $returnpaylog = array( 'uid'=>0, 'ldurl'=>$transferInfo['id'], 'type'=>'手动 自定义补回传', 'addtime'=>time(), 'status'=>3, 'channel'=>$linkid ); //写入回传日志 M('returnpay_log')->insert($returnpaylog); exit(json_encode(array('status'=>1,'reg'=>'回传成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'该用户clickid已经回传'))); } } } // 自定义充值失败用户回传 public function payPassNo(){ $uid = input('uid'); $c = input('c'); $pageurl = input('pageurl'); $linkid = input('linkid'); db('order')->where(array('status'=>0,'uid'=>$uid))->delete(); //$this->translogin($c); $this->transpays($c); $transferInfo = db('transfer')->where('pageurl',$pageurl)->find(); $returnpaylog = array( 'uid'=>$uid, 'ldurl'=>$transferInfo['id'], 'type'=>'手动 自定义充值失败用户回传', 'addtime'=>time(), 'status'=>3, 'channel'=>$linkid ); //写入回传日志 M('returnpay_log')->insert($returnpaylog); exit(json_encode(array('status'=>1,'reg'=>'回传成功'))); } //自定义未有任何订单用户回传 public function payPassNoAll(){ $uid = input('uid'); $c = input('c'); $pageurl = input('pageurl'); $linkid = input('linkid'); db('member')->where('uid',$uid)->update(['clickid'=>'']); //$this->translogin($c); $this->transpays($c); $transferInfo = db('transfer')->where('pageurl',$pageurl)->find(); $returnpaylog = array( 'uid'=>$uid, 'ldurl'=>$transferInfo['id'], 'type'=>'手动 自定义未有订单用户回传', 'addtime'=>time(), 'status'=>3, 'channel'=>$linkid ); //写入回传日志 M('returnpay_log')->insert($returnpaylog); exit(json_encode(array('status'=>1,'reg'=>'回传成功'))); } // 计划回传 public function planpay(){ $id = input('id'); $data = input(); if(isset($data['tim'])){ if((time()+10)>strtotime($data['tim'])){ exit(json_encode(array('status'=>2,'reg'=>'小于当前时间'))); } $arr = array( 'trid'=>$data['id'], 'tim'=>strtotime($data['tim']), 'num'=>$data['num'], 'addtime'=>time(), 'clickid'=>$data['cid'] ); $res = db('planpay')->insert($arr); if($res){ exit(json_encode(array('status'=>1,'reg'=>'添加成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } }else{ $list = db('planpay')->where('trid',$id)->order('id asc')->select(); $linkid = db('transfer')->where('id',$id)->value('linkid'); $this->assign('list', $list); $this->assign('trId', $id); $this->setMeta('计划回传 落地页编号:'.$id.' 绑定推广链接:'.$linkid); return $this->fetch(); } } // 启动计划 public function openpay(){ $id = input('id'); if($id){ $taskInfo = db('planpay')->where('id',$id)->find(); if($taskInfo){ if((time()+10)>$taskInfo['tim']){ exit(json_encode(array('status'=>2,'reg'=>'任务时间小于当前时间'))); } $tim = $taskInfo['tim'] - time(); $tcpurl = "http://127.0.0.1:9507"; $tcparr = array( 'id'=>$taskInfo['id'], 'trid'=>$taskInfo['trid'], 'tim'=>$tim, 'num'=>$taskInfo['num'], 'clickid'=>$taskInfo['clickid'] ); pushMessageToClient($tcpurl,json_encode($tcparr)); db('planpay')->where('id',$id)->update(['status'=>1]); exit(json_encode(array('status'=>1,'reg'=>'投递任务成功'))); } } } // 删除计划 public function delplanpay($id){ $res = db('planpay')->delete($id); if($res){ exit(json_encode(array('status'=>1,'reg'=>'删除成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } } // 定时换尾缀 尾缀管理 public function setfont(){ $data = input(''); if(isset($data['text'])){ $r = db('wxfont')->insert(array( 'text'=>$data['text'], 'lid'=>$data['lid'] )); if($r){ exit(json_encode(array('status'=>1,'reg'=>'添加成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } }else{ $redis = new \Redis(); $redis->connect('127.0.0.1',6379); $redData = $redis->get('WxFontTask-'.$data['id']); $redData = @unserialize($redData); if($redData){ $istask = $redData['TaskStatus']; $TaskTime = $redData['TaskTime']; }else{ $rarr = array( 'TaskStatus'=>0, 'TaskTime'=>0, 'run'=>0 ); $redis->set('WxFontTask-'.$data['id'],serialize($rarr)); $istask = 0; $TaskTime = 0; } $res = db('wxfont')->where('lid',$data['id'])->order('id asc')->paginate(20); $page = $res->render(); $modeswitch = db('transfer')->where('id',$data['id'])->value('modeswitch'); $this->assign('modeswitch', $modeswitch); $this->assign('TaskTime', $TaskTime); $this->assign('istask', $istask); $this->assign('page', $page); $this->assign('res', $res); $this->assign('id', $data['id']); $this->setMeta('定时换尾缀 落地页编号:'.$data['id']); return $this->fetch(); } } // 修改尾缀项 public function upwxfont(){ $d = input(''); $r = db('wxfont')->where('id',$d['id'])->update(['text'=>$d['text']]); if($r){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } } // 删除尾缀项 public function delwxfont($id){ $res = db('wxfont')->delete($id); if($res){ exit(json_encode(array('status'=>1,'reg'=>'删除成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } } // 尾缀task public function setWxFontTask(){ $data = input(''); if($data){ $redis = new \Redis(); $redis->connect('127.0.0.1',6379); $redData = $redis->get('WxFontTask-'.$data['lid']); $redData = @unserialize($redData); if($data['TaskTime']==0){ $rarr = array( 'TaskStatus'=>0, 'TaskTime'=>0, 'run'=>$redData['run'] ); $redis->set('WxFontTask-'.$data['lid'],serialize($rarr)); db('wxfont')->where(['lid'=>$data['lid'],'status'=>1])->delete(); exit(json_encode(array('status'=>1,'reg'=>'关闭成功'))); } if($redData){ if($redData['run']==1 || $redData['TaskStatus']==1){ exit(json_encode(array('status'=>2,'reg'=>'上个任务未执行完'))); }else{ //开始任务投递 $rarr = array( 'TaskStatus'=>1, 'TaskTime'=>$data['TaskTime'], 'run'=>1 ); $redis->set('WxFontTask-'.$data['lid'],serialize($rarr)); $tcpurl = "http://127.0.0.1:9510"; $tcparr = array( 'lid'=>$data['lid'] ); pushMessageToClient($tcpurl,json_encode($tcparr)); exit(json_encode(array('status'=>1,'reg'=>'任务开启'))); } } } } //切换防截流模式 public function openmodes(){ $d = input(''); if($d){ $name = db('transfer')->where('id',$d['lid'])->value('nickname'); $name = trim($name); $is = db('applets')->where('name',$name)->value('id'); if($is){ $r = db('transfer')->where('id',$d['lid'])->update(['modeswitch'=>$d['t']]); if($r){ exit(json_encode(array('status'=>1,'reg'=>'成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'失败'))); } }else{ exit(json_encode(array('status'=>2,'reg'=>'此公众号未配置'))); } } } //clickid分类统计 public function clicksort(){ $id = input('id'); $sql = "select substring(clickid,3,11) as cid,count(*) as num,sum(money) as m,(select count(*) from cps_returnpay_log where channel = {$id} and status!=2 and substring(clickid,3,11) = cid) as h from cps_returnpay_log where channel = {$id} and uid != 0 group by substring(clickid,3,11) order by num desc"; $list = db('returnpay_log')->query($sql); $this->assign('id', $id); $this->assign('list', $list); $this->setMeta('clickid分类统计 推广链接ID:'.$id); return $this->fetch(); } //强制关闭定时任务 public function resetcid(){ $data = input(''); if($data){ $is = db('transfer')->field('id,payopen,taskopen,payopen2,taskopen2')->where('id',$data['id'])->find(); if($data['t']=='1'){ if($is['payopen']=='1'){ exit(json_encode(array('status'=>2,'reg'=>'请先手动关闭'))); } $r = db('transfer')->where('id',$data['id'])->update(['taskopen'=>2]); if($r){ exit(json_encode(array('status'=>1,'reg'=>'任务1重置成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'无需重置'))); } }elseif($data['t']=='2'){ if($is['payopen2']=='1'){ exit(json_encode(array('status'=>2,'reg'=>'请先手动关闭'))); } $r = db('transfer')->where('id',$data['id'])->update(['taskopen2'=>2]); if($r){ exit(json_encode(array('status'=>1,'reg'=>'任务2重置成功'))); }else{ exit(json_encode(array('status'=>2,'reg'=>'无需重置'))); } } } } //回传登录信息 public function translogin($clickid){ $url = "https://ad.toutiao.com/track/activate/?callback=".$clickid."&event_type=0"; $ret = $this->curl_get($url); $retjson = json_decode($ret,true); //return $retjson; } // 回传支付 // public function transpays($clickid=''){ // $url = "https://ad.toutiao.com/track/activate/?callback=".$clickid."&event_type=2"; // $ret = $this->curl_get($url); // $retjson = json_decode($ret,true); // //return $retjson; // } // 回传方式2 public function transpays($clickid='',$type='active_pay'){ $arr = [ 'event_type'=>$type, 'context'=>[ 'ad'=>[ 'callback'=>$clickid ] ], 'timestamp'=>time() ]; $arr = json_encode($arr); $url = 'https://analytics.oceanengine.com/api/v2/conversion'; $r = $this->pushMessageToClient($url,$arr); return $r; } public function pushMessageToClient($url,$data){ //初使化init方法 $ch = curl_init(); //指定URL curl_setopt($ch, CURLOPT_URL, $url); //设定请求后返回结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //声明使用POST方式来进行发送 curl_setopt($ch, CURLOPT_POST, 1); //发送什么数据呢 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //忽略证书 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //忽略header头信息 curl_setopt($ch, CURLOPT_HEADER, 0); //设置超时时间 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //发送请求 $output = curl_exec($ch); curl_close($ch); //返回数据 return $output; } public function curl_get($url=''){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); $output = curl_exec($ch); //var_dump($output); } // 巨量实时消耗 time 1 近一年 2近一个小时 3近一天 // adid 单条计划没有返回所有计划 // adStatus 1 包含已删除的 2不包含 public function getrealexpend($landingurl,$time=3,$adid=null,$adStatus=2){ $timarr = $this->timetype($time); $url = 'http://ocean.cswmwangluo.cn/api/v1/ocean/cost/realTimeByLand'; $arr = array( 'landUri'=>$landingurl, 'startTime'=>$timarr['startdata'], 'endTime'=>$timarr['enddata'], 'adStatus'=>$adStatus ); $arr = json_encode($arr); $res = $this->pushMessageToClient($url,$arr); $res = json_decode($res,true); if($res['code']=='200'){ if($adid){ $adinfo = $this->find_by_foreach($res['result']['list'],$adid); return $adinfo; } return $res['result']; }else{ return 0; } } //找到对应计划数据 public function find_by_foreach($array,$find){ if(empty($array)){ return 0; } foreach ($array as $key => $v){ if($v['adId']==$find){ return $array[$key]; } } } //时间格式返回 public function timetype($t){ if($t==1){ //一年内 $startdata = '2021-03-16 0:0:0'; }elseif($t==2){ //一个小时内 $startdata = date('Y-m-d H:0:0'); }elseif($t==3){ //一天内 $startdata = date('Y-m-d 0:0:0'); } $enddata = strtotime(date('Y-m-d H:i:s')); //现在 $f = date('i'); $enddata = $enddata+((60-$f)*60); $enddata = date('Y-m-d H:i:s',$enddata); $arr = array( 'startdata'=>$startdata, 'enddata'=>$enddata ); return $arr; } public function texts() { } }