Reg.php 8.3 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;
        $data['backUrl'] = '/';
        $data['headerText'] = '注册';
        $data['isPassportPage'] = true;
        $data['countrys'] = array();
        
        // 获取地区数据列表
        $area = RegData::getAreasData();
        // 有数据
        if (!empty($area['data'])) {
            $build = array();
            foreach ($area['data'] as $value) {
                $build = array();
                $build['areaCode'] = '+' . $value['area'];
                $build['selected'] = $value['area'] === '86';
                $build['name'] = $value['name'];
                $data['countrys'][] = $build;
            }
        } 
        // 没数据
        else {
            $data['countrys'][0] = array();
            $data['countrys'][0]['areaCode'] = '+86';
            $data['countrys'][0]['selected'] = true;
            $data['countrys'][0]['name'] = '中国';
        }
        $this->_view->display('index', $data);
        
        $data = array();
        $area = array();
    }

    /**
     * 验证码
     * 
     * @param string area 地区编号
     * @param string mobile 手机号
     * @param string token 访问TOKEN凭证
     */
    public function codeAction()
    {
        $token = $this->get('token');
        $mobile = $this->get('mobile');
        $area = $this->get('area', '86');
        
        // 判断是否允许访问, 不允许则跳转到错误页面
        if (!is_string($token) || !is_numeric($mobile) || !Helpers::verifyToken($mobile, $token)) {
            $this->error();
        }
        
        $this->setTitle('注册-验证码');
        
        $data = array();
        $data['regCode'] = true;
        $data['backUrl'] = '/';
        $data['headerText'] = '注册';
        $data['isPassportPage'] = true;
        $data['areaCode'] = $area;
        $data['phoneNum'] = $mobile;
        $data['token'] = $token;

        $this->_view->display('code', $data);
    }

    /**
     * 填写密码页面
     * 
     * @param string area 地区编号
     * @param string mobile 手机号
     * @param string token 访问TOKEN凭证
     */
    public function passwordAction()
    {
        $token = $this->get('token');
        $mobile = $this->get('mobile');
        $area = $this->get('area', '86');
        
        // 判断是否允许访问, 不允许则跳转到错误页面
        if (!is_string($token) || !is_numeric($mobile) || !is_numeric($area) 
                               || !Helpers::verifyToken($mobile, $token)) {
            $this->error();
        }
        
        $this->setTitle('注册-设置密码');
        
        $data = array();
        $data['regPwd'] = true;
        $data['backUrl'] = '/';
        $data['headerText'] = '注册';
        $data['isPassportPage'] = true;
        $data['areaCode'] = $area;
        $data['phoneNum'] = $mobile;
        $data['token'] = $token;

        $this->_view->display('password', $data);
    }
    
    /**
     * 验证注册的手机号
     * 
     * @param string area 地区编号,注意不需要+号
     * @param string mobile 手机号
     * @return json
     */
    public function verifymobileAction()
    {
        $data = array('code' => 400, 'message' => '参数不正确!', 'data' => '');
        
        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }
            
            $mobile = $this->post('mobile');
            $area = $this->post('area', '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.'&mobile='.$mobile.'&area='.$area;
            }
            
        } while (false);

        $this->echoJson($data);
    }
    
    /**
     * 验证注册的识别码
     * 
     * @param string area 地区编号,注意不需要+号
     * @param string mobile 手机号
     * @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('mobile');
            $area = $this->post('area');
            $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.'&mobile='.$mobile.'&area='.$area;
            }
            
        } while (false);

        $this->echoJson($data);
    }
    
    /**
     * 发送验证码
     * 
     * @param string area 地区编号,注意不需要+号
     * @param string mobile 手机号
     * @return json
     */
    public function sendcodeAction()
    {
        $data = array('code' => 400, 'message' => '参数不正确!', 'data' => '');
        
        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }
            
            $mobile = $this->post('mobile');
            $area = $this->post('area', '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 area 地区编号,注意不需要+号
     * @param string mobile 手机号
     * @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('mobile');
            $area = $this->post('area');
            $password = $this->post('password');
            /* 判断参数是否合法 */
            if (!is_string($token) || !is_numeric($mobile) || !is_numeric($area) || !isset($password)) {
                break;
            }
            
            /* 判断是否允许访问 */
            if (!Helpers::verifyToken($mobile, $token)) {
                break;
            }
            
            /* 验证注册的标识码是否有效 */
            $data = RegData::regMobile($area, $mobile, $password);
            if (!isset($data['code'])) {
                break;
            }
            
            /* 返回跳转到来源页面 */
            if ($data['code'] == 200) {
                $data['data'] = '/passport/reg/password?token='.$token.'&mobile='.$mobile.'&area='.$area;
            }
            
        } while (false);

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