Reg.php 8.22 KB
<?php

use Action\AbstractAction;
use LibModels\Wap\Passport\RegData;
use Plugin\Helpers;

/**
 * 注册的控制器
 */
class RegController extends AbstractAction
{
    /**
     * 注册页
     */
    public function indexAction()
    {
        $this->setTitle('注册');
        
        $data = array(); 
        $data['regIndex'] = true; // 模板中使用JS的标识
        $data['backUrl'] = '/'; // 返回的URL链接
        $data['headerText'] = '注册'; // 头部信息
        $data['isPassportPage'] = true; // 模板中模块标识
        $data['areaCode'] = '+86'; // 默认的区号
        $data['countrys'] = RegData::getAreasData(); // 地区信息列表

        // 生成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' => '/', // 返回的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;
            }
            
            /* 向手机发送注册验证码 */
            $data = RegData::sendCodeToMobile($area, $mobile);
            if (!isset($data['code'])) {
                break;
            }
            
            /* 返回跳转到验证页面的链接*/
            if ($data['code'] == 200) {
                $token = Helpers::makeToken($mobile);
                $data['data'] = '/passport/reg/code?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;
            }
            
            /* 验证注册的标识码是否有效 */
            $data = RegData::validMobileCode($area, $mobile, $code);
            if (!isset($data['code'])) {
                break;
            }
            
            /* 返回跳转到设置密码的链接*/
            if ($data['code'] == 200) {
                $token = Helpers::makeToken($mobile);
                $data['data'] = '/passport/reg/password?token='.$token.'&phoneNum='.$mobile.'&areaCode='.$area;
            }
            
        } 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;
            }
            
            /* 向手机发送注册验证码 */
            $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'])) {
                break;
            }
            
            /* 返回跳转到来源页面 */
            if ($data['code'] == 200) {
                $data['data'] = '/';
            }
            
        } while (false);

        $this->echoJson($data);
    }
    
}