http_user_agent = $_SERVER['HTTP_USER_AGENT']; } public function init() { $memberinfo = $this->memberinfo; $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $SEO = seo($siteid); $CATEGORYS = getcache('category_content_'.$siteid,'commons'); //初始化phpsso $phpsso_api_url = $this->_init_phpsso(); //获取头像数组 $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']); $grouplist = getcache('grouplist'); $memberinfo['groupname'] = $grouplist[$memberinfo[groupid]]['name']; include template('member', 'index'); } public function register() { $this->_session_start(); //获取用户siteid $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $SEO = seo($siteid); $CATEGORYS = getcache('category_content_'.$siteid,'commons'); //定义站点id常量 if (!defined('SITEID')) { define('SITEID', $siteid); } //加载用户模块配置 $member_setting = getcache('member_setting'); if(!$member_setting['allowregister']) { showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login'); } //加载短信模块配置 $sms_setting_arr = getcache('sms','sms'); $sms_setting = $sms_setting_arr[$siteid]; header("Cache-control: private"); if(isset($_POST['dosubmit'])) { if(empty($_SESSION['connectid'])) { //判断验证码 $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER); if ($_SESSION['code'] != strtolower($code)) { showmessage(L('code_error'), HTTP_REFERER); } } $userinfo = array(); $userinfo['encrypt'] = create_randomstr(6); $userinfo['username'] = (isset($_POST['username']) && is_username($_POST['username'])) ? $_POST['username'] : exit('0'); $userinfo['nickname'] = (isset($_POST['nickname']) && is_username($_POST['nickname'])) ? $_POST['nickname'] : ''; $userinfo['email'] = (isset($_POST['email']) && is_email($_POST['email'])) ? $_POST['email'] : exit('0'); $userinfo['password'] = (isset($_POST['password']) && is_badword($_POST['password'])==false) ? $_POST['password'] : exit('0'); $userinfo['email'] = (isset($_POST['email']) && is_email($_POST['email'])) ? $_POST['email'] : exit('0'); $userinfo['modelid'] = isset($_POST['modelid']) ? intval($_POST['modelid']) : 10; $userinfo['regip'] = ip(); $userinfo['point'] = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0; $userinfo['amount'] = $member_setting['defualtamount'] ? $member_setting['defualtamount'] : 0; $userinfo['regdate'] = $userinfo['lastdate'] = SYS_TIME; $userinfo['siteid'] = $siteid; $userinfo['connectid'] = isset($_SESSION['connectid']) ? $_SESSION['connectid'] : ''; $userinfo['from'] = isset($_SESSION['from']) ? $_SESSION['from'] : ''; //手机强制验证 if($member_setting[mobile_checktype]=='1'){ //取用户手机号 $mobile_verify = $_POST['mobile_verify'] ? intval($_POST['mobile_verify']) : ''; if($mobile_verify=='') showmessage('请提供正确的手机验证码!', HTTP_REFERER); $sms_report_db = pc_base::load_model('sms_report_model'); $posttime = SYS_TIME-360; $where = "`id_code`='$mobile_verify' AND `posttime`>'$posttime'"; $r = $sms_report_db->get_one($where,'*','id DESC'); if(!empty($r)){ $userinfo['mobile'] = $r['mobile']; }else{ showmessage('未检测到正确的手机号码!', HTTP_REFERER); } }elseif($member_setting[mobile_checktype]=='2'){ //获取验证码,直接通过POST,取mobile值 $userinfo['mobile'] = isset($_POST['mobile']) ? $_POST['mobile'] : ''; } if($userinfo['mobile']!=""){ if(!preg_match('/^1([0-9]{10})$/',$userinfo['mobile'])) { showmessage('请提供正确的手机号码!', HTTP_REFERER); } } unset($_SESSION['connectid'], $_SESSION['from']); if($member_setting['enablemailcheck']) { //是否需要邮件验证 $userinfo['groupid'] = 7; } elseif($member_setting['registerverify']) { //是否需要管理员审核 $modelinfo_str = $userinfo['modelinfo'] = isset($_POST['info']) ? array2string(array_map("safe_replace", new_html_special_chars($_POST['info']))) : ''; $this->verify_db = pc_base::load_model('member_verify_model'); unset($userinfo['lastdate'],$userinfo['connectid'],$userinfo['from']); $userinfo['modelinfo'] = $modelinfo_str; $this->verify_db->insert($userinfo); showmessage(L('operation_success'), 'index.php?m=member&c=index&a=register&t=3'); } else { //查看当前模型是否开启了短信验证功能 $model_field_cache = getcache('model_field_'.$userinfo['modelid'],'model'); if(isset($model_field_cache['mobile']) && $model_field_cache['mobile']['disabled']==0) { $mobile = $_POST['info']['mobile']; if(!preg_match('/^1([0-9]{10})$/',$mobile)) showmessage(L('input_right_mobile')); $sms_report_db = pc_base::load_model('sms_report_model'); $posttime = SYS_TIME-300; $where = "`mobile`='$mobile' AND `posttime`>'$posttime'"; $r = $sms_report_db->get_one($where); if(!$r || $r['id_code']!=$_POST['mobile_verify']) showmessage(L('error_sms_code')); } $userinfo['groupid'] = $this->_get_usergroup_bypoint($userinfo['point']); } //附表信息验证 通过模型获取会员信息 if($member_setting['choosemodel']) { require_once CACHE_MODEL_PATH.'member_input.class.php'; require_once CACHE_MODEL_PATH.'member_update.class.php'; $member_input = new member_input($userinfo['modelid']); $_POST['info'] = array_map('new_html_special_chars',$_POST['info']); $user_model_info = $member_input->get($_POST['info']); } if(pc_base::load_config('system', 'phpsso')) { $this->_init_phpsso(); $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']); if($status > 0) { $userinfo['phpssouid'] = $status; //传入phpsso为明文密码,加密后存入phpcms_v9 $password = $userinfo['password']; $userinfo['password'] = password($userinfo['password'], $userinfo['encrypt']); $userid = $this->db->insert($userinfo, 1); if($member_setting['choosemodel']) { //如果开启选择模型 $user_model_info['userid'] = $userid; //插入会员模型数据 $this->db->set_model($userinfo['modelid']); $this->db->insert($user_model_info); } if($userid > 0) { //执行登陆操作 if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; if($userinfo['groupid'] == 7) { param::set_cookie('_username', $userinfo['username'], $cookietime); param::set_cookie('email', $userinfo['email'], $cookietime); } else { $phpcms_auth = sys_auth($userid."\t".$userinfo['password'], 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $userinfo['username'], $cookietime); param::set_cookie('_nickname', $userinfo['nickname'], $cookietime); param::set_cookie('_groupid', $userinfo['groupid'], $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); } } //如果需要邮箱认证 if($member_setting['enablemailcheck']) { pc_base::load_sys_func('mail'); $code = sys_auth($userid.'|'.microtime(true), 'ENCODE', get_auth_key('email')); $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1"; $message = $member_setting['registerverifymessage']; $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array(''.L('please_click').'',$url,$userinfo['username'],$userinfo['email'],$password), $message); sendmail($userinfo['email'], L('reg_verify_email'), $message); //设置当前注册账号COOKIE,为第二步重发邮件所用 param::set_cookie('_regusername', $userinfo['username'], $cookietime); param::set_cookie('_reguserid', $userid, $cookietime); param::set_cookie('_reguseruid', $userinfo['phpssouid'], $cookietime); showmessage(L('operation_success'), 'index.php?m=member&c=index&a=register&t=2'); } else { //如果不需要邮箱认证、直接登录其他应用 $synloginstr = $this->client->ps_member_synlogin($userinfo['phpssouid']); showmessage(L('operation_success').$synloginstr, 'index.php?m=member&c=index&a=init'); } } } else { showmessage(L('enable_register').L('enable_phpsso'), 'index.php?m=member&c=index&a=login'); } showmessage(L('operation_failure'), HTTP_REFERER); } else { if(!pc_base::load_config('system', 'phpsso')) { showmessage(L('enable_register').L('enable_phpsso'), 'index.php?m=member&c=index&a=login'); } if(!empty($_GET['verify'])) { $code = isset($_GET['code']) ? trim($_GET['code']) : showmessage(L('operation_failure'), 'index.php?m=member&c=index'); $code_res = sys_auth($code, 'DECODE', get_auth_key('email')); $code_arr = explode('|', $code_res); $userid = isset($code_arr[0]) ? $code_arr[0] : ''; $userid = is_numeric($userid) ? $userid : showmessage(L('operation_failure'), 'index.php?m=member&c=index'); $this->db->update(array('groupid'=>$this->_get_usergroup_bypoint()), array('userid'=>$userid)); showmessage(L('operation_success'), 'index.php?m=member&c=index'); } elseif(!empty($_GET['protocol'])) { include template('member', 'protocol'); } else { //过滤非当前站点会员模型 $modellist = getcache('member_model', 'commons'); foreach($modellist as $k=>$v) { if($v['siteid']!=$siteid || $v['disabled']) { unset($modellist[$k]); } } if(empty($modellist)) { showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER); } //是否开启选择会员模型选项 if($member_setting['choosemodel']) { $first_model = array_pop(array_reverse($modellist)); $modelid = isset($_GET['modelid']) && in_array($_GET['modelid'], array_keys($modellist)) ? intval($_GET['modelid']) : $first_model['modelid']; if(array_key_exists($modelid, $modellist)) { //获取会员模型表单 require CACHE_MODEL_PATH.'member_form.class.php'; $member_form = new member_form($modelid); $this->db->set_model($modelid); $forminfos = $forminfos_arr = $member_form->get(); //万能字段过滤 foreach($forminfos as $field=>$info) { if($info['isomnipotent']) { unset($forminfos[$field]); } else { if($info['formtype']=='omnipotent') { foreach($forminfos_arr as $_fm=>$_fm_value) { if($_fm_value['isomnipotent']) { $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']); } } $forminfos[$field]['form'] = $info['form']; } } } $formValidator = $member_form->formValidator; } } $description = $modellist[$modelid]['description']; include template('member', 'register'); } } } /* * 测试邮件配置 */ public function send_newmail() { $_username = param::get_cookie('_regusername'); $_userid = param::get_cookie('_reguserid'); $_ssouid = param::get_cookie('_reguseruid'); $newemail = $_GET['newemail']; if($newemail=='' || !is_email($newemail)){//邮箱为空,直接返回错误 return '2'; } //验证userid和username是否匹配 $r = $this->db->get_one(array('userid'=>intval($_userid))); if($r[username]!=$_username){ return '2'; } $this->_init_phpsso(); $status = $this->client->ps_checkemail($newemail); if($status=='-5'){//邮箱被占用 exit('-1'); } if ($status==-1) { $status = $this->client->ps_get_member_info($newemail, 3); if($status) { $status = unserialize($status); //接口返回序列化,进行判断 if (!isset($status['uid']) || $status['uid'] != intval($_ssouid)) { exit('-1'); } } else { exit('-1'); } } //验证邮箱格式 pc_base::load_sys_func('mail'); $code = sys_auth($_userid.'|'.microtime(true), 'ENCODE', get_auth_key('email')); $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1"; //读取配置获取验证信息 $member_setting = getcache('member_setting'); $message = $member_setting['registerverifymessage']; $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array(''.L('please_click').'',$url,$_username,$newemail,$password), $message); if(sendmail($newemail, L('reg_verify_email'), $message)){ //更新新的邮箱,用来验证 $this->db->update(array('email'=>$newemail), array('userid'=>$_userid)); $this->client->ps_member_edit($_username, $newemail, '', '', $_ssouid); $return = '1'; }else{ $return = '2'; } echo $return; } public function account_manage() { $memberinfo = $this->memberinfo; //初始化phpsso $phpsso_api_url = $this->_init_phpsso(); //获取头像数组 $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']); $grouplist = getcache('grouplist'); $member_model = getcache('member_model', 'commons'); //获取用户模型数据 $this->db->set_model($this->memberinfo['modelid']); $member_modelinfo_arr = $this->db->get_one(array('userid'=>$this->memberinfo['userid'])); $model_info = getcache('model_field_'.$this->memberinfo['modelid'], 'model'); foreach($model_info as $k=>$v) { if($v['formtype'] == 'omnipotent') continue; if($v['formtype'] == 'image') { $member_modelinfo[$v['name']] = ""; } elseif($v['formtype'] == 'datetime' && $v['fieldtype'] == 'int') { //如果为日期字段 $member_modelinfo[$v['name']] = format::date($member_modelinfo_arr[$k], $v['format'] == 'Y-m-d H:i:s' ? 1 : 0); } elseif($v['formtype'] == 'images') { $tmp = string2array($member_modelinfo_arr[$k]); $member_modelinfo[$v['name']] = ''; if(is_array($tmp)) { foreach ($tmp as $tv) { $member_modelinfo[$v['name']] .= " "; } unset($tmp); } } elseif($v['formtype'] == 'box') { //box字段,获取字段名称和值的数组 $tmp = explode("\n",$v['options']); if(is_array($tmp)) { foreach($tmp as $boxv) { $box_tmp_arr = explode('|', trim($boxv)); if(is_array($box_tmp_arr) && isset($box_tmp_arr[1]) && isset($box_tmp_arr[0])) { $box_tmp[$box_tmp_arr[1]] = $box_tmp_arr[0]; $tmp_key = intval($member_modelinfo_arr[$k]); } } } if(isset($box_tmp[$tmp_key])) { $member_modelinfo[$v['name']] = $box_tmp[$tmp_key]; } else { $member_modelinfo[$v['name']] = $member_modelinfo_arr[$k]; } unset($tmp, $tmp_key, $box_tmp, $box_tmp_arr); } elseif($v['formtype'] == 'linkage') { //如果为联动菜单 $tmp = string2array($v['setting']); $tmpid = $tmp['linkageid']; $linkagelist = getcache($tmpid, 'linkage'); $fullname = $this->_get_linkage_fullname($member_modelinfo_arr[$k], $linkagelist); $member_modelinfo[$v['name']] = substr($fullname, 0, -1); unset($tmp, $tmpid, $linkagelist, $fullname); } else { $member_modelinfo[$v['name']] = $member_modelinfo_arr[$k]; } } include template('member', 'account_manage'); } public function account_manage_avatar() { $memberinfo = $this->memberinfo; //初始化phpsso $phpsso_api_url = $this->_init_phpsso(); $ps_auth_key = pc_base::load_config('system', 'phpsso_auth_key'); $auth_data = $this->client->auth_data(array('uid'=>$this->memberinfo['phpssouid'],'sys_auth_time'=>microtime(true)), '', $ps_auth_key); $upurl = base64_encode($phpsso_api_url.'/index.php?m=phpsso&c=index&a=uploadavatar&auth_data='.$auth_data); //获取头像数组 $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']); include template('member', 'account_manage_avatar'); } public function account_manage_security() { $memberinfo = $this->memberinfo; include template('member', 'account_manage_security'); } public function account_manage_info() { if(isset($_POST['dosubmit'])) { //更新用户昵称 $nickname = isset($_POST['nickname']) && is_username(trim($_POST['nickname'])) ? trim($_POST['nickname']) : ''; $nickname = safe_replace($nickname); if($nickname) { $this->db->update(array('nickname'=>$nickname), array('userid'=>$this->memberinfo['userid'])); if(!isset($cookietime)) { $get_cookietime = param::get_cookie('cookietime'); } $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; param::set_cookie('_nickname', $nickname, $cookietime); } require_once CACHE_MODEL_PATH.'member_input.class.php'; require_once CACHE_MODEL_PATH.'member_update.class.php'; $member_input = new member_input($this->memberinfo['modelid']); $modelinfo = $member_input->get($_POST['info']); $this->db->set_model($this->memberinfo['modelid']); $membermodelinfo = $this->db->get_one(array('userid'=>$this->memberinfo['userid'])); if(!empty($membermodelinfo)) { $this->db->update($modelinfo, array('userid'=>$this->memberinfo['userid'])); } else { $modelinfo['userid'] = $this->memberinfo['userid']; $this->db->insert($modelinfo); } showmessage(L('operation_success'), HTTP_REFERER); } else { $memberinfo = $this->memberinfo; //获取会员模型表单 require CACHE_MODEL_PATH.'member_form.class.php'; $member_form = new member_form($this->memberinfo['modelid']); $this->db->set_model($this->memberinfo['modelid']); $membermodelinfo = $this->db->get_one(array('userid'=>$this->memberinfo['userid'])); $forminfos = $forminfos_arr = $member_form->get($membermodelinfo); //万能字段过滤 foreach($forminfos as $field=>$info) { if($info['isomnipotent']) { unset($forminfos[$field]); } else { if($info['formtype']=='omnipotent') { foreach($forminfos_arr as $_fm=>$_fm_value) { if($_fm_value['isomnipotent']) { $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']); } } $forminfos[$field]['form'] = $info['form']; } } } $formValidator = $member_form->formValidator; include template('member', 'account_manage_info'); } } public function account_manage_password() { if(isset($_POST['dosubmit'])) { $updateinfo = array(); if(!is_password($_POST['info']['password'])) { showmessage(L('password_format_incorrect'), HTTP_REFERER); } if($this->memberinfo['password'] != password($_POST['info']['password'], $this->memberinfo['encrypt'])) { showmessage(L('old_password_incorrect'), HTTP_REFERER); } //修改会员邮箱 if($this->memberinfo['email'] != $_POST['info']['email'] && is_email($_POST['info']['email'])) { $email = $_POST['info']['email']; $updateinfo['email'] = $_POST['info']['email']; } else { $email = ''; } if(!is_password($_POST['info']['newpassword']) || is_badword($_POST['info']['newpassword'])) { showmessage(L('password_format_incorrect'), HTTP_REFERER); } $newpassword = password($_POST['info']['newpassword'], $this->memberinfo['encrypt']); $updateinfo['password'] = $newpassword; $this->db->update($updateinfo, array('userid'=>$this->memberinfo['userid'])); if(pc_base::load_config('system', 'phpsso')) { //初始化phpsso $this->_init_phpsso(); $res = $this->client->ps_member_edit('', $email, $_POST['info']['password'], $_POST['info']['newpassword'], $this->memberinfo['phpssouid'], $this->memberinfo['encrypt']); $message_error = array('-1'=>L('user_not_exist'), '-2'=>L('old_password_incorrect'), '-3'=>L('email_already_exist'), '-4'=>L('email_error'), '-5'=>L('param_error')); if ($res < 0) showmessage($message_error[$res]); } showmessage(L('operation_success'), HTTP_REFERER); } else { $show_validator = true; $memberinfo = $this->memberinfo; include template('member', 'account_manage_password'); } } //更换手机号码 public function account_change_mobile() { $memberinfo = $this->memberinfo; if(isset($_POST['dosubmit'])) { if(!is_password($_POST['password'])) { showmessage(L('password_format_incorrect'), HTTP_REFERER); } if($this->memberinfo['password'] != password($_POST['password'], $this->memberinfo['encrypt'])) { showmessage(L('old_password_incorrect')); } $sms_report_db = pc_base::load_model('sms_report_model'); $mobile_verify = $_POST['mobile_verify']; $mobile = $_POST['mobile']; if($mobile){ if(!preg_match('/^1([0-9]{10})$/',$mobile)) exit('check phone error'); $posttime = SYS_TIME-600; $where = "`mobile`='$mobile' AND `send_userid`='".$memberinfo['userid']."' AND `posttime`>'$posttime'"; $r = $sms_report_db->get_one($where,'id,id_code','id DESC'); if($r && $r['id_code']==$mobile_verify) { $sms_report_db->update(array('id_code'=>''),$where); $this->db->update(array('mobile'=>$mobile),array('userid'=>$memberinfo['userid'])); showmessage("手机号码更新成功!",'?m=member&c=index&a=account_change_mobile&t=1'); } else { showmessage("短信验证码错误!请重新获取!"); } }else{ showmessage("短信验证码已过期!请重新获取!"); } } else { include template('member', 'account_change_mobile'); } } //选择密码找回方式 public function public_get_password_type() { $siteid = intval($_GET['siteid']); include template('member', 'get_password_type'); } public function account_manage_upgrade() { $memberinfo = $this->memberinfo; $grouplist = getcache('grouplist'); if(empty($grouplist[$memberinfo['groupid']]['allowupgrade'])) { showmessage(L('deny_upgrade'), HTTP_REFERER); } if(isset($_POST['upgrade_type']) && intval($_POST['upgrade_type']) < 0) { showmessage(L('operation_failure'), HTTP_REFERER); } if(isset($_POST['upgrade_date']) && intval($_POST['upgrade_date']) < 0) { showmessage(L('operation_failure'), HTTP_REFERER); } if(isset($_POST['dosubmit'])) { $groupid = isset($_POST['groupid']) ? intval($_POST['groupid']) : showmessage(L('operation_failure'), HTTP_REFERER); $upgrade_type = isset($_POST['upgrade_type']) ? intval($_POST['upgrade_type']) : showmessage(L('operation_failure'), HTTP_REFERER); $upgrade_date = !empty($_POST['upgrade_date']) ? intval($_POST['upgrade_date']) : showmessage(L('operation_failure'), HTTP_REFERER); //消费类型,包年、包月、包日,价格 $typearr = array($grouplist[$groupid]['price_y'], $grouplist[$groupid]['price_m'], $grouplist[$groupid]['price_d']); //消费类型,包年、包月、包日,时间 $typedatearr = array('366', '31', '1'); //消费的价格 $cost = $typearr[$upgrade_type]*$upgrade_date; //购买时间 $buydate = $typedatearr[$upgrade_type]*$upgrade_date*86400; $overduedate = $memberinfo['overduedate'] > SYS_TIME ? ($memberinfo['overduedate']+$buydate) : (SYS_TIME+$buydate); if($memberinfo['amount'] >= $cost) { $this->db->update(array('groupid'=>$groupid, 'overduedate'=>$overduedate, 'vip'=>1), array('userid'=>$memberinfo['userid'])); //消费记录 pc_base::load_app_class('spend','pay',0); spend::amount($cost, L('allowupgrade'), $memberinfo['userid'], $memberinfo['username']); showmessage(L('operation_success'), 'index.php?m=member&c=index&a=init'); } else { showmessage(L('operation_failure'), HTTP_REFERER); } } else { $groupid = isset($_GET['groupid']) ? intval($_GET['groupid']) : ''; //初始化phpsso $phpsso_api_url = $this->_init_phpsso(); //获取头像数组 $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']); $memberinfo['groupname'] = $grouplist[$memberinfo[groupid]]['name']; $memberinfo['grouppoint'] = $grouplist[$memberinfo[groupid]]['point']; unset($grouplist[$memberinfo['groupid']]); include template('member', 'account_manage_upgrade'); } } public function login() { $this->_session_start(); //获取用户siteid $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $SEO = seo($siteid); $CATEGORYS = getcache('category_content_'.$siteid,'commons'); //定义站点id常量 if (!defined('SITEID')) { define('SITEID', $siteid); } if(isset($_POST['dosubmit'])) { if(empty($_SESSION['connectid'])) { //判断验证码 $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER); if ($_SESSION['code'] != strtolower($code)) { $_SESSION['code'] = ''; showmessage(L('code_error'), HTTP_REFERER); } $_SESSION['code'] = ''; } $username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER); $password = isset($_POST['password']) && trim($_POST['password']) ? addslashes(urldecode(trim($_POST['password'] ))) : showmessage(L('password_empty'), HTTP_REFERER); is_password($_POST['password']) && is_badword($_POST['password'])==false ? trim($_POST['password']) : showmessage(L('password_format_incorrect'), HTTP_REFERER); $cookietime = intval($_POST['cookietime']); $synloginstr = ''; //同步登陆js代码 if(pc_base::load_config('system', 'phpsso')) { $this->_init_phpsso(); $status = $this->client->ps_member_login($username, $password); $memberinfo = unserialize($status); if(isset($memberinfo['uid'])) { //查询帐号 $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid'])); if(!$r) { //插入会员详细信息,会员不存在 插入会员 $info = array( 'phpssouid'=>$memberinfo['uid'], 'username'=>$memberinfo['username'], 'password'=>$memberinfo['password'], 'encrypt'=>$memberinfo['random'], 'email'=>$memberinfo['email'], 'regip'=>$memberinfo['regip'], 'regdate'=>$memberinfo['regdate'], 'lastip'=>$memberinfo['lastip'], 'lastdate'=>$memberinfo['lastdate'], 'groupid'=>$this->_get_usergroup_bypoint(), //会员默认组 'modelid'=>10, //普通会员 ); //如果是connect用户 if(!empty($_SESSION['connectid'])) { $userinfo['connectid'] = $_SESSION['connectid']; } if(!empty($_SESSION['from'])) { $userinfo['from'] = $_SESSION['from']; } unset($_SESSION['connectid'], $_SESSION['from']); $this->db->insert($info); unset($info); $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid'])); } $password = $r['password']; $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); } else { if($status == -1) { //用户不存在 showmessage(L('user_not_exist'), 'index.php?m=member&c=index&a=login'); } elseif($status == -2) { //密码错误 showmessage(L('password_error'), 'index.php?m=member&c=index&a=login'); } else { showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login'); } } } else { //密码错误剩余重试次数 $this->times_db = pc_base::load_model('times_model'); $rtime = $this->times_db->get_one(array('username'=>$username)); if($rtime['times'] > 4) { $minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60); showmessage(L('wait_1_hour', array('minute'=>$minute))); } //查询帐号 $r = $this->db->get_one(array('username'=>$username)); if(!$r) showmessage(L('user_not_exist'),'index.php?m=member&c=index&a=login'); //验证用户密码 $password = md5(md5(trim($password)).$r['encrypt']); if($r['password'] != $password) { $ip = ip(); if($rtime && $rtime['times'] < 5) { $times = 5 - intval($rtime['times']); $this->times_db->update(array('ip'=>$ip, 'times'=>'+=1'), array('username'=>$username)); } else { $this->times_db->insert(array('username'=>$username, 'ip'=>$ip, 'logintime'=>SYS_TIME, 'times'=>1)); $times = 5; } showmessage(L('password_error', array('times'=>$times)), 'index.php?m=member&c=index&a=login', 3000); } $this->times_db->delete(array('username'=>$username)); } //如果用户被锁定 if($r['islock']) { showmessage(L('user_is_lock')); } $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME); //vip过期,更新vip和会员组 if($r['overduedate'] < SYS_TIME) { $updatearr['vip'] = 0; } //检查用户积分,更新新用户组,除去邮箱认证、禁止访问、游客组用户、vip用户,如果该用户组不允许自助升级则不进行该操作 if($r['point'] >= 0 && !in_array($r['groupid'], array('1', '7', '8')) && empty($r[vip])) { $grouplist = getcache('grouplist'); if(!empty($grouplist[$r['groupid']]['allowupgrade'])) { $check_groupid = $this->_get_usergroup_bypoint($r['point']); if($check_groupid != $r['groupid']) { $updatearr['groupid'] = $groupid = $check_groupid; } } } //如果是connect用户 if(!empty($_SESSION['connectid'])) { $updatearr['connectid'] = $_SESSION['connectid']; } if(!empty($_SESSION['from'])) { $updatearr['from'] = $_SESSION['from']; } unset($_SESSION['connectid'], $_SESSION['from']); $this->db->update($updatearr, array('userid'=>$userid)); if(!isset($cookietime)) { $get_cookietime = param::get_cookie('cookietime'); } $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); //param::set_cookie('cookietime', $_cookietime, $cookietime); $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index'; showmessage(L('login_success').$synloginstr, $forward); } else { $setting = pc_base::load_config('system'); $forward = isset($_GET['forward']) && trim($_GET['forward']) ? urlencode($_GET['forward']) : ''; $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $siteinfo = siteinfo($siteid); include template('member', 'login'); } } public function logout() { $setting = pc_base::load_config('system'); //snda退出 if($setting['snda_enable'] && param::get_cookie('_from')=='snda') { param::set_cookie('_from', ''); $forward = isset($_GET['forward']) && trim($_GET['forward']) ? urlencode($_GET['forward']) : ''; $logouturl = 'https://cas.sdo.com/cas/logout?url='.urlencode(APP_PATH.'index.php?m=member&c=index&a=logout&forward='.$forward); header('Location: '.$logouturl); } else { $synlogoutstr = ''; //同步退出js代码 if(pc_base::load_config('system', 'phpsso')) { $this->_init_phpsso(); $synlogoutstr = $this->client->ps_member_synlogout(); } param::set_cookie('auth', ''); param::set_cookie('_userid', ''); param::set_cookie('_username', ''); param::set_cookie('_groupid', ''); param::set_cookie('_nickname', ''); param::set_cookie('cookietime', ''); $forward = isset($_GET['forward']) && trim($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index&a=login'; showmessage(L('logout_success').$synlogoutstr, $forward); } } /** * 我的收藏 * */ public function favorite() { $this->favorite_db = pc_base::load_model('favorite_model'); $memberinfo = $this->memberinfo; if(isset($_GET['id']) && trim($_GET['id'])) { $this->favorite_db->delete(array('userid'=>$memberinfo['userid'], 'id'=>intval($_GET['id']))); showmessage(L('operation_success'), HTTP_REFERER); } else { $page = isset($_GET['page']) && trim($_GET['page']) ? intval($_GET['page']) : 1; $favoritelist = $this->favorite_db->listinfo(array('userid'=>$memberinfo['userid']), 'id DESC', $page, 10); $pages = $this->favorite_db->pages; include template('member', 'favorite_list'); } } /** * 我的好友 */ public function friend() { $memberinfo = $this->memberinfo; $this->friend_db = pc_base::load_model('friend_model'); if(isset($_GET['friendid'])) { $this->friend_db->delete(array('userid'=>$memberinfo['userid'], 'friendid'=>intval($_GET['friendid']))); showmessage(L('operation_success'), HTTP_REFERER); } else { //初始化phpsso $phpsso_api_url = $this->_init_phpsso(); //我的好友列表userid $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $friendids = $this->friend_db->listinfo(array('userid'=>$memberinfo['userid']), '', $page, 10); $pages = $this->friend_db->pages; foreach($friendids as $k=>$v) { $friendlist[$k]['friendid'] = $v['friendid']; $friendlist[$k]['avatar'] = $this->client->ps_getavatar($v['phpssouid']); $friendlist[$k]['is'] = $v['is']; } include template('member', 'friend_list'); } } /** * 积分兑换 */ public function change_credit() { $memberinfo = $this->memberinfo; //加载用户模块配置 $member_setting = getcache('member_setting'); $this->_init_phpsso(); $setting = $this->client->ps_getcreditlist(); $outcredit = unserialize($setting); $setting = $this->client->ps_getapplist(); $applist = unserialize($setting); if(isset($_POST['dosubmit'])) { //本系统积分兑换数 $fromvalue = intval($_POST['fromvalue']); //本系统积分类型 $from = $_POST['from']; $toappid_to = explode('_', $_POST['to']); //目标系统appid $toappid = $toappid_to[0]; //目标系统积分类型 $to = $toappid_to[1]; if($from == 1) { if($memberinfo['point'] < $fromvalue) { showmessage(L('need_more_point'), HTTP_REFERER); } } elseif($from == 2) { if($memberinfo['amount'] < $fromvalue) { showmessage(L('need_more_amount'), HTTP_REFERER); } } else { showmessage(L('credit_setting_error'), HTTP_REFERER); } $status = $this->client->ps_changecredit($memberinfo['phpssouid'], $from, $toappid, $to, $fromvalue); if($status == 1) { if($from == 1) { $this->db->update(array('point'=>"-=$fromvalue"), array('userid'=>$memberinfo['userid'])); } elseif($from == 2) { $this->db->update(array('amount'=>"-=$fromvalue"), array('userid'=>$memberinfo['userid'])); } showmessage(L('operation_success'), HTTP_REFERER); } else { showmessage(L('operation_failure'), HTTP_REFERER); } } elseif(isset($_POST['buy'])) { if(!is_numeric($_POST['money']) || $_POST['money'] < 0) { showmessage(L('money_error'), HTTP_REFERER); } else { $money = intval($_POST['money']); } if($memberinfo['amount'] < $money) { showmessage(L('short_of_money'), HTTP_REFERER); } //此处比率读取用户配置 $point = $money*$member_setting['rmb_point_rate']; $this->db->update(array('point'=>"+=$point"), array('userid'=>$memberinfo['userid'])); //加入消费记录,同时扣除金钱 pc_base::load_app_class('spend','pay',0); spend::amount($money, L('buy_point'), $memberinfo['userid'], $memberinfo['username']); showmessage(L('operation_success'), HTTP_REFERER); } else { $credit_list = pc_base::load_config('credit'); include template('member', 'change_credit'); } } //mini登陆条 public function mini() { $_username = param::get_cookie('_username'); $_userid = param::get_cookie('_userid'); $siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : ''; //定义站点id常量 if (!defined('SITEID')) { define('SITEID', $siteid); } $snda_enable = pc_base::load_config('system', 'snda_enable'); include template('member', 'mini'); } /** * 初始化phpsso * about phpsso, include client and client configure * @return string phpsso_api_url phpsso地址 */ private function _init_phpsso() { pc_base::load_app_class('client', '', 0); define('APPID', pc_base::load_config('system', 'phpsso_appid')); $phpsso_api_url = pc_base::load_config('system', 'phpsso_api_url'); $phpsso_auth_key = pc_base::load_config('system', 'phpsso_auth_key'); $this->client = new client($phpsso_api_url, $phpsso_auth_key); return $phpsso_api_url; } protected function _checkname($username) { $username = trim($username); if ($this->db->get_one(array('username'=>$username))){ return false; } return true; } private function _session_start() { $session_storage = 'session_'.pc_base::load_config('system','session_storage'); pc_base::load_sys_class($session_storage); } /* * 通过linkageid获取名字路径 */ protected function _get_linkage_fullname($linkageid, $linkagelist) { $fullname = ''; if($linkagelist['data'][$linkageid]['parentid'] != 0) { $fullname = $this->_get_linkage_fullname($linkagelist['data'][$linkageid]['parentid'], $linkagelist); } //所在地区名称 $return = $fullname.$linkagelist['data'][$linkageid]['name'].'>'; return $return; } /** *根据积分算出用户组 * @param $point int 积分数 */ protected function _get_usergroup_bypoint($point=0) { $groupid = 2; if(empty($point)) { $member_setting = getcache('member_setting'); $point = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0; } $grouplist = getcache('grouplist'); foreach ($grouplist as $k=>$v) { $grouppointlist[$k] = $v['point']; } arsort($grouppointlist); //如果超出用户组积分设置则为积分最高的用户组 if($point > max($grouppointlist)) { $groupid = key($grouppointlist); } else { foreach ($grouppointlist as $k=>$v) { if($point >= $v) { $groupid = $tmp_k; break; } $tmp_k = $k; } } return $groupid; } /** * 检查用户名 * @param string $username 用户名 * @return $status {-4:用户名禁止注册;-1:用户名已经存在 ;1:成功} */ public function public_checkname_ajax() { $username = isset($_GET['username']) && trim($_GET['username']) && is_username(trim($_GET['username'])) ? trim($_GET['username']) : exit(0); if(CHARSET != 'utf-8') { $username = iconv('utf-8', CHARSET, $username); $username = addslashes($username); } $username = safe_replace($username); //首先判断会员审核表 $this->verify_db = pc_base::load_model('member_verify_model'); if($this->verify_db->get_one(array('username'=>$username))) { exit('0'); } $this->_init_phpsso(); $status = $this->client->ps_checkname($username); if($status == -4 || $status == -1) { exit('0'); } else { exit('1'); } } /** * 检查用户昵称 * @param string $nickname 昵称 * @return $status {0:已存在;1:成功} */ public function public_checknickname_ajax() { $nickname = isset($_GET['nickname']) && trim($_GET['nickname']) && is_username(trim($_GET['nickname'])) ? trim($_GET['nickname']) : exit('0'); if(CHARSET != 'utf-8') { $nickname = iconv('utf-8', CHARSET, $nickname); $nickname = addslashes($nickname); } //首先判断会员审核表 $this->verify_db = pc_base::load_model('member_verify_model'); if($this->verify_db->get_one(array('nickname'=>$nickname))) { exit('0'); } if(isset($_GET['userid'])) { $userid = intval($_GET['userid']); //如果是会员修改,而且NICKNAME和原来优质一致返回1,否则返回0 $info = get_memberinfo($userid); if($info['nickname'] == $nickname){//未改变 exit('1'); }else{//已改变,判断是否已有此名 $where = array('nickname'=>$nickname); $res = $this->db->get_one($where); if($res) { exit('0'); } else { exit('1'); } } } else { $where = array('nickname'=>$nickname); $res = $this->db->get_one($where); if($res) { exit('0'); } else { exit('1'); } } } /** * 检查邮箱 * @param string $email * @return $status {-1:email已经存在 ;-5:邮箱禁止注册;1:成功} */ public function public_checkemail_ajax() { $this->_init_phpsso(); $email = isset($_GET['email']) && trim($_GET['email']) && is_email(trim($_GET['email'])) ? trim($_GET['email']) : exit(0); $status = $this->client->ps_checkemail($email); if($status == -5) { //禁止注册 exit('0'); } elseif($status == -1) { //用户名已存在,但是修改用户的时候需要判断邮箱是否是当前用户的 if(isset($_GET['phpssouid'])) { //修改用户传入phpssouid $status = $this->client->ps_get_member_info($email, 3); if($status) { $status = unserialize($status); //接口返回序列化,进行判断 if (isset($status['uid']) && $status['uid'] == intval($_GET['phpssouid'])) { exit('1'); } else { exit('0'); } } else { exit('0'); } } else { exit('0'); } } else { exit('1'); } } public function public_sina_login() { define('WB_AKEY', pc_base::load_config('system', 'sina_akey')); define('WB_SKEY', pc_base::load_config('system', 'sina_skey')); define('WEB_CALLBACK', APP_PATH.'index.php?m=member&c=index&a=public_sina_login&callback=1'); pc_base::load_app_class('saetv2.ex', '' ,0); $this->_session_start(); if(isset($_GET['callback']) && trim($_GET['callback'])) { $o = new SaeTOAuthV2(WB_AKEY, WB_SKEY); if (isset($_REQUEST['code'])) { $keys = array(); $keys['code'] = $_REQUEST['code']; $keys['redirect_uri'] = WEB_CALLBACK; try { $token = $o->getAccessToken('code', $keys); } catch (OAuthException $e) { } } if ($token) { $_SESSION['token'] = $token; } $c = new SaeTClientV2(WB_AKEY, WB_SKEY, $_SESSION['token']['access_token'] ); $ms = $c->home_timeline(); // done $uid_get = $c->get_uid(); $uid = $uid_get['uid']; $me = $c->show_user_by_id( $uid);//根据ID获取用户等基本信息 if(CHARSET != 'utf-8') { $me['name'] = iconv('utf-8', CHARSET, $me['name']); $me['location'] = iconv('utf-8', CHARSET, $me['location']); $me['description'] = iconv('utf-8', CHARSET, $me['description']); $me['screen_name'] = iconv('utf-8', CHARSET, $me['screen_name']); } if(!empty($me['id'])) { //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面 $where = array('connectid'=>$me['id'], 'from'=>'sina'); $r = $this->db->get_one($where); //connect用户已经绑定本站用户 if(!empty($r)) { //读取本站用户信息,执行登录操作 $password = $r['password']; $this->_init_phpsso(); $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid)); if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index'; showmessage(L('login_success').$synloginstr, $forward); } else { //弹出绑定注册页面 $_SESSION = array(); $_SESSION['connectid'] = $me['id']; $_SESSION['from'] = 'sina'; $connect_username = $me['name']; //加载用户模块配置 $member_setting = getcache('member_setting'); if(!$member_setting['allowregister']) { showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login'); } //获取用户siteid $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; //过滤非当前站点会员模型 $modellist = getcache('member_model', 'commons'); foreach($modellist as $k=>$v) { if($v['siteid']!=$siteid || $v['disabled']) { unset($modellist[$k]); } } if(empty($modellist)) { showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER); } $modelid = 10; //设定默认值 if(array_key_exists($modelid, $modellist)) { //获取会员模型表单 require CACHE_MODEL_PATH.'member_form.class.php'; $member_form = new member_form($modelid); $this->db->set_model($modelid); $forminfos = $forminfos_arr = $member_form->get(); //万能字段过滤 foreach($forminfos as $field=>$info) { if($info['isomnipotent']) { unset($forminfos[$field]); } else { if($info['formtype']=='omnipotent') { foreach($forminfos_arr as $_fm=>$_fm_value) { if($_fm_value['isomnipotent']) { $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']); } } $forminfos[$field]['form'] = $info['form']; } } } $formValidator = $member_form->formValidator; } include template('member', 'connect'); } } else { showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login'); } } else { $o = new SaeTOAuthV2(WB_AKEY, WB_SKEY); $aurl = $o->getAuthorizeURL(WEB_CALLBACK); include template('member', 'connect_sina'); } } /** * 盛大通行证登陆 */ public function public_snda_login() { define('SNDA_AKEY', pc_base::load_config('system', 'snda_akey')); define('SNDA_SKEY', pc_base::load_config('system', 'snda_skey')); define('SNDA_CALLBACK', urlencode(APP_PATH.'index.php?m=member&c=index&a=public_snda_login&callback=1')); pc_base::load_app_class('OauthSDK', '' ,0); $this->_session_start(); if(isset($_GET['callback']) && trim($_GET['callback'])) { $o = new OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK); $code = $_REQUEST['code']; $accesstoken = $o->getAccessToken($code); if(is_numeric($accesstoken['sdid'])) { $userid = $accesstoken['sdid']; } else { showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login'); } if(!empty($userid)) { //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面 $where = array('connectid'=>$userid, 'from'=>'snda'); $r = $this->db->get_one($where); //connect用户已经绑定本站用户 if(!empty($r)) { //读取本站用户信息,执行登录操作 $password = $r['password']; $this->_init_phpsso(); $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid)); if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); param::set_cookie('_from', 'snda'); $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index'; showmessage(L('login_success').$synloginstr, $forward); } else { //弹出绑定注册页面 $_SESSION = array(); $_SESSION['connectid'] = $userid; $_SESSION['from'] = 'snda'; $connect_username = $userid; include template('member', 'connect'); } } } else { $o = new OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK); $accesstoken = $o->getSystemToken(); $aurl = $o->getAuthorizeURL(); include template('member', 'connect_snda'); } } /** * QQ号码登录 * 该函数为QQ登录回调地址 */ public function public_qq_loginnew(){ $appid = pc_base::load_config('system', 'qq_appid'); $appkey = pc_base::load_config('system', 'qq_appkey'); $callback = pc_base::load_config('system', 'qq_callback'); pc_base::load_app_class('qqapi','',0); $info = new qqapi($appid,$appkey,$callback); $this->_session_start(); if(!isset($_GET['code'])){ $info->redirect_to_login(); }else{ $code = $_GET['code']; $openid = $_SESSION['openid'] = $info->get_openid($code); if(!empty($openid)){ $r = $this->db->get_one(array('connectid'=>$openid,'from'=>'qq')); if(!empty($r)){ //QQ已存在于数据库,则直接转向登陆操作 $password = $r['password']; $this->_init_phpsso(); $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid)); if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index'; showmessage(L('login_success').$synloginstr, $forward); }else{ //未存在于数据库中,跳去完善资料页面。页面预置用户名(QQ返回是UTF8编码,如有需要进行转码) $user = $info->get_user_info(); $_SESSION['connectid'] = $openid; $_SESSION['from'] = 'qq'; if(CHARSET != 'utf-8') {//转编码 $connect_username = iconv('utf-8', CHARSET, $user); } else { $connect_username = $user; } include template('member', 'connect'); } } } } /** * QQ微博登录 */ public function public_qq_login() { define('QQ_AKEY', pc_base::load_config('system', 'qq_akey')); define('QQ_SKEY', pc_base::load_config('system', 'qq_skey')); pc_base::load_app_class('qqoauth', '' ,0); $this->_session_start(); if(isset($_GET['callback']) && trim($_GET['callback'])) { $o = new WeiboOAuth(QQ_AKEY, QQ_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']); $_SESSION['last_key'] = $o->getAccessToken($_REQUEST['oauth_verifier']); if(!empty($_SESSION['last_key']['name'])) { //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面 $where = array('connectid'=>$_REQUEST['openid'], 'from'=>'qq'); $r = $this->db->get_one($where); //connect用户已经绑定本站用户 if(!empty($r)) { //读取本站用户信息,执行登录操作 $password = $r['password']; $this->_init_phpsso(); $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid)); if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); param::set_cookie('_from', 'snda'); $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index'; showmessage(L('login_success').$synloginstr, $forward); } else { //弹出绑定注册页面 $_SESSION = array(); $_SESSION['connectid'] = $_REQUEST['openid']; $_SESSION['from'] = 'qq'; $connect_username = $_SESSION['last_key']['name']; //加载用户模块配置 $member_setting = getcache('member_setting'); if(!$member_setting['allowregister']) { showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login'); } //获取用户siteid $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; //过滤非当前站点会员模型 $modellist = getcache('member_model', 'commons'); foreach($modellist as $k=>$v) { if($v['siteid']!=$siteid || $v['disabled']) { unset($modellist[$k]); } } if(empty($modellist)) { showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER); } $modelid = 10; //设定默认值 if(array_key_exists($modelid, $modellist)) { //获取会员模型表单 require CACHE_MODEL_PATH.'member_form.class.php'; $member_form = new member_form($modelid); $this->db->set_model($modelid); $forminfos = $forminfos_arr = $member_form->get(); //万能字段过滤 foreach($forminfos as $field=>$info) { if($info['isomnipotent']) { unset($forminfos[$field]); } else { if($info['formtype']=='omnipotent') { foreach($forminfos_arr as $_fm=>$_fm_value) { if($_fm_value['isomnipotent']) { $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']); } } $forminfos[$field]['form'] = $info['form']; } } } $formValidator = $member_form->formValidator; } include template('member', 'connect'); } } else { showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login'); } } else { $oauth_callback = APP_PATH.'index.php?m=member&c=index&a=public_qq_login&callback=1'; $oauth_nonce = md5(SYS_TIME); $oauth_signature_method = 'HMAC-SHA1'; $oauth_timestamp = SYS_TIME; $oauth_version = '1.0'; $url = "https://open.t.qq.com/cgi-bin/request_token?oauth_callback=$oauth_callback&oauth_consumer_key=".QQ_AKEY."&oauth_nonce=$oauth_nonce&oauth_signature=".QQ_SKEY."&oauth_signature_method=HMAC-SHA1&oauth_timestamp=$oauth_timestamp&oauth_version=$oauth_version"; $o = new WeiboOAuth(QQ_AKEY, QQ_SKEY); $keys = $o->getRequestToken(array('callback'=>$oauth_callback)); $_SESSION['keys'] = $keys; $aurl = $o->getAuthorizeURL($keys['oauth_token'] ,false , $oauth_callback); include template('member', 'connect_qq'); } } /** * 找回密码 * 新增加短信找回方式 */ public function public_forget_password () { $email_config = getcache('common', 'commons'); //SMTP MAIL 二种发送模式 if($email_config['mail_type'] == '1'){ if(empty($email_config['mail_user']) || empty($email_config['mail_password'])) { showmessage(L('email_config_empty'), HTTP_REFERER); } } $this->_session_start(); $member_setting = getcache('member_setting'); if(isset($_POST['dosubmit'])) { if ($_SESSION['code'] != strtolower($_POST['code'])) { showmessage(L('code_error'), HTTP_REFERER); } //邮箱验证 if(!is_email($_POST['email'])){ showmessage(L('email_error'), HTTP_REFERER); } $memberinfo = $this->db->get_one(array('email'=>$_POST['email'])); if(!empty($memberinfo['email'])) { $email = $memberinfo['email']; } else { showmessage(L('email_error'), HTTP_REFERER); } pc_base::load_sys_func('mail'); $code = sys_auth($memberinfo['userid']."\t".microtime(true), 'ENCODE', get_auth_key('email')); $url = APP_PATH."index.php?m=member&c=index&a=public_forget_password&code=$code"; $message = $member_setting['forgetpassword']; $message = str_replace(array('{click}','{url}'), array(''.L('please_click').'',$url), $message); //获取站点名称 $sitelist = getcache('sitelist', 'commons'); if(isset($sitelist[$memberinfo['siteid']]['name'])) { $sitename = $sitelist[$memberinfo['siteid']]['name']; } else { $sitename = 'PHPCMS_V9_MAIL'; } sendmail($email, L('forgetpassword'), $message, '', '', $sitename); showmessage(L('operation_success'), 'index.php?m=member&c=index&a=login'); } elseif($_GET['code']) { $hour = date('y-m-d h', SYS_TIME); $code = sys_auth($_GET['code'], 'DECODE', get_auth_key('email')); $code = explode("\t", $code); if(is_array($code) && is_numeric($code[0]) && date('y-m-d h', SYS_TIME) == date('y-m-d h', $code[1])) { $memberinfo = $this->db->get_one(array('userid'=>$code[0])); if(empty($memberinfo['phpssouid'])) { showmessage(L('operation_failure'), 'index.php?m=member&c=index&a=login'); } $updateinfo = array(); $password = random(8,"23456789abcdefghkmnrstwxy"); $updateinfo['password'] = password($password, $memberinfo['encrypt']); $this->db->update($updateinfo, array('userid'=>$code[0])); if(pc_base::load_config('system', 'phpsso')) { //初始化phpsso $this->_init_phpsso(); $this->client->ps_member_edit('', $email, '', $password, $memberinfo['phpssouid'], $memberinfo['encrypt']); } $email = $memberinfo['email']; //获取站点名称 $sitelist = getcache('sitelist', 'commons'); if(isset($sitelist[$memberinfo['siteid']]['name'])) { $sitename = $sitelist[$memberinfo['siteid']]['name']; } else { $sitename = 'PHPCMS_V9_MAIL'; } pc_base::load_sys_func('mail'); sendmail($email, L('forgetpassword'), "New password:".$password, '', '', $sitename); showmessage(L('operation_success').L('newpassword').':'.$password); } else { showmessage(L('operation_failure'), 'index.php?m=member&c=index&a=login'); } } else { $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $siteinfo = siteinfo($siteid); include template('member', 'forget_password'); } } /** *通过手机修改密码 *方式:用户发送HHPWD afei985#821008 至 1065788 ,PHPCMS进行转发到网站运营者指定的回调地址,在回调地址程序进行密码修改等操作,处理成功时给用户发条短信确认。 *phpcms 以POST方式传递相关数据到回调程序中 *要求:网站中会员系统,mobile做为主表字段,并且唯一(如已经有手机号码,把号码字段转为主表字段中) */ public function public_changepwd_bymobile(){ $phone = $_REQUEST['phone']; $msg = $_REQUEST['msg']; $sms_key = $_REQUEST['sms_passwd']; $sms_pid = $_REQUEST['sms_pid']; if(empty($phone) || empty($msg) || empty($sms_key) || empty($sms_pid)){ return false; } if(!preg_match('/^1([0-9]{10})$/',$phone)) { return false; } //判断是否PHPCMS请求的接口 pc_base::load_app_func('global','sms'); pc_base::load_app_class('smsapi', 'sms', 0); $this->sms_setting_arr = getcache('sms'); $siteid = $_REQUEST['siteid'] ? $_REQUEST['siteid'] : 1; if(!empty($this->sms_setting_arr[$siteid])) { $this->sms_setting = $this->sms_setting_arr[$siteid]; } else { $this->sms_setting = array('userid'=>'', 'productid'=>'', 'sms_key'=>''); } if($sms_key != $this->sms_setting['sms_key'] || $sms_pid != $this->sms_setting['productid']){ return false; } //取用户名 $msg_array = explode("@@",$str); $newpwd = $msg_array[1]; $username = $msg_array[2]; $array = $this->db->get_one(array('mobile'=>$phone,'username'=>$username)); if(empty($array)){ echo 1; }else{ $result = $this->db->update(array('password'=>$newpwd),array('mobile'=>$phone,'username'=>$username)); if($result){ //修改成功,发送短信给用户回执 //检查短信余额 if($this->sms_setting['sms_key']) { $smsinfo = $this->smsapi->get_smsinfo(); } if($smsinfo['surplus'] < 1) { echo 1; }else{ $this->smsapi = new smsapi($this->sms_setting['userid'], $this->sms_setting['productid'], $this->sms_setting['sms_key']); $content = '你好,'.$username.',你的新密码已经修改成功:'.$newpwd.' ,请妥善保存!'; $return = $this->smsapi->send_sms($phone, $content, SYS_TIME, CHARSET); echo 1; } } } } /** * 手机短信方式找回密码 */ public function public_forget_password_mobile () { $step = intval($_POST['step']); $step = max($step,1); $this->_session_start(); if(isset($_POST['dosubmit']) && $step==2) { //处理提交申请,以手机号为准 if ($_SESSION['code'] != strtolower($_POST['code'])) { showmessage(L('code_error'), HTTP_REFERER); } //验证 if(!is_username($_POST['username'])){ showmessage(L('username_format_incorrect'), HTTP_REFERER); } $username = safe_replace($_POST['username']); $r = $this->db->get_one(array('username'=>$username),'userid,mobile'); if($r['mobile']=='') { $_SESSION['mobile'] = ''; $_SESSION['userid'] = ''; $_SESSION['code'] = ''; showmessage("该账号没有绑定手机号码,请选择其他方式找回!"); } $_SESSION['mobile'] = $r['mobile']; $_SESSION['userid'] = $r['userid']; include template('member', 'forget_password_mobile'); } elseif(isset($_POST['dosubmit']) && $step==3) { $sms_report_db = pc_base::load_model('sms_report_model'); $mobile_verify = $_POST['mobile_verify']; $mobile = $_SESSION['mobile']; if($mobile){ if(!preg_match('/^1([0-9]{10})$/',$mobile)) exit('check phone error'); pc_base::load_app_func('global','sms'); $posttime = SYS_TIME-600; $where = "`mobile`='$mobile' AND `posttime`>'$posttime'"; $r = $sms_report_db->get_one($where,'id,id_code','id DESC'); if($r && $r['id_code']==$mobile_verify) { $sms_report_db->update(array('id_code'=>''),$where); $userid = $_SESSION['userid']; $updateinfo = array(); $password = random(8,"23456789abcdefghkmnrstwxy"); $encrypt = random(6,"23456789abcdefghkmnrstwxyABCDEFGHKMNRSTWXY"); $updateinfo['encrypt'] = $encrypt; $updateinfo['password'] = password($password, $encrypt); $this->db->update($updateinfo, array('userid'=>$userid)); $rs = $this->db->get_one(array('userid'=>$userid),'phpssouid'); if(pc_base::load_config('system', 'phpsso')) { //初始化phpsso $this->_init_phpsso(); $this->client->ps_member_edit('', '', '', $password, $rs['phpssouid'], $encrypt); } $status = sendsms($mobile, $password, 5); if($status!==0) showmessage($status); $_SESSION['mobile'] = ''; $_SESSION['userid'] = ''; $_SESSION['code'] = ''; showmessage("密码已重置成功!请查收手机",'?m=member&c=index&a=login'); } else { showmessage("短信验证码错误!请重新获取!"); } }else{ showmessage("短信验证码已过期!请重新获取!"); } } else { $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; $siteinfo = siteinfo($siteid); include template('member', 'forget_password_mobile'); } } //通过用户名找回密码 public function public_forget_password_username() { $step = intval($_POST['step']); $step = max($step,1); $this->_session_start(); if(isset($_POST['dosubmit']) && $step==2) { //处理提交申请,以手机号为准 if ($_SESSION['code'] != strtolower($_POST['code'])) { showmessage(L('code_error'), HTTP_REFERER); } //验证 if(!is_username($_POST['username'])){ showmessage(L('username_format_incorrect'), HTTP_REFERER); } $username = safe_replace($_POST['username']); $r = $this->db->get_one(array('username'=>$username),'userid,email'); if($r['email']=='') { $_SESSION['userid'] = ''; $_SESSION['code'] = ''; showmessage("该账号没有绑定邮箱,请选择其他方式找回!"); } else { $_SESSION['userid'] = $r['userid']; $_SESSION['email'] = $r['email']; } $_SESSION['emc'] = ""; $_SESSION['emc_times']=0; $email_arr = explode('@',$r['email']); include template('member', 'forget_password_username'); } elseif(isset($_POST['dosubmit']) && $step==3) { $sms_report_db = pc_base::load_model('sms_report_model'); $mobile_verify = $_POST['mobile_verify']; $email = $_SESSION['email']; if($email){ if(!preg_match('/^([a-z0-9_]+)@([a-z0-9_]+).([a-z]{2,6})$/',$email)) exit('check email error'); if($_SESSION['emc_times']=='' || $_SESSION['emc_times']<=0){ showmessage("验证次数超过5次,验证码失效,请重新获取邮箱验证码!",HTTP_REFERER,3000); } $_SESSION['emc_times'] = $_SESSION['emc_times']-1; if($_SESSION['emc']!='' && $_POST['email_verify']==$_SESSION['emc']) { $userid = $_SESSION['userid']; $updateinfo = array(); $password = random(8,"23456789abcdefghkmnrstwxy"); $encrypt = random(6,"23456789abcdefghkmnrstwxyABCDEFGHKMNRSTWXY"); $updateinfo['encrypt'] = $encrypt; $updateinfo['password'] = password($password, $encrypt); $this->db->update($updateinfo, array('userid'=>$userid)); $rs = $this->db->get_one(array('userid'=>$userid),'phpssouid'); if(pc_base::load_config('system', 'phpsso')) { //初始化phpsso $this->_init_phpsso(); $this->client->ps_member_edit('', '', '', $password, $rs['phpssouid'], $encrypt); } $_SESSION['email'] = ''; $_SESSION['userid'] = ''; $_SESSION['emc'] = ''; $_SESSION['code'] = ''; pc_base::load_sys_func('mail'); sendmail($email, '密码重置通知', "您在".date('Y-m-d H:i:s')."通过密码找回功能,重置了本站密码。"); include template('member', 'forget_password_username'); exit; } else { showmessage("验证码错误!请重新获取!",HTTP_REFERER,3000); } } else { showmessage("非法请求!"); } } else { include template('member', 'forget_password_username'); } } //邮箱获取验证码 public function public_get_email_verify() { pc_base::load_sys_func('mail'); $this->_session_start(); $code = $_SESSION['emc'] = random(8,"23456789abcdefghkmnrstwxy"); $_SESSION['emc_times']=5; $message = '您的验证码为:'.$code; sendmail($_SESSION['email'], '邮箱找回密码验证', $message); echo '1'; } } ?>