Autouserinfo.php 9 KB
<?php

use Action\WebAction;
use LibModels\Web\Passport\RegData;
use LibModels\Wap\Passport\BindData;
use LibModels\Web\Home\UserData;
use WebPlugin\Images;
use Passport\PassportModel as PassportModel;
use WebPlugin\Helpers;

class AutouserinfoController extends WebAction
{

    /**
     * 第三方登录完善个人信息(旧)
     * 绑定手机号
     */
    public function indexAction()
    {
        $this->setTitle('联合登录补全信息');
//        $nickname = $this->get('nickname');
        $openId = trim($this->get('openId'));
        $sourceType = trim($this->get('sourceType'));

        //登录后跳转页面
        $refer = $this->getCookie('refer');
        if (empty($refer)) {
            $refer = SITE_MAIN;
        }
        else {
            $refer = rawurldecode($refer);
        }

        $simpleHeader = PassportModel::getSimpleHeader();
        $cover = PassportModel::getLeftBanner(PassportModel::AUTOUSERINFO_LEFT_BANNER_CODE);

        //整合
        $data = array(
            'thirdPage' => true,
            'simpleHeader' => $simpleHeader,
            'passport' => array(
                'actionUrl' => Helpers::url('/autouserinfo/bind'),
                'region' => RegData::getAreasData(),
                'location' => '+86',
                'captchaUrl' => Helpers::url('/passport/images?t=' . time()),
                'itemUrl' => Helpers::url('/help/?category_id=9'),
                'referUrl' => $refer,
                'skipUrl' => SITE_MAIN,
                'coverHref' => $cover['url'],
                'coverImg' => !empty($cover['img']) ? $cover['img'] : 'http://img12.static.yhbimg.com/yhb-img01/2015/12/01/07/020a0b6e7ff908d0c2bc4045b4fef42b9f.png?imageView/2/w/252/h/190',
                'regBtnText' => '完善信息',
                'openId' => $openId,
                'sourceType' => $sourceType
            )
        );

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

    /**
     * 完善信息页面(中间跳转页-旧)
     */
    public function userInfoAction()
    {
        $nickname = $this->get('nickname');
        $openId = $this->get('openId');
        $sourceType = $this->get('sourceType');

        $simpleHeader = PassportModel::getSimpleHeader();
        $cover = PassportModel::getLeftBanner(PassportModel::AUTOUSERINFO_LEFT_BANNER_CODE);
        //整合
        $data = array(
            'simpleHeader' => $simpleHeader,
            'passport' => array(
                'coverHref' => $cover['url'],
                'coverImg' => !empty($cover['img']) ? $cover['img'] : 'http://img12.static.yhbimg.com/yhb-img01/2015/12/01/07/020a0b6e7ff908d0c2bc4045b4fef42b9f.png?imageView/2/w/252/h/190',
                'goShoppingUrl' => SITE_MAIN,
                'completeInfoUrl' => Helpers::url('/passport/autouserinfo/index', array('openId' => $openId, 'sourceType' => $sourceType, 'nickname' => $nickname)),
            ),
        );

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

    /**
     * 绑定前手机号校验
     * 若已注册,则查询用户头像,昵称信息
     * 
     */
    public function bindCheckAction()
    {
        $data = array('code' => 400, 'message' => '', 'data' => '');

        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }

            $mobile = trim($this->post('mobile'));
            $openId = trim($this->post('openId'));
            $area = trim($this->post('area', '86'));
            $sourceType = trim($this->post('sourceType'));


            if (!is_numeric($mobile) || !$openId || !$area || !$sourceType) {
                break;
            }

            $res = BindData::bindCheck($mobile, $openId, $sourceType, $area);
            if (!isset($res['code'])) {
                break;
            }
            //未注册 未绑定
            if ($res['code'] == 200) {
                $next = Helpers::url('/thirdlogin/noregist', array(
                            'openId' => $openId,
                            'sourceType' => $sourceType,
                            'area' => $area,
                            'mobile' => $mobile,
                ));
                $data = array('code' => $res['code'], 'message' => $res['message'], 'data' => array('next' => $next));
            }
            //506 - 已注册 未绑定 / 505 - 已注册 已绑定
            elseif ($res['code'] == 506 || $res['code'] == 505) {
                $user = self::getUserInfo($area, $mobile);
                $data = array('code' => $res['code'], 'message' => $res['message'], 'data' => array('user' => $user));
            }
            else {
                $data = array('code' => $res['code'], 'message' => $res['message'], 'data' => isset($res['data']) ? $res['data'] : '');
            }
        }
        while (false);

        $this->echoJson($data);
    }

