Yuanxiao.php 8.59 KB
<?php

use Action\HuodongAction;
use Cuxiao\YuanxiaoModel;
use Plugin\Helpers;

/**
 * 元宵抽签活动
 */
class YuanxiaoController extends HuodongAction
{
    // const STATIC_FILE = 'http://localhost:2222/assets/1.0.6';
    const STATIC_FILE = 'http://cdn.yoho.cn/huodong/2016yuanxiao/1.0.6';
    const ENCRYPT_KEY = 'iamgtskkwhoareyou';

    /**
     * 通过当前用户审判是否跳到登录页
     *
     */
    private function auditJumpLogin()
    {
        $uid = $this->getLoggedUid();
        if (!$uid || !is_numeric($uid)) {
            $this->go(Helpers::url('/signin.html', array('refer' => Helpers::url('/cuxiao/yuanxiao/info')), 'default'));
        }
    }

    /**
     * 元宵抽签
     */
    public function indexAction()
    {
        $this->_view->display('index', array(
            'staticTitle' => '元宵抽签',
            'staticFile' => self::STATIC_FILE,
            'staticJS' => array(
                'home.js'
            )
        ));
    }

    /**
     * 元宵抽签 信息
     */
    public function infoAction()
    {
        // 审判跳转登录页
        $this->auditJumpLogin();

        $uid = $this->getUid();
        // POST提交请求
        $posts = $this->post();
        if (!empty($posts)) {
            $nickName = $this->post('nick', '');
            $birthday = $this->post('birthday', '');
            $gender = $this->post('gender', 1);

            // 格式化日期以便接口接收
            $FormatBirthday = date_format(date_create_from_format('Y年m月d日', $birthday), 'Y-m-d');

            // 调用接口
            $result = YuanxiaoModel::getChouqianInfo($uid, $nickName, $FormatBirthday, $gender);
            if ($result['code'] === 200) { // 处理成功就跳转到等待页
                // 将返回的结果存入cookeie中15分钟
                $cookieData = array(
                    'name' => $nickName,
                    'type' => $result['data']['randomCode']
                );
                $this->setCookie('yuanxiaochouqian', json_encode($cookieData), time() + 15 * 60);
                $this->go(Helpers::url('/cuxiao/yuanxiao/wait'));
            } else { // 不成功就显示返回的错误信息
                $this->_view->display('info', array(
                    'staticTitle' => '元宵抽签',
                    'staticFile' => self::STATIC_FILE,
                    'staticJS' => array(
                        'info.js'
                    ),
                    'birthday' => $birthday,
                    'gender' => $gender,
                    'isBoy' => $gender == 1, // 性别是否是女标志位
                    'message' => $result['message']
                ));
            }
        } else {
            $userData = YuanxiaoModel::getUserProfileData($uid);

            $this->_view->display('info', array(
                'staticTitle' => '元宵抽签',
                'staticFile' => self::STATIC_FILE,
                'staticJS' => array(
                    'info.js'
                ),
                'birthday' => date_format(date_create($userData['birthday']), 'Y年m月d日'),
                'gender' => $userData['gender'],
                'isBoy' => $userData['gender'] == 1 // 性别是否是女标志位
            ));
        }
    }

    /**
     * 元宵抽签 等待
     */
    public function waitAction()
    {
        // 审判跳转登录页
        $this->auditJumpLogin();

        $this->_view->display('wait', array(
            'staticTitle' => '元宵抽签',
            'staticFile' => self::STATIC_FILE,
            'staticJS' => array(
                'wait.js'
            ),
        ));
    }

    /**
     * 元宵抽签 结果
     */
    public function resultAction()
    {
        // 审判跳转登录页
        $this->auditJumpLogin();

        $result = $this->getCookie('yuanxiaochouqian', null);
        if (empty($result)) { // 未取到信息就重新测试
            $this->go(Helpers::url('/cuxiao/yuanxiao/info'));       }

        // cookie中存的结果
        $result = json_decode($result, true);
        $shareUrl = Helpers::url('/cuxiao/yuanxiao/share', array(
            'hash' => $this->encrypt($this->getUid())
        ));

        $this->_view->display('result', array(
            'staticTitle' => '元宵抽签',
            'needShare' => $this->checkNeedShare(), // 是否需要微信分享
            'staticFile' => self::STATIC_FILE,
            'result' => $result,
            'shareTitle' => $result['name'] . '的2016年潮流运势是' . $this->getChouqianTitle($result['type']),
            'shareDesc' => '元宵快乐!一起来YOHO!BUY有货玩2016年潮流开运测试!',
            'shareImg' => 'http://img02.yohoboys.com/staticimg/2016/02/19/16/02dbd38c84eccf1097b7e240452f0de856.png',
            'shareUrl' => $shareUrl,
            'staticJS' => array(
                'result.js'
            )
        ));
    }

    /**
     * 元宵抽签 分享
     */
    public function shareAction()
    {
        // 用户UID
        $uid = $this->decrypt($this->get('hash', ''));
        if (empty($uid)) {
            $this->go(Helpers::url('/cuxiao/yuanxiao/index'));
        }

        // 调用接口获取type和count
        $result = YuanxiaoModel::getChoujiangShareInfo($uid);

        $this->_view->display('share', array(
            'staticTitle' => '元宵抽签',
            'staticFile' => self::STATIC_FILE,
            'result' => array(
                'name' => $result['name'],
                'type' => $result['type']
            ),
            'count' => $result['total'],
            'staticJS' => array(
                'share.js'
            )
        ));
    }


    /**
     * 根据结果类型获取抽签结果标题
     * @param $type
     */
    private function getChouqianTitle($type)
    {
        $data = array(
            'P1' => '成为一个大写加粗的潮人!',
            'P2' => '逼格满载盐值爆表!',
            'P3' => '运气爆棚,拥有Yeezy不是梦!',
            'P4' => '街拍不断,成为网红不是梦!',
            'M1' => '穿着MA-1飞行夹克一飞冲天!',
            'M2' => '把妹不花钱!买鞋不排队!',
            'M3' => '穿着跑鞋到达人生巅峰!',
            'M4' => '帅气多金颜值高!',
            'F1' => '拥有拆不完的快递和礼物!
',
            'F2' => '被男神强势壁咚!',
            'F3' => '腿细胸大屁股翘!',
            'F4' => '任何style都轻松驾驭!
'
        );

        return $data[$type];
    }

    /**
     * 检测登录状态
     *
     * @return int
     */
    private function getLoggedUid()
    {
        if ($this->_isApp) {
            $uid = $this->get('uid');
        } else {
            $uid = $this->getUid();
        }

        return $uid;
    }

    /**
     * 判断是否需要微信分享
     * @return bool
     */
    private function checkNeedShare()
    {
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false || $this->_isApp) {
            return true;
        }

        return false;
    }

    /**
     * 加密字符串
     *
     * @param string $data 需要加密的字符串
     * @return string 加密之后的字符串
     */
    private function encrypt($data)
    {
        $data = strval($data);
        $key	=	md5(self::ENCRYPT_KEY);
        $x		=	0;
        $len	=	strlen($data);
        $l		=	strlen($key);
        $char = '';
        $str = '';

        for ($i = 0; $i < $len; $i++) {
            if ($x == $l)
            {
                $x = 0;
            }
            $char .= $key{$x};
            $x++;
        }

        for ($i = 0; $i < $len; $i++) {
            $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
        }

        return base64_encode($str);
    }

    /**
     * 解密字符串
     *
     * @param string $data 需要解密的字符串
     * @return string 解密之后的字符串
     */
    private function decrypt($data)
    {
        $key = md5(self::ENCRYPT_KEY);
        $x = 0;
        $data = base64_decode($data);
        $len = strlen($data);
        $l = strlen($key);
        $char = '';
        $str = '';

        for ($i = 0; $i < $len; $i++) {
            if ($x == $l)
            {
                $x = 0;
            }
            $char .= substr($key, $x, 1);
            $x++;
        }

        for ($i = 0; $i < $len; $i++) {
            if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
                $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
            } else {
                $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
            }
        }

        return $str;
    }
}