data['rootUrl'] = Doo::conf()->APP_URL; if(isset($_COOKIE['uid'])){ $uid = $this->authcode($_COOKIE['uid']); $username = $this->authcode ( $_COOKIE['user_auth'] ); $this->data['username'] = $username; $this->data['uid'] = $uid; //每次操作都更新cookie时间,12小时没操作重新登录 setcookie ( "user_auth", $_COOKIE['user_auth'], time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie ( "uid", $_COOKIE['uid'], time () + 3600 * 12, "/", COOKIE_WEB_SITE ); } if(isset($_COOKIE['sso_id'])){ require_once (SITE_PATH . '/protected/class/client.php'); $client = new client ( ZHSSO ); $ssoid = $this->authcode($_COOKIE['sso_id']); $avatar = $client->ps_getavatar ( $ssoid ); $this->data['useravatar']=$avatar[180]; setcookie ( "sso_id", $_COOKIE['sso_id'], time () + 3600 * 12, "/", COOKIE_WEB_SITE ); }else{ $this->data['useravatar']=Doo::conf()->APP_URL . 'global/images/01.png'; } if(isset($_SESSION['message'])){ $this->data['message'] = $_SESSION['message']; } } public function index() { Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $class = $ktclass->getRowishowbyId(2); $usernum = $classuser->getNumbyClassid(2); $this->data['totalnum'] = sprintf("%.2f", $class['classnum']*$class['classtime']/60); $this->data['usernum'] = $usernum; $this->data['class'] = $class; if(isset($this->data['uid'])){ $isbuy = $classuser->gethasbyuserandclass($this->data['uid'],2); if(!empty($isbuy)){ $this->data['isbuy'] = true; } } $this->render('index', $this->data, TRUE); } public function user_exit(){ setcookie('user_auth', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie('uid', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie('sso_id', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); return '/'; } //检测是否已经填入身份证信息和姓名 function checkidcard($id = ''){ if(isset($this->data['uid'])){ $uid = $this->data['uid']; }elseif($id != ''){ $uid = $id; }else{ setcookie('user_auth', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie('uid', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie('sso_id', '', time () + 3600 * 12, "/", COOKIE_WEB_SITE ); return 3; } Doo::loadModel('user'); $users = new User(); $user = $users->getuserbyId($uid); if(isset($user['idcard']) && !empty($user['idcard'])){ return 1; }else{ return 0; } } public function exitId(){ if(isset($this->data['uid'])){ if(isset($_GET['from']) && $_GET['from'] == 'userinfo'){ $this->data['from'] = 'userinfo'; }elseif(isset($_GET['class'])){ $this->data['from'] = $_GET['class']; } $this->render('identity', $this->data, TRUE); }else{ $_SESSION['message'] = 'cookie过期,请重新登录'; return '/'; } } public function do_setid(){ if(!isset($this->data['uid'])){ return '/'; } if(!isset($_POST['name']) || empty($_POST['name'])){ $this->data['message'] = '请输入您的真实姓名'; $this->render('identity',$this->data,TRUE);die; } if(!isset($_POST['idcard']) || empty($_POST['idcard'])){ $this->data['message'] = '请输入您的身份证号'; $this->render('identity',$this->data,TRUE);die; } if(!$this->validateIDCard($_POST['idcard'])){ $this->data['message'] = '身份证号格式不正确'; $this->render('identity',$this->data,TRUE);die; } Doo::loadModel('user'); $users = new User(); $users->realname = trim($_POST['name']); $users->idcard = trim($_POST['idcard']); $users->userid = $this->data['uid']; $users->update(); if(isset($_POST['from']) && $_POST['from'] == 'userinfo'){ return '/userinfo'; }elseif(isset($_POST['from']) && $_POST['from'] == 0){ return '/'; }else{ return '/classinfo/'.$_POST['from']; } } public function login(){ $username = $this->get_args ( "username" ); $password = $this->get_args ( "password" ); if (empty ( $username ) || empty ( $password )) { $_SESSION['message'] = "请输入正确的参数"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } require_once (SITE_PATH . '/protected/class/client.php'); $client = new client ( ZHSSO ); if(filter_var($username, FILTER_VALIDATE_EMAIL)){ $is_login = $client->zhsso_member_login ( $username, $password ,1); }else if($this->checkMobile($username)) { $is_login = $client->zhsso_member_login( $username, $password, 2 ); }else{ $is_login = $client->zhsso_member_login ( $username, $password ); } $is_login = explode ( "\r", $is_login ); if (is_numeric ( $is_login [0] )) { if ($is_login [0] == USERNAME_ONFINE) { $_SESSION['message'] = "您输入的帐号或者密码有误"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } elseif ($is_login [0] == PASSWORD_ERROR){ $_SESSION['message'] = "您输入的帐号或者密码有误"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } elseif ($is_login [0] == - 3) {//USER_NOACTION $_SESSION['message'] = "用户未激活账号,请前往通行账号激活"; return '/'; } else{ $_SESSION['message'] = "您输入的帐号或者密码有误"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } } elseif (! empty ( $is_login [0] )) { $ts = json_decode ( $is_login [0], true ); if (empty ( $ts )){ $_SESSION['message'] = "通信异常"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } $_SESSION['message'] = ''; Doo::loadModel('user'); $users = new User(); $user = $users->getRowByUsername ( $ts [0] ['username'] ); $ssoid = $this->authcode( $ts[0]['id'], "tr"); $userinfo = $this->authcode ( $ts [0] ['username'], "tr" ); setcookie ( "user_auth", $userinfo, time () + 3600 * 12, "/", COOKIE_WEB_SITE ); setcookie ( "sso_id", $ssoid, time () + 3600 * 12, "/", COOKIE_WEB_SITE ); //同步通行证用户 if (empty ( $user )) { $users->username = $ts[0]['username']; $users->useremail = $ts[0]['useremail']; $users->mobile = $ts[0]['mobile']; $users->userpasswd = $ts[0]['userpasswd']; $result = $users->insert(); $userid = $this->authcode ( $result, "tr" ); setcookie ( "uid", $userid, time () + 3600 * 12, "/", COOKIE_WEB_SITE ); $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page); // return '/setId'; }else{ $users->useremail = $ts[0]['useremail']; $users->mobile = $ts[0]['mobile']; $users->userpasswd = $ts[0]['userpasswd']; $users->userid = $user['userid']; $users->update(); $userid = $this->authcode ( $user['userid'], "tr" ); setcookie ( "uid", $userid, time () + 3600 * 12, "/", COOKIE_WEB_SITE ); $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page); // $hadId = $this->checkidcard($user['userid']); // // if($hadId == 0){ // return '/setId'; // }elseif($hadId == 3){ // return '/'; // } } } else { $_SESSION['message'] = "通信异常"; $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } $src_page = $_SERVER['HTTP_REFERER']; header("location:".$src_page);die; // return '/'; } //课程列表 public function classlist(){ // $hadId = $this->checkidcard($this->data['uid']); // if($hadId == 0){ // return '/setId'; // }elseif($hadId == 3){ // return '/'; // } if(!isset($this->data['uid'])){ return '/'; } Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $classlist = $classuser->getclassbyuserid($this->data['uid']); $this->data['classlist'] = $classlist; if(!empty($classlist)){ foreach($classlist as $k => $v){ $class = $ktclass->getOne(array('where' => 'classid='.$v['classid'], 'asArray' => TRUE)); $this->data['classlist'][$k]['classname'] = $class['classname']; $this->data['classlist'][$k]['avatar'] = $class['avatar']; $this->data['classlist'][$k]['classnum'] = $class['classnum']; $this->data['classlist'][$k]['totalnum'] = sprintf("%.2f", $class['classnum']*$class['classtime']/60); $this->data['classlist'][$k]['usernum'] = $classuser->getNumbyClassid($v['classid']); $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$v['classid']); $this->data['classlist'][$k]['user_progress'] = $this->getPersonProgress($class,$hadbuy); } } $this->render('user-class', $this->data, TRUE); } public function orderlist(){ // $hadId = $this->checkidcard($this->data['uid']); // if($hadId == 0){ // return '/setId'; // }elseif($hadId == 3){ // return '/'; // } if(!isset($this->data['uid'])){ return '/'; } Doo::loadModel('order'); Doo::loadHelper('DooPager'); $order = new Order(); $totalArchive = $order->count(array('where' => 'userid='.$this->data['uid'], 'asArray' => TRUE)); $pager = new DooPager(Doo::conf()->APP_URL . "orderlist/page", $totalArchive, 5, 10); if (isset($this->params['pindex'])) $pager->paginate(intval($this->params['pindex'])); else $pager->paginate(1); if ($pager->limit != ' -5,5') $orderlist = $order->getorderlistbyuserid($this->data['uid'],$pager->limit); if(isset($orderlist) && !empty($orderlist)){ $this->data['orderlist'] = $orderlist; foreach($orderlist as $k => $v){ $this->data['orderlist'][$k]['createtime'] = date('Y-m-d H:i',$v['createtime']); } } $this->data['pager'] = $pager->output; $this->render('user-order', $this->data, TRUE); } //课程详细页 public function classinfo(){ // $hadId = $this->checkidcard($this->data['uid']); // if($hadId == 0){ // return '/setId'; // }elseif($hadId == 3){ // return '/'; // } if(isset($this->params['classid'])){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $class = $ktclass->getRowishowbyId($this->params['classid']); if(empty($class)){ return '/'; } $usernum = $classuser->getNumbyClassid($this->params['classid']); $this->data['totalnum'] = sprintf("%.2f", $class['classnum']*$class['classtime']/60); $this->data['classinfo'] = $class; $this->data['usernum'] = $usernum; Doo::loadModel('ktsection'); Doo::loadModel('kttype'); $ktype = new Kttype(); $this->data['kttype'] = $ktype->getTypebyClassid($this->params['classid']); foreach($this->data['kttype'] as $k => $v){ Doo::loadModel('ktsection'); $ktsection = new Ktsection(); $section = $ktsection->getSecbyTypeid($v['typeid']); $this->data['kttype'][$k]['section'] = $section; foreach($section as $sk => $sv){ Doo::loadModel('ktvideo'); $ktvideo = new Ktvideo(); $video = $ktvideo->getVideobySecAndShow($sv['seid']); $this->data['kttype'][$k]['section'][$sk]['video'] = $video; } } if(isset($this->data['uid'])){ $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$this->params['classid']); if(!empty($hadbuy)){ $this->data['isbuy'] = TRUE; } } $this->render('class-info', $this->data, TRUE); } } //跳转到支付宝支付页面 public function paydetail(){ $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId?class='.$this->params['classid']; }elseif($hadId == 3){ return '/'; } if(isset($this->params['classid'])){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $class = $ktclass->getRowishowbyId($this->params['classid']); $usernum = $classuser->getNumbyClassid($this->params['classid']); $this->data['totalnum'] = sprintf("%.2f", $class['classnum']*$class['classtime']/60); $this->data['classinfo'] = $class; $this->data['usernum'] = $usernum; $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$this->params['classid']); if(!empty($hadbuy)){ $this->data['isbuy'] = TRUE; } $this->render('shop-detail', $this->data, TRUE); } } //个人信息页 public function userInfo(){ // $hadId = $this->checkidcard($this->data['uid']); // if($hadId == 0){ // return '/setId'; // }elseif($hadId == 3){ // return '/'; // } if(!isset($this->data['uid'])){ return '/'; } Doo::loadModel('user'); $user = new User(); $this->data['ssoUrl'] = ZHSSO; $this->data['userinfo'] = $user->getuserbyId($this->data['uid']); $this->render('user-info',$this->data,TRUE); } //修改idcard public function updateId(){ if(!isset($this->data['uid'])){ return '/'; } if(!isset($_GET['id']) || empty($_GET['id'])){ $data= '请输入您的身份证号'; echo json_encode(array('code' => 404, 'data' => $data)); exit; } if(!$this->validateIDCard($_GET['id'])){ $data = '身份证格式出错,请重新输入'; echo json_encode(array('code' => 404, 'data' => $data)); exit; } Doo::loadModel('user'); $user = new User(); $user->userid = $this->data['uid']; $user->idcard = $_GET['id']; $user->update(); echo json_encode(array('code' => 200)); exit; } //更换头像 public function changeAvatar(){ if(!isset($this->data['uid'])){ return '/'; } require_once (SITE_PATH . '/protected/class/client.php'); $client = new client ( ZHSSO ); $tuid = $this->authcode($_COOKIE['sso_id']); $this->data['avatar'] = $client->ps_getavatar ( $tuid ); $this->data ['avatar_flash'] = $client->ps_getavatar_upload_html ( $tuid ); $this->render('user-avatar',$this->data,TRUE); } //课程学习页 public function videoInfo(){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId'; }elseif($hadId == 3){ return '/'; } $class = $ktclass->getRowishowbyId($this->params['classid']); $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$this->params['classid']); if(empty($class)){ return '/'; } if(empty($hadbuy)){ return '/classinfo/'.$this->params['classid']; } $this->data['classinfo'] = $class; $this->data['totalnum'] = sprintf("%.2f", $class['classnum']*$class['classtime']/60); Doo::loadModel('ktsection'); Doo::loadModel('kttype'); $ktype = new Kttype(); $type = $ktype->getTypebyClassid($this->params['classid']); $this->data['kttype'] = $type; $videolist = array(); foreach($type as $k => $v){ Doo::loadModel('ktsection'); $ktsection = new Ktsection(); $section = $ktsection->getSecbyTypeid($v['typeid']); $this->data['kttype'][$k]['section'] = $section; foreach($section as $sk => $sv){ Doo::loadModel('ktvideo'); $ktvideo = new Ktvideo(); $video = $ktvideo->getVideobySecAndShow($sv['seid']); $this->data['kttype'][$k]['section'][$sk]['video'] = $video; if(!empty($video)){ foreach($video as $vk => $vv){ $videolist[] = $video[$vk]; } } } } if(!empty($videolist)){ foreach($videolist as $vk => $vs){ $videolist2[$vk]['videoid'] = $vs['videoid']; $videolist2[$vk]['wyvideoid'] = $vs['wy_video_id']; $videolist2[$vk]['videoname'] = $vs['videoname']; } $this->data['videolist'] = json_encode($videolist2,TRUE); }else{ $this->data['videolist'] = ''; } // var_dump($this->data['videolist']); // exit; require_once (Doo::conf()->SITE_PATH . '/protected/class/video.php'); $video = new video ( ); if($hadbuy['watch_wyid'] == 0){ $wyvideoid = $this->data['kttype'][0]['section'][0]['video'][0]['wy_video_id']; $this->data['play_time'] = 0; $this->data['videoid'] = $this->data['kttype'][0]['section'][0]['video'][0]['videoid']; $this->data['wyvideoid'] = $this->data['kttype'][0]['section'][0]['video'][0]['wy_video_id']; }else{ $wyvideoid = $hadbuy['watch_wyid']; $this->data['play_time'] = $hadbuy['watch_time']; $this->data['videoid'] = $hadbuy['watch_videoid']; $this->data['wyvideoid'] = $hadbuy['watch_wyid']; } $result = $video->videoGet($wyvideoid); $type = ''; if($result['code'] == 200){ $play_url = !empty($result['ret']['shdMp4Url']) ? $result['ret']['shdMp4Url'] : ''; $play_type = substr(strrchr($play_url, '.'), 1); if ($play_type == 'mp4'){ $type = 'video/mp4'; } } if($hadbuy['issuccess'] == 1){ $this->data['successClass'] = 1; }else{ $this->data['successClass'] = 0; } $this->data['user_progress'] = $this->getPersonProgress($class,$hadbuy); $this->data['play_url'] = isset($play_url) ? $play_url : ''; $this->data['play_type'] = isset($type) ? $type : ''; $this->render('video-play', $this->data, TRUE); } //获取个人的学习进度 private function getPersonProgress($class,$classuser){ $totalss = $class['classnum']*$class['classtime']*60; //课程总秒数 $userss = $classuser['seetime']; //已完成的秒数 $nodonehh = sprintf('%.2f',($totalss-$userss)/3600); //未完成的小时数 $donehh = sprintf('%.2f',$classuser['seetime']/3600); //已完成的小时数 $doneclassnum = intval($userss/($class['classtime']*60)); //已完成的课时数,取整 if($doneclassnum<10 && $doneclassnum != 0){ $doneclassnum = '0'.$doneclassnum; } $progress = sprintf('%.2f',$userss/$totalss) *100; //已完成占总课程的百分比 $noprogress = 100-$progress; //未完成占总课程的百分比 return array('progress' => $progress, 'noprogress' => $noprogress, 'donehh' => $donehh, 'doness' => $userss,'totalss' => $totalss, 'doneclassnum' => $doneclassnum, 'nodonehh' => $nodonehh); } //获取视频播放地址 public function playVideo(){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId'; }elseif($hadId == 3){ return '/'; } $class = $ktclass->getRowishowbyId($_POST['classid']); $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$_POST['classid']); if(empty($class)){ return '/'; } if(empty($hadbuy)){ return '/classinfo/'.$_POST['classid']; } Doo::loadModel('videouser'); $videouser = new Videouser(); $videotime = $_POST['videotime']; $thisvideo = $_POST['thisvideo']; $thiswyvideo = $_POST['thiswyvideo']; $seetime = $_POST['seetime']; $duration = $_POST['duration']; if($hadbuy['issuccess'] == 1){ //保存课堂和视频信息到数据库 $classuser->watch_videoid = $thisvideo; $classuser->watch_wyid = $thiswyvideo; $classuser->watch_time = $videotime; $classuser->lasttime = time(); $classuser->id = $hadbuy['id']; $classuser->update(); }else{ //保存课堂和视频信息到数据库 $classuser->watch_videoid = $thisvideo; $classuser->watch_wyid = $thiswyvideo; $classuser->watch_time = $videotime; $classuser->lasttime = time(); $classuser->seetime = intval($hadbuy['seetime'])+intval($seetime); $classuser->id = $hadbuy['id']; $classuser->update(); } $hadbuy['seetime'] = intval($hadbuy['seetime'])+intval($seetime); $vuser = $videouser->getvideoMsg($this->data['uid'],$thisvideo); if(!empty($vuser)){ $videouser->id = $vuser['id']; $videouser->file_time = $duration; $videouser->seetime = $videotime; $videouser->last_time = time(); $videouser->update(); }else{ $videouser->userid = $this->data['uid']; $videouser->videoid = $thisvideo; $videouser->wyvideoid = $thiswyvideo; $videouser->file_time = $duration; $videouser->seetime = $videotime; $videouser->last_time = time(); $videouser->insert(); } $watchtime = $videouser->gettimebywyvideo($this->data['uid'],$_POST['video']); $user_progress = $this->getPersonProgress($class,$hadbuy); require_once (Doo::conf()->SITE_PATH . '/protected/class/video.php'); $video = new video ( ); if(isset($_POST['video'])){ $result = $video->videoGet($_POST['video']); if($result['code'] == 200){ $play_url = !empty($result['ret']['shdMp4Url']) ? $result['ret']['shdMp4Url'] : ''; $play_type = substr(strrchr($play_url, '.'), 1); if ($play_type == 'mp4'){ $type = 'video/mp4'; }else { echo json_encode(array( 'code' => 400)); exit; } echo json_encode(array( 'code' => 200, 'url' => $play_url, 'type' => $type, 'seetime' => $watchtime, 'user_progress' => $user_progress)); exit; } echo json_encode(array( 'code' => 400)); exit; } echo json_encode(array( 'code' => 400)); exit; } //保存视频信息 public function saveClassAndVideo(){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId'; }elseif($hadId == 3){ return '/'; } $class = $ktclass->getRowishowbyId($_POST['classid']); $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$_POST['classid']); if(empty($class)){ return '/'; } if(empty($hadbuy)){ return '/classinfo/'.$_POST['classid']; } Doo::loadModel('videouser'); $videouser = new Videouser(); $videotime = $_POST['videotime']; $videoid = $_POST['video']; $wyvideoid = $_POST['wyvideo']; $seetime = $_POST['seetime']; $duration = $_POST['duration']; //判断课程是否已完成,已完成则不再上传课程时间 if($hadbuy['issuccess'] == 0 && intval($hadbuy['seetime'])+intval($seetime) >= $class['classnum']*$class['classtime']*60){ $classuser->issuccess = 1; $classuser->watch_videoid = $videoid; $classuser->watch_wyid = $wyvideoid; $classuser->watch_time = $videotime; $classuser->lasttime = time(); $classuser->seetime = intval($hadbuy['seetime'])+intval($seetime); $classuser->id = $hadbuy['id']; $classuser->update(); }elseif($hadbuy['issuccess'] == 1){ $classuser->watch_videoid = $videoid; $classuser->watch_wyid = $wyvideoid; $classuser->watch_time = $videotime; $classuser->lasttime = time(); $classuser->id = $hadbuy['id']; $classuser->update(); }else{ //保存课堂和视频信息到数据库 $classuser->watch_videoid = $videoid; $classuser->watch_wyid = $wyvideoid; $classuser->watch_time = $videotime; $classuser->lasttime = time(); $classuser->seetime = intval($hadbuy['seetime'])+intval($seetime); $classuser->id = $hadbuy['id']; $classuser->update(); } $hadbuy['seetime'] = intval($hadbuy['seetime'])+intval($seetime); $vuser = $videouser->getvideoMsg($this->data['uid'],$videoid); if(!empty($vuser)){ $videouser->id = $vuser['id']; $videouser->file_time = $duration; $videouser->seetime = $videotime; $videouser->last_time = time(); $videouser->update(); }else{ $videouser->userid = $this->data['uid']; $videouser->videoid = $videoid; $videouser->wyvideoid = $wyvideoid; $videouser->file_time = $duration; $videouser->seetime = $videotime; $videouser->last_time = time(); $videouser->insert(); } $user_progress = $this->getPersonProgress($class,$hadbuy); echo json_encode(array('user_progress' => $user_progress)); exit; } public function alipay(){ Doo::loadModel('ktclass'); Doo::loadModel('classuser'); $ktclass = new Ktclass(); $classuser = new Classuser(); $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId'; }elseif($hadId == 3){ return '/'; } if(isset($this->params['classid'])){ $class = $ktclass->getRowishowbyId($this->params['classid']); $hadbuy = $classuser->gethasbyuserandclass($this->data['uid'],$this->params['classid']); if(!empty($class) && empty($hadbuy)){ Doo::loadModel('user'); $users = new User(); $user = $users->getuserbyId($this->data['uid']); require_once(Doo::conf()->SITE_PATH."protected/class/alipay/alipay.config.php"); require_once(Doo::conf()->SITE_PATH."protected/class/alipay/lib/alipay_submit.class.php"); $alipaySubmit = new AlipaySubmit($alipay_config); $payment_type = "1"; $notify_url = Doo::conf()->APP_URL."api/smartcost/sso/notify_url"; $return_url = Doo::conf()->APP_URL."api/smartcost/sso/return_url"; //商户订单号 $sn=$this->create_sn(); $out_trade_no = $sn; $subject = $class['classname'].'费用支付'; $extra_common_param=''; //用户自定义回传参数 //付款金额 $p_amount=trim($class['price']); $total_fee = $p_amount; $body = ''; $show_url = ''; //防钓鱼时间戳 $anti_phishing_key = $alipaySubmit->query_timestamp(); $exter_invoke_ip = $this->clientIP(); //构造要请求的参数数组,无需改动 $parameter = array( "service" => "create_direct_pay_by_user", "partner" => trim($alipay_config['partner']), "seller_email" => trim($alipay_config['seller_email']), "payment_type" => $payment_type, "notify_url" => $notify_url, "return_url" => $return_url, "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "body" => $body, "show_url" => $show_url, "anti_phishing_key" => $anti_phishing_key, "exter_invoke_ip" => $exter_invoke_ip, "_input_charset" => trim(strtolower($alipay_config['input_charset'])), "extra_common_param"=> $extra_common_param ); //建立请求 $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "加载中"); // 生成订单 Doo::loadModel('order'); $order = new Order(); $array = array('trade_sn' => $sn, 'userid' => $this->data['uid'], 'username' => $this->data['username'], 'useremail' => $user['useremail'], 'mobile' => $user['mobile'], 'price' => $p_amount, 'createtime' => time(), 'classid' => $this->params['classid'], 'classname' => $class['classname'], 'ip' => $this->clientIP(), 'status' => 2 ); $order->_insertAttributes('order', $array); header("Content-type: text/html; charset=utf-8"); echo $html_text; }else{ return '/classinfo/'.$this->params['classid']; } } } function returnAlipay(){ $hadId = $this->checkidcard($this->data['uid']); if($hadId == 0){ return '/setId'; }elseif($hadId == 3){ return '/'; } require_once(Doo::conf()->SITE_PATH."protected/class/alipay/alipay.config.php"); require_once(Doo::conf()->SITE_PATH."protected/class/alipay/lib/alipay_notify.class.php"); $alipayNotify = new AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyReturn(); if($verify_result) { $v_oid = $_GET['out_trade_no']; //商户订单号 $trade_no = $_GET['trade_no']; //支付宝交易号 $trade_status = $_GET['trade_status']; //交易状态 $v_amount=$_GET['total_fee']; //交易金额 if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { $order = Doo::loadModel('order', TRUE); $callbackData = $order->getRowsBytrade_id($v_oid); if ($callbackData['status'] == 2) { if ($callbackData['price'] == $v_amount) { $order->trade_sn = $v_oid; $comment = $order->find(array('limit' => 1, 'select' => 'id', 'where' => 'trade_sn='.$v_oid, 'asArray' => TRUE)); $order->id = $comment['id']; $order->paytime = time(); $order->status = 1; $succvalue = $order->update(); if ($succvalue) { Doo::loadModel('classuser'); $classuser = new Classuser(); $classuser->userid = $callbackData['userid']; $classuser->classid = $callbackData['classid']; $classuser->price = $callbackData['price']; $classuser->issuccess = 0; $result = $classuser->insert(); if ($result) { $this->data['msg'] = '支付完成'; header('refresh:3;url=/classinfo/'.$callbackData['classid']); } } } } else { $this->data['msg'] = '已支付完毕,操作无效'; header('refresh:3;url=/'); } } }else { $this->data['msg'] = '支付故障'; header('refresh:3;url=/'); } $this->render('pay_msg', $this->data, TRUE); } function notifyAlipay(){ require_once(Doo::conf()->SITE_PATH."protected/class/alipay/alipay.config.php"); require_once(Doo::conf()->SITE_PATH."protected/class/alipay/lib/alipay_notify.class.php"); $alipayNotify = new AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) { $v_oid = $_POST['out_trade_no']; //商户订单号 $trade_no = $_POST['trade_no']; //支付宝交易号 $trade_status = $_POST['trade_status']; //交易状态 $v_amount=$_POST['total_fee']; //交易金额 if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') { $order = Doo::loadModel('order', TRUE); $callbackData = $order->getRowsBytrade_id($v_oid); if ($callbackData['status'] == 2) { if ($callbackData['price'] == $v_amount) { $order->trade_sn = $v_oid; $comment = $order->find(array('limit' => 1, 'select' => 'id', 'where' => 'trade_sn='.$v_oid, 'asArray' => TRUE)); $order->id = $comment['id']; $order->paytime = time(); $order->status = 1; $succvalue = $order->update(); if ($succvalue) { Doo::loadModel('classuser'); $classuser = new Classuser(); $classuser->userid = $callbackData['userid']; $classuser->classid = $callbackData['classid']; $classuser->price = $callbackData['price']; $classuser->issuccess = 0; $result = $classuser->insert(); if($result) { echo "success"; die; } } } } } echo "success"; }else { echo "fail"; } } /** * 生成流水号 */ function create_sn() { mt_srand((double) microtime() * 1000000); return date("YmdHis") . str_pad(mt_rand(1, 99999), 5, "0", STR_PAD_LEFT); } // 检测手机格式 function checkMobile($mobile) { if(preg_match("/^1[34578]{1}\d{9}$/",$mobile)){ return TRUE; } else { return FALSE; } } //验证身份证是否有效 function validateIDCard($IDCard) { if (strlen($IDCard) == 18) { return $this->check18IDCard($IDCard); } elseif ((strlen($IDCard) == 15)) { $IDCard = $this->convertIDCard15to18($IDCard); return $this->check18IDCard($IDCard); } else { return false; } } //计算身份证的最后一位验证码,根据国家标准GB 11643-1999 function calcIDCardCode($IDCardBody) { if (strlen($IDCardBody) != 17) { return false; } //加权因子 $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //校验码对应值 $code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $checksum = 0; for ($i = 0; $i < strlen($IDCardBody); $i++) { $checksum += substr($IDCardBody, $i, 1) * $factor[$i]; } return $code[$checksum % 11]; } // 将15位身份证升级到18位 function convertIDCard15to18($IDCard) { if (strlen($IDCard) != 15) { return false; } else { // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 if (array_search(substr($IDCard, 12, 3), array('996', '997', '998', '999')) !== false) { $IDCard = substr($IDCard, 0, 6) . '18' . substr($IDCard, 6, 9); } else { $IDCard = substr($IDCard, 0, 6) . '19' . substr($IDCard, 6, 9); } } $IDCard = $IDCard . $this->calcIDCardCode($IDCard); return $IDCard; } // 18位身份证校验码有效性检查 function check18IDCard($IDCard) { if (strlen($IDCard) != 18) { return false; } $IDCardBody = substr($IDCard, 0, 17); //身份证主体 $IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码 if ($this->calcIDCardCode($IDCardBody) != $IDCardCode) { return false; } else { return true; } } /** * 获取get或者POST值 * @param string $name 属性名称 * @return fixed 值 */ function get_args($name) { if (isset ( $_GET [$name] )) { if (is_array ( $_GET [$name] )) return $_GET [$name]; else return addslashes ( $_GET [$name] ); } elseif (isset ( $_POST [$name] )) { if (is_array ( $_POST [$name] )) return $_POST [$name]; else return addslashes ( $_POST [$name] ); } else { return false; } } function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; if (! $key) { $key = "ZHKT"; } $key = md5 ( $key ); $keya = md5 ( substr ( $key, 0, 16 ) ); $keyb = md5 ( substr ( $key, 16, 16 ) ); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr ( $string, 0, $ckey_length ) : substr ( md5 ( microtime () ), - $ckey_length )) : ''; $cryptkey = $keya . md5 ( $keya . $keyc ); $key_length = strlen ( $cryptkey ); $string = $operation == 'DECODE' ? base64_decode ( substr ( $string, $ckey_length ) ) : sprintf ( '%010d', $expiry ? $expiry + time () : 0 ) . substr ( md5 ( $string . $keyb ), 0, 16 ) . $string; $string_length = strlen ( $string ); $result = ''; $box = range ( 0, 255 ); $rndkey = array (); for($i = 0; $i <= 255; $i ++) { $rndkey [$i] = ord ( $cryptkey [$i % $key_length] ); } for($j = $i = 0; $i < 256; $i ++) { $j = ($j + $box [$i] + $rndkey [$i]) % 256; $tmp = $box [$i]; $box [$i] = $box [$j]; $box [$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i ++) { $a = ($a + 1) % 256; $j = ($j + $box [$a]) % 256; $tmp = $box [$a]; $box [$a] = $box [$j]; $box [$j] = $tmp; $result .= chr ( ord ( $string [$i] ) ^ ($box [($box [$a] + $box [$j]) % 256]) ); } if ($operation == 'DECODE') { if ((substr ( $result, 0, 10 ) == 0 || substr ( $result, 0, 10 ) - time () > 0) && substr ( $result, 10, 16 ) == substr ( md5 ( substr ( $result, 26 ) . $keyb ), 0, 16 )) { return substr ( $result, 26 ); } else { return ''; } } else { return $keyc . str_replace ( '=', '', base64_encode ( $result ) ); } } }