    /*
     * 根据手机号获取用户相关信息
     */

    public static function getUserInfo($area, $mobile)
    {
        $userInfo = UserData::getUserInfoByMobile($area, $mobile);
        $user = array('username' => '', 'headImg' => '', 'bindLogin' => '');
        $userTmp = current($userInfo['data']);
        if ($userTmp) {
            $user = array(
                'username' => $userTmp['profile_name'],
                'headImg' => (!empty($userTmp['head_ico'])) ? Images::getImageUrl($userTmp['head_ico'], 100, 100, 2, 'yhb-head') : '',
                'bindLogin' => Helpers::url('/signin.html', array('bindMobile' => $userTmp['mobile'])),
            );
        }
        return $user;
    }

    /**
     * 发送验证码
     */
    public function sendBindMsgAction()
    {
        $data = array('code' => 400, 'message' => '', 'data' => '');

        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }

            $mobile = trim($this->post('mobile'));
            $area = trim($this->post('area'));
            //校验手机号格式
            if (!is_numeric($mobile) || !is_numeric($area)) {
                $data['code'] = 400;
                $data['message'] = '手机号码格式不正确';
                break;
            }

            $data = BindData::sendBindMsg($area, $mobile);
            if (!isset($data['code'])) {
                break;
            }
        }
        while (false);

        $this->echoJson($data);
    }

    /**
     * 校验短信验证码
     */
    public function checkBindMsgAction()
    {
        $data = array('code' => 400, 'message' => '', 'data' => '');

        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }

            $mobile = trim($this->post('mobile'));
            $area = trim($this->post('area'));
            $code = trim($this->post('code')); //短信验证码
            //校验手机号格式
            if (!is_numeric($mobile) || !is_numeric($area)) {
                $data['code'] = 400;
                $data['message'] = '手机号码格式不正确';
                break;
            }

            $data = BindData::checkBindCode($area, $mobile, $code);
            if (!isset($data['code'])) {
                break;
            }
        }
        while (false);

        $this->echoJson($data);
    }

    /**
     * 绑定手机号
     */
    public function bindMobileAction()
    {
        $data = array('code' => 400, 'message' => '', 'data' => '');

        do {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) {
                break;
            }

            $mobile = trim($this->post('mobile'));
            $area = trim($this->post('area', '86'));
            $openId = trim($this->post('openId'));
            $sourceType = trim($this->post('sourceType'));
            $code = trim($this->post('code')); //短信验证码
            $password = trim($this->post('password'));
            $password = empty($password) ? '' : $password;

            //校验手机号格式
            if (!is_numeric($mobile) || !is_numeric($area)) {
                $data['code'] = 400;
                $data['message'] = '手机号码格式不正确';
                break;
            }
            //校验手机验证码
            $bindMsgFlag = BindData::checkBindCode($area, $mobile, $code);
            if (isset($bindMsgFlag['code']) && $bindMsgFlag['code'] != 200) {
                $data['code'] = 400;
                $data['message'] = '短信验证码不正确';
                break;
            }
            //绑定手机号
            $res = BindData::bindMobile($openId, $sourceType, $mobile, $area, $password);
            if (!isset($res['code'])) {
                break;
            }
            $data = array('code' => $res['code'], 'message' => $res['message']);
        }
        while (false);

        $this->echoJson($data);
    }

}