signprice = C("SIGN_PRICE")?:10; } public function login() { $promoteId = I("promote_id", 0); $gameId = I("game_id", 0); $user = session("user_auth"); if ($user) { redirect(U("ssg/index", array('promete_id' => $promoteId))); } if ($promoteId) { $exists = M("promote", "tab_")->where(array('id' => $promoteId))->find(); if (!$exists) { //$this->error("链接失效,请重新向推广员索取链接."); $this->assign("error","链接失效,请重新向推广员索取链接."); $this->display('blank'); exit(); } } //获取客服qq $appqq = M("config", "sys_")->field('value')->where("name='APP_QQ'")->find()['value']; $this->assign("app_qq", $appqq); $this->assign("promote_id", $promoteId); $this->assign("game_id", $gameId); $this->display(); } public function home(){ if (I('user_token')&&I('user_id')&&I('game_id')) { $userToker = I('user_token'); $user_id = I('user_id'); $game_id = I('game_id'); $where['tab_user_token.user_token'] = $userToker; $where['tab_user_token.user_id'] = $user_id; $where['tab_user_token.game_id'] = $game_id; $isToken = M('user_token','tab_')->field('user.id as user_id,user.account as account,user.nickname as nickname') ->join("left join tab_user as user on user.id = tab_user_token.user_id") ->where($where) ->find(); if ($isToken) { session("user_auth",$isToken); $this->redirect("Ssg/index",array('game_id'=>$game_id)); } else { $this->redirect("Ssg/login"); } } //获取客服qq $appqq = M("config", "sys_")->field('value')->where("name='APP_QQ'")->find()['value']; $promoteId = I("promote_id", 0); $this->assign("app_qq", $appqq); $this->assign("promote_id", $promoteId); $this->assign("rand", rand()); $this->display(); } //用户登录 public function do_login() { $account = I("Account"); $password = I("Password"); $promoteId = I("promote_id", 0); $password = base64_decode($password); /*if (!$promoteId) { $this->ajaxReturn(array("ErrorCode" => -97, "ResultMsg" => "参数非法")); }*/ $promote = array(); if ($promoteId) { $promote = M("promote", "tab_")->where(array('id' => $promoteId))->find(); if (!$promote) { $this->ajaxReturn(array("ErrorCode" => -97, "ResultMsg" => "参数非法.")); } } $verify = new \Think\Verify(); if (!$verify->check(I("VerifyCode"))) { $this->ajaxReturn(array("ErrorCode" => -97, "ResultMsg" => "验证码错误")); } $userApi = new MemberApi(); $user_id = $userApi->login($account, $password,1);//调用登录 $res_code = 0; $res_msg = "登录成功"; if ($user_id < 0) { switch ($user_id) { case -1000 : $res_code = self::USER_NOT_EXIST; $res_msg = "用户不存在"; break; case -10021 : $res_code = self::USER_PWD_ERROR; $res_msg = "登录密码错误"; break; default : $res_code = self::UNKNOWN_ERROR; $res_msg = "未知错误"; } } if($user_id>0){ $_SESSION['user_id'] = $user_id; $user = M('user', 'tab_')->where(array( 'id' => $user_id ))->find(); if (!$user['promote_id'] && $promote) { M('user', 'tab_')->where(array( 'id' => $user_id ))->save(array( 'promote_id' => $promoteId, 'promote_account' => $promote['account'] )); } } $this->ajaxReturn(array("ErrorCode"=>$res_code,"ResultMsg"=>$res_msg),'JSON'); } //验证码 public function verify($vid = '') { $config = array( 'seKey' => 'ThinkPHP.CN', //验证码加密密钥 'fontSize' => 16, // 验证码字体大小(px) 'imageH' => 42, // 验证码图片高度 'imageW' => 107, // 验证码图片宽度 'length' => 4, // 验证码位数 'fontttf' => '4.ttf', // 验证码字体,不设置随机获取 'useCurve' => false, // 是否画混淆曲线 'useNoise' => false, // 是否添加杂点 'useCurve' => false, ); ob_clean(); $verify = new \Think\Verify($config); $verify->codeSet = '0123456789'; $verify->entry($vid); } //注册 public function phoneRegister() { //添加用户 C(api('Config/lists')); $user = $_POST; $promoteId =( $user['promote_id'] ? $user['promote_id'] : 0); $game_id = $user['game_id'] ?? 0; #判断数据是否为空 if (empty($user)) { $this -> set_message(1001, "fail", "注册数据不能为空"); } #验证短信验证码 if (!$this->sms_verify($user['account'], $user['code'])) { $this->set_message(1000, "fail", '验证失败'); } $res = $this -> doRegister($user['account'],$user['password'],$user['account'],$promoteId,4,2, $game_id); if(empty($res)){ $this -> set_message(1017, "fail", "添加失败"); } //添加自动登录 $userApi = new MemberApi(); $user_id = $userApi->login($user['account'], $user['password'],1); $this -> set_message(1, "success", "添加成功"); } //忘记密码 public function forgetPassword() { $user = $_POST; if (empty($user)) { $this -> set_message(1001, "fail", "基础信息不能为空"); } if (!$this->sms_verify($user['account'], $user['code'])) { $this->set_message(1000, "fail", '验证失败'); } //更新密码 $userApi = new MemberApi(); $userInfo = M("user","tab_")->where("account = '".$user['account']."'")->find(); if(empty($userInfo)){ $this -> set_message(1003, "fail", "用户不存在"); } //更新用户 $upres = $userApi->updatePassword($userInfo['id'], $user['password']); if($upres){ //自动登陆 $user_id = $userApi->login($user['account'], $user['password'],1); $this -> set_message(0, "success", "修改成功"); }else{ $this -> set_message(1005, "fail", "密码更新错误,请刷新后再次尝试"); } # code... } //普通注册 public function userRegister() { $account = I("account"); $password = I("password"); $promoteId = I("promote_id", 0); $res = $this -> doRegister($account,$password,'',$promoteId,4,1); if(empty($res)){ $this -> set_message(1017, "fail", "添加失败"); } //添加自动登录 $userApi = new MemberApi(); $user_id = $userApi->login($account, $password,1); $this -> set_message(1, "success", "添加成功"); # code... } //消息返回 public function set_message($status=0,$return_code="fail",$return_msg="操作失败"){ $msg = array( "status" => $status, "return_code" => $return_code, "return_msg" => $return_msg ); $this->ajaxReturn($msg,'JSON'); exit(); } //真正注册代码 public function doRegister($account,$password,$phone,$promote_id,$register_way,$register_type, $game_id = 0) { $userService = new UserService(); if ($userService->isAccountExist($account)) { $this -> set_message(1017, "fail", "用户名已存在"); } $data = array( 'account' => $account, 'password' => think_ucenter_md5($password, UC_AUTH_KEY), 'phone' => $phone, 'head_img' =>'', 'promote_id' => $promote_id, 'promote_account' =>get_promote_account($promote_id), 'register_way' => $register_way, 'register_type' => $register_type, 'register_ip' => get_client_ip(), 'parent_id'=>get_fu_id($promote_id), 'parent_name'=>get_parent_name($promote_id), 'register_time'=>time(), 'check_time' => time(), ); if (Request::isIOS()) { $data['device_type'] = 2; } elseif (Request::isAndroid()) { $data['device_type'] = 1; } if ($game_id) {//关联游戏 $game = M('game', 'tab_')->where(['id' => $game_id])->find(); if ($game) { $data['fgame_id'] = $game_id; $data['fgame_name'] = $game['game_name']; } } /* 添加用户 */ $res = M('user', 'tab_') ->add($data); if ($res) { $taskClient = new TaskClient(); $taskClient->registerEvent($res, 'SSG'); } return $res; # code... } //首页 public function index(){ $user = session("user_auth"); if (!$user) { redirect(U("ssg/login")); //$this->error("请登入", U('ssg/login')); } $appqq = M("config", "sys_")->field('value')->where("name='APP_QQ'")->find()['value']; $this->assign("app_qq", $appqq); $this->display(); } public function getGamaList() { $user = session("user_auth"); $game_name = I("game_name", false); $type = I("type",false); $map = []; if($game_name){ $map["game_name"] = array("like","%{$game_name}%"); } $map["sdk_version"] = 2; $map["game_status"] = 1; $game_list = M("game", "tab_")->field("*, id as game_id")->where($map)->select(); $games = []; foreach ($game_list as $game) { if (($game['download_ways'] & GameService::DOWNLOAD_SUPER) != GameService::DOWNLOAD_SUPER) { continue; } $game["game_icon"] = get_cover($game["icon"], 'path'); $games[] = $game; } $res = array("list"=>$games); if($type == 1){ $map['user_id']= $user['user_id']; $map['pay_status'] = 1; $userpay = M("game_supersign","tab_")->field("game_id")->where($map)->select(); if(empty($userpay)){ $userpay = []; }else{ $tmparr = []; for ($i=0; $i < count($userpay); $i++) { # code... $tmparr[] = $userpay[$i]["game_id"]; } $userpay = $tmparr; } $res["pay_game_id"] = $userpay; } $this->ajaxReturn($res,'JSON'); # code... } public function order(){ //.echo md5(sha1('123456') . 'UmtW6-Z(S^8xvwDn;B:J{X7FG9z2+Np.|C#~QRY"');exit(); $user = session("user_auth"); if (!$user) { redirect(U("ssg/login")); //$this->error("请登入", U('ssg/login')); } $order_list = M("game_supersign a","tab_")->field("a.order_id, b.game_name, b.icon, b.id as game_id, a.pay_status, a.user_id, a.create_time")->join("left join tab_game b on a.game_id=b.id")->where(array( 'a.user_id' => $user['user_id'], ))->order("a.id")->select(); // pp($order_list); foreach ($order_list as $key => $value){ $deff = $this->timediffs(time(),$value['create_time']); //计算分钟数 if(($deff['day']+ $deff['hour'])>=1 || $deff['min']>30){ $order_list[$key]['invalid']=1; }else{ $order_list[$key]['invalid']=0; } } $this->assign("data_list", $order_list); $this->assign("nowtime", time()); $this->display(); } //流程 public function process(){ $this->display(); } //教程 public function tutorial(){ $this->display(); } //帮助 public function help(){ $this->display(); } //规则 public function rule(){ $this->display(); } //退出 public function logout() { session("user_auth",null); redirect(U("ssg/login")); } //发送验证码 public function sendPhoneCode() { $phone = I('phone'); $taskClient = new TaskClient(); $result = $taskClient->sendSmsCode($phone, get_client_ip()); $data = []; if ($result['code'] == TaskClient::SUCCESS) { $data['status'] = 1; } else { $data['status'] = 0; } $data['msg'] = $result['message']; echo json_encode($data); exit; } public function timediffs($begin_time, $end_time) { if ($begin_time < $end_time) { $starttime = $begin_time; $endtime = $end_time; } else { $starttime = $end_time; $endtime = $begin_time; } //计算天数 $timediff = $endtime - $starttime; $days = intval($timediff / 86400); //计算小时数 $remain = $timediff % 86400; $hours = intval($remain / 3600); //计算分钟数 $remain = $remain % 3600; $mins = intval($remain / 60); //计算秒数 $secs = $remain % 60; $res = array("day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs); return $res; } public function sms_verify($phone , $code) { $taskClient = new TaskClient(); $result = $taskClient->checkSms($phone, $code); $data = []; if ($result['code'] == TaskClient::SUCCESS) { return true; } else { return false; } } /** *支付中心 */ public function pay(){ $user = session("user_auth"); $gameId = I("game_id", 0); $promoteId = I("promote_id"); //$price = self::signprice; if (!$user) { redirect("/mobile.php/ssg/login/game_id/{$gameId}/promote_id/$promoteId"); // $this->error("请登入", "/mobile.php/ssg/login"); } $userId = $user['user_id']; $gameInfo = M('game', 'tab_')->field('game_name,supersign_token')->where(array( 'id' => $gameId, ))->find(); $isPay = M('game_supersign', 'tab_')->where(array( 'user_id' => $userId, 'game_id' => $gameId, 'pay_status' =>1 ))->find(); if($isPay){ $packageDownloadLogService = new PackageDownloadLogService(); $packageDownloadLogService->add([ 'user_id' => $userId, 'game_id' => $gameId, 'promote_id' => $promoteId, 'type' => 3, ]); redirect("/mobile.php/Ssg/install_show/user_id/$userId/game_id/$gameId/order_id/".$isPay['order_id']); }else{ if (!$gameInfo['supersign_token']) { //$this->error("超级签token未填写!"); $this->assign("error","超级签token未配置~"); $this->display('blank'); exit(); } $this->assign("price", $this->signprice); //$this->assign("order_id", $orderId); $this->assign("game_id",$gameId); $this->assign("game_name",$gameInfo['game_name']); $this->display('pay'); } } /* * 发起支付 */ public function dopay() { $user = session("user_auth"); if (!$user ) { //redirect("/mobile.php/ssg/login"); redirect(U("ssg/login")); } $gameId = I("game_id", 0); $paytype = I("pay_type", 'ali'); $price = $this->signprice; $userId = $user['user_id']; if (!$userId || !$gameId) { //$this->error("参数有误!"); $this->assign("error","参数有误~"); $this->display('blank'); exit(); } $isPay = M('game_supersign', 'tab_')->where(array( 'user_id' => $userId, 'game_id' => $gameId, 'pay_status' => 1 ))->find(); //是否有已支付订单 $gameInfo = M('game', 'tab_')->field('game_name,supersign_token')->where(array( 'id' => $gameId, ))->find(); if ($isPay){ $this->assign("error","亲~您已购买过了~
请到【订单查询】查看订单信息哟~"); $this->display('blank'); exit(); } else { $orderId = "SS_" . date('Ymd') . date('His') . sp_random_string(4); // 超级签 if (!$gameInfo['supersign_token']) { //$this->error("超级签token未填写!"); $this->assign("error","超级签token未配置~"); $this->display('blank'); exit(); } $r = M('game_supersign', 'tab_')->add(array( 'udid' => '', 'user_id' => $userId, 'game_id' => $gameId, 'order_id' => $orderId, 'pay_price' => $price, 'pay_status' => 0, 'ticket' => '', // 调用安装的时候分配 'token' => $gameInfo['supersign_token'], 'create_time' => time() )); if (!$r) return -1; } if($paytype=='ali'){ $param['price'] = $price; $param['sdk_version'] = '2'; $param['user_id'] = $userId; $param['game_id'] = $gameId; $param['order_id'] = $orderId; $param['apitype'] = "alipay"; $param['config'] = "alipay"; $param['signtype']= "MD5"; $param['server'] = "alipay.wap.create.direct.pay.by.user"; $param['payway'] = 1; $param['title'] = $price; $param['body'] = $price; //$param['callback'] = "https://m.wmtxkj.com/mobile.php/Ssg/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}"; //$param['notifyurl'] = "https://m.wmtxkj.com/callback.php/Notify/notify/apitype/alipay"; if(stripos($_SERVER['HTTP_HOST'], '.wmtxkj.cn') || $_SERVER['HTTP_HOST']=='127.0.0.1' || stripos($_SERVER['HTTP_HOST'], '.free.idcfengye.com')){ $param['callback'] = "http://".$_SERVER['HTTP_HOST']."/mobile.php/Ssg/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}"; //$param['notifyurl'] = "http://".$_SERVER['HTTP_HOST']."/callback.php/Notify/notify/apitype/alipay"; }else{ $param['callback'] = "https://".$_SERVER['HTTP_HOST']."/mobile.php/Ssg/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}"; //$param['notifyurl'] = "https://".$_SERVER['HTTP_HOST']."/callback.php/Notify/notify/apitype/alipay"; } $ali_pay = $this->alipay($param); redirect($ali_pay['url']); }else{ $weixn = new Weixin(); $wx_pay = json_decode($weixn->weixin_pay('超级签消费', $orderId, $price, 'MWEB', 4), true); if($wx_pay['status']==1){ //$redirect_url = $_SERVER['HTTP_HOST']."/mobile.php/Ssg/install_show/user_id/{$userId}/game_id/{$gameId}/order_id/{$orderId}"; redirect($wx_pay['mweb_url']); }else{ $this->assign("error",$wx_pay['return_msg']); $this->display('blank'); } } } // alipay public function alipay($param) { $pay = new \Think\Pay($param['apitype'],C($param['config'])); $vo = new \Think\Pay\PayVo(); $vo->setBody("超级签消费") ->setFee($param['price'])//支付金额 ->setTitle($param['title']) ->setOrderNo($param['order_id']) ->setService($param['server']) ->setSignType($param['signtype']) ->setPayMethod("wap") ->setTable("supersign") ->setPayWay($param['payway']) ->setCallback($param['callback']) //->setNotifyUrl($param['notifyurl']) ->setGameName(get_game_name($param['game_id'])) ->setServerId(0) ->setUserId($param['user_id']) ->setSdkVersion($param['sdk_version']); $pay_['url']= $pay->buildRequestForm($vo); //$pay_['out_trade_no']= $out_trade_no; return $pay_; } /** * 用户点击安装 */ public function install() { $user = session("user_auth"); if (!$user ) { //$this->error("请登入", "/mobile.php/ssg/login"); redirect(U("ssg/login")); } $userId = $user['user_id']; $gameId = I('game_id', 0); $orderId = I('order_id', 0); if (!$userId || !$gameId || !$orderId) { //$this->error("参数有误!"); $this->assign("error","参数有误~"); $this->display('blank'); exit(); } M()->startTrans(); // 获取支付记录 $gamesign = M('game_supersign', 'tab_')->where(array( 'order_id' => $orderId, 'user_id' => $userId, 'game_id' => $gameId, 'pay_status' => 1, ))->find(); if (!$gamesign) { //$this->error("支付记录不存在"); $this->assign("error","支付记录不存在~"); $this->display('blank'); exit(); } if ($gamesign['url']) { redirect($gamesign['url']); } $token = $gamesign['token']; $ipa365 = new Ipa365(); $i = 1; while (1) { // 获取授权码 $list = $ipa365->ticketList(array( 'token' => $token, 'status'=>0,//未使用是0 'limit' => $i, )); // @todo: 并发授权码已分配的情况 if($list['errno'] != 0){ $this->assign("error","超级签获取失败~{$list['errmsg']}"); $this->display('blank'); exit(); } $code = $list['data']['list'][$i-1]['code']; if($code){ $codeExists = M('game_supersign', 'tab_')->field('id')->where(array( 'ticket' => $code, ))->find(); if (!$codeExists) { break; } }else{ $this->assign("error","超级签已售罄~"); $this->display('blank'); exit(); } $i ++; } $game = M('game', 'tab_')->where(array( 'id' => $gameId, ))->find(); $url = $game['supersign_url']."?code={$code}"; $r = M('game_supersign', 'tab_')->where(array( 'user_id' => $userId, 'game_id' => $gameId, 'pay_status' => 1 ))->save(array( 'ticket' => $code, // 调用安装的时候分配 'url' => $url, )); if (!$r) { pp(M('game_supersign', 'tab_')->_sql()); M()->rollback(); return -1; } M()->commit(); redirect($url); } /** * 下载页面 判断订单是否支付成功 */ public function install_show() { $orderId = I('order_id', 0); $gameId = I('game_id', 0); $user = session("user_auth"); if (!$user ) { //$this->error("请登入", "/mobile.php/ssg/login"); redirect(U("ssg/login")); } $userId = $user['user_id']; if (!$userId ) { //$this->error("请登入", "/mobile.php/ssg/login"); redirect(U("ssg/login")); } if (!$orderId || !$gameId || !$userId) { //$this->error("参数校验失败,请重试"); $this->assign("error","参数校验失败,请重试~"); $this->display('blank'); exit(); } $supersign = M('game_supersign', 'tab_')->where(array('order_id' => $orderId,"game_id"=>$gameId))->find(); if (!$supersign) { //$this->error("订单不存在"); $this->assign("error","订单不存在"); $this->display('blank'); exit(); } if ($supersign['pay_status'] != 1) { //$this->error("订单未支付"); $this->assign("error","订单未支付"); $this->display('blank'); exit(); } $game = M('game', 'tab_')->where(array('id' => $gameId))->find(); $this->assign('game', $game); $this->assign('url', U('Ssg/install', array( 'order_id' => $orderId, 'user_id' => $userId, 'game_id' => $gameId ))); //获取礼包码 $giftbag = M('giftbag', 'tab_')->field("*")->where(array("game_id"=>$gameId,"giftbag_version"=>3))->find(); if(empty($giftbag)){ $giftbag = false; }else{ $desribe = $giftbag['desribe']; $mygif = $this->checkAccountGiftExist($userId,$giftbag['id']); if(!empty($mygif)){ //已经领取 $giftbag =$mygif; }else{ if($giftbag['novice_num']>0){ //领取 $giftbag = $this->getNovice($userId,$user['account'],$giftbag['id']); } } $giftbag['desribe'] = $desribe; } //验证是否领取 $this->assign('giftbag', $giftbag); $this->display(); } /* * 打包列表 */ public function pay_list() { $user = session("user_auth"); if (!$user ) { //$this->error("请登入", "/mobile.php/ssg/login"); redirect(U("ssg/login")); } $userId = $user['user_id']; $list = M('game_supersion', 'tab_')->where(array( 'user_id' => $userId, ))->select(); $this->assign("list", $list); $this->display(); } //领取礼包码 public function getNovice($user_id,$account,$gift_id){ $data =M("giftbag",'tab_')->find($gift_id); $novice_str = $data['novice']; $novice_arr = str2arr($novice_str,","); if (empty($novice_arr)){ return ""; } $novice_arr = array_filter($novice_arr); $novice = array_pop($novice_arr); $data['novice_num'] = count($novice_arr); $data['novice'] = arr2str($novice_arr,","); M("giftbag",'tab_')->startTrans(); $novice_result = M("giftbag",'tab_')->save($data); if(!empty($novice)){ //记录领取 $record['game_id'] = $data['game_id']; $record['game_name'] = $data['game_name'];//get_game_name($data['game_id']); $record['gift_id'] = $gift_id; $record['gift_name'] = $data['giftbag_name']; $record['status'] = 0; $record['novice'] = $novice; $record['user_id'] = $user_id; $record['user_account'] = $account; $record['create_time'] = time(); $record['start_time'] = $data['start_time']; $record['end_time'] = $data['end_time']; $record_result = M("gift_record",'tab_')->add($record); }else{ $novice_result = false; } if($novice_result === false || $record_result === false){ M("giftbag",'tab_')->rollback(); return ""; }else{ M("giftbag",'tab_')->commit(); return $record; } } public function checkAccountGiftExist($user_id,$gift_id){ $map['user_id'] = $user_id; $map['gift_id'] = $gift_id; return M("gift_record",'tab_')->field('*')->where($map)->find(); } }