<?php use Action\AbstractAction; use LibModels\Wap\Passport\RegData; use Plugin\Helpers; /** * 注册的控制器 */ class RegController extends AbstractAction { /** * 注册页 */ public function indexAction() { // 设置注册有效时间30分钟, 防机器刷 $this->setSession('_REG_EXPIRE', time() + 1800); $this->setTitle('注册'); $data = array(); $data['regIndex'] = true; // 模板中使用JS的标识 $data['backUrl'] = 'javascript:history.go(-1)'; // 返回的URL链接 $data['headerText'] = '注册'; // 头部信息 $data['isPassportPage'] = true; // 模板中模块标识 $data['areaCode'] = '+86'; // 默认的区号 $data['countrys'] = RegData::getAreasData(); // 地区信息列表 $refer = $this->get('refer'); if (!empty($refer)) { $this->setCookie('refer', $refer); } // 生成HTML(reg.html) //$this->_view->html('reg'); // 渲染模板 $this->_view->display('index', $data); } /** * 验证码 * * @param string areaCode 地区编号 * @param string phoneNum 手机号 * @param string token 访问TOKEN凭证 */ public function codeAction() { $token = $this->get('token'); $mobile = $this->get('phoneNum'); $area = $this->get('areaCode', '86'); // 判断是否允许访问, 不允许则跳转到错误页面 if (!is_string($token) || !is_numeric($mobile) || !Helpers::verifyToken($mobile, $token)) { $this->error(); } $this->setTitle('注册-验证码'); $data = array( 'regCode' => true, // 模板中使用JS的标识 'backUrl' => SITE_MAIN . '/?go=1', // 返回的URL链接 'headerText' => '注册', // 头部信息 'isPassportPage' => true, // 模板中模块标识 'areaCode' => '+' . $area, // 地区编号 'phoneNum' => $mobile, // 手机号 'token' => $token, // 访问令牌 ); $this->_view->display('code', $data); } /** * 填写密码页面 * * @param string areaCode 地区编号 * @param string phoneNum 手机号 * @param string token 访问TOKEN凭证 */ public function passwordAction() { $token = $this->get('token'); $mobile = $this->get('phoneNum'); $area = $this->get('areaCode', '86'); // 判断是否允许访问, 不允许则跳转到错误页面 if (!is_string($token) || !is_numeric($mobile) || !is_numeric($area) || !Helpers::verifyToken($mobile, $token)) { $this->error(); } $this->setTitle('注册-设置密码'); $data = array( 'regPwd' => true, // 模板中使用JS的标识 'backUrl' => '/', // 返回的URL链接 'headerText' => '注册', // 头部信息 'isPassportPage' => true, // 模板中模块标识 'areaCode' => $area, // 地区编号 'phoneNum' => $mobile, // 手机号 'token' => $token, // 访问令牌 ); $this->_view->display('password', $data); } /** * 验证注册的手机号 * * @param string areaCode 地区编号,注意不需要+号 * @param string phoneNum 手机号 * @return json */ public function verifymobileAction() { $data = array('code' => 400, 'message' => '手机号已存在', 'data' => ''); do { /* 判断是不是AJAX请求 */ if (!$this->isAjax()) { break; } $mobile = $this->post('phoneNum'); $area = $this->post('areaCode', '86'); /* 判断参数是否合法 */ if (!is_numeric($mobile) || !is_numeric($area)) { break; } /* 设置注册有效时间30分钟, 防机器刷 */ $expire = $this->getSession('_REG_EXPIRE'); if (empty($expire) || $expire < time()) { break; } /* 向手机发送注册验证码 */ $data = RegData::sendCodeToMobile($area, $mobile); if (!isset($data['code'])) { break; } /* 返回跳转到验证页面的链接 */ if ($data['code'] == 200) { $token = Helpers::makeToken($mobile); $data['data'] = Helpers::url('/passport/reg/code', array('token' => $token, 'phoneNum' => $mobile, 'areaCode' => $area)); } } while (false); $this->echoJson($data); } /** * 验证注册的识别码 * * @param string areaCode 地区编号,注意不需要+号 * @param string phoneNum 手机号 * @param string token 访问TOKEN凭证 * @param int code 验证码, 手机上收到的 * @return json */ public function verifycodeAction() { $data = array('code' => 400, 'message' => '验证码错误', 'data' => ''); do { /* 判断是不是AJAX请求 */ if (!$this->isAjax()) { break; } $mobile = $this->post('phoneNum'); $area = $this->post('areaCode'); $code = $this->post('code'); /* 判断参数是否合法 */ if (!is_numeric($mobile) || !is_numeric($area) || !isset($code)) { break; } /* 设置注册有效时间30分钟, 防机器刷 */ $expire = $this->getSession('_REG_EXPIRE'); if (empty($expire) || $expire < time()) { break; } /* 验证注册的标识码是否有效 */ $data = RegData::validMobileCode($area, $mobile, $code); if (!isset($data['code'])) { break; } /* 返回跳转到设置密码的链接 */ if ($data['code'] == 200) { $token = Helpers::makeToken($mobile); $data['data'] = Helpers::url('/passport/reg/password', array('token' => $token, 'phoneNum' => $mobile, 'areaCode' => $area)); } else if ($data['code'] == 404) { $data['message'] = '验证码错误'; //统一验证提示 } } while (false); $this->echoJson($data); } /** * 发送验证码 * * @param string areaCode 地区编号,注意不需要+号 * @param string phoneNum 手机号 * @return json */ public function sendcodeAction() { $data = array('code' => 400, 'message' => '发送验证码失败', 'data' => ''); do { /* 判断是不是AJAX请求 */ if (!$this->isAjax()) { break; } $mobile = $this->post('phoneNum'); $area = $this->post('areaCode', '86'); /* 判断参数是否合法 */ if (!is_numeric($mobile) || !is_numeric($area)) { break; } /* 设置注册有效时间30分钟, 防机器刷 */ $expire = $this->getSession('_REG_EXPIRE'); if (empty($expire) || $expire < time()) { break; } /* 向手机发送注册验证码 */ $data = RegData::sendCodeToMobile($area, $mobile); if (!isset($data['code'])) { break; } } while (false); $this->echoJson($data); } /** * 设置密码 * * @param string areaCode 地区编号,注意不需要+号 * @param string phoneNum 手机号 * @param string token 访问TOKEN凭证 * @param string password 用户设置的密码 * @return json */ public function setpasswordAction() { $data = array('code' => 400, 'message' => '密码格式不正确', 'data' => ''); do { /* 判断是不是AJAX请求 */ if (!$this->isAjax()) { break; } $token = $this->post('token'); $mobile = $this->post('phoneNum'); $area = $this->post('areaCode'); $password = $this->post('password'); /* 判断参数是否合法 */ if (!is_string($token) || !is_numeric($mobile) || !is_numeric($area) || !isset($password)) { break; } /* 判断是否允许访问 */ if (!Helpers::verifyToken($mobile, $token)) { break; } /* 判断密码是否符合规则 */ if (!Helpers::verifyPassword($password)) { break; } /* 验证注册的标识码是否有效 */ $data = RegData::regMobile($area, $mobile, $password); if (!isset($data['code']) || $data['code'] != 200) { break; } /* 返回跳转到来源页面 */ $refer = $this->getCookie('refer'); if (empty($refer)) { $refer = SITE_MAIN . '/?go=1'; } else { $refer = rawurldecode($refer); } $data['data']['session'] = Helpers::syncUserSession($data['data']['uid']); $data['data']['href'] = $refer; $token = Helpers::makeToken($data['data']['uid']); $this->setCookie('_TOKEN', $token); $this->setSession('_TOKEN', $token); $this->setSession('_LOGIN_UID', $data['data']['uid']); } while (false); $this->echoJson($data); } }