/**
     * 车险20免一, 分享
     */
    public function insuranceShareAction()
    {
        $user_agent = $this->request->getUserAgent();
        $is_in_car_mate = strpos($user_agent, 'YN122') !== false;
        $location_url = $this->request->get('location_url', null, null);
        //不在车优惠环境并且存在跳转参数,则跳转
        if (!$is_in_car_mate and $location_url) {
            $location_url = base64_decode($location_url);
            return $this->response->redirect($location_url);
        }
        $this->view->setVar('is_in_car_mate', $is_in_car_mate);
        $p_user_phone = $this->dispatcher->getParam('p_user_phone', null, '0');
        $user_phone = $this->request->get('user_phone', null, null);
        $this->view->setVar('p_user_phone', $p_user_phone);
        $this->view->setVar('is_user', true);
        $p_user_id = null;
        if ($p_user_phone !== '0') {
            $p_user = User::getUserByPhone($p_user_phone);
            $p_user_id = $p_user['user_id'];
        }
        $wx_state = $this->request->get('state', null, false);
        $user_agent = $this->request->getUserAgent();
        $is_wx = strpos($user_agent, 'MicroMessenger') !== false;
        $this->view->setVar('is_wx', $is_wx);
        $wx_userinfo_json = $this->cookies->get('wx_userinfo_json')->getValue('trim');
        $wx_userinfo = json_decode($wx_userinfo_json, true);
        file_put_contents('wx_userinfo.log', '[' . microtime(true) . ']' . var_export($wx_userinfo_json, 1) . "\r\n", FILE_APPEND);
        //使用微信客户端访问,并且不是从授权页面跳转过来的(跳转过来都带state),重定向到授权页面
        if ($is_wx and !$wx_state and !$wx_userinfo) {
            $auth_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->_app_id . '&redirect_uri=' . urlencode('http://ip.yn122.net:8092/insurance_share/' . $p_user_phone . '?lock_time=' . floor(microtime(true) * 100)) . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
            return $this->response->redirect($auth_url);
        }
        $this->view->setVar('wx_state', $wx_state);
        $wx_code = $this->request->get('code', null, null);
        $wx_openid = $this->request->get('wx_openid', null, null);
        $wx_unionid = $this->request->get('wx_unionid', null, null);
        $wx_token = null;
        $db = $this->db;
        if ($is_wx and $wx_state and !$user_phone) {
            if ($wx_code) {
                if (!$wx_userinfo) {
                    $wx_token_json = file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->_app_id . '&secret=' . $this->_app_secret . '&code=' . $wx_code . '&grant_type=authorization_code');
                    $wx_token = json_decode($wx_token_json, true);
                    $wx_userinfo_json = file_get_contents('https://api.weixin.qq.com/sns/userinfo?access_token=' . $wx_token['access_token'] . '&openid=' . $wx_token['openid'] . '&lang=zh_CN');
                    $wx_userinfo = json_decode($wx_userinfo_json, true);
                    file_put_contents('wx_userinfo.log', '[pull_userinfo]' . var_export($wx_userinfo, 1) . "\r\n", FILE_APPEND);
                    //如果获取用户信息失败,则重新获取code授权
                    if (empty($wx_userinfo) or !isset($wx_userinfo['openid'])) {
                        file_put_contents('wx_userinfo.log', "[re_auth]\r\n", FILE_APPEND);
                        $auth_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->_app_id . '&redirect_uri=' . urlencode('http://ip.yn122.net:8092/insurance_share/' . $p_user_phone . '?lock_time=' . floor(microtime(true) * 100)) . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
                        return $this->response->redirect($auth_url);
                    }
                    $this->cookies->set('wx_userinfo_json', $wx_userinfo_json);
                }
                //保存微信用户信息
                $get_wx_user_sql = 'select top 1 id from WX_USER where openid = :openid';
                $get_wx_user_bind = array('openid' => $wx_userinfo['openid']);
                $wx_user_result = $db->query($get_wx_user_sql, $get_wx_user_bind);
                $wx_user_result->setFetchMode(Db::FETCH_ASSOC);
                $wx_user = $wx_user_result->fetch();
                $wx_user_id = !empty($wx_user) ? $wx_user['id'] : null;
                //没有此微信用户记录则添加
                if (!$wx_user_id) {
                    $insert_wx_user_sql = 'insert into WX_USER (openid, nickname, sex, province, city, country, headimgurl,privilege, unionid) values (:openid, :nickname, :sex, :province, :city, :country, :headimgurl, :privilege, :unionid)';
                    $insert_wx_user_bind = array('openid' => $wx_userinfo['openid'], 'nickname' => base64_encode($wx_userinfo['nickname']), 'sex' => $wx_userinfo['sex'], 'province' => $wx_userinfo['province'], 'city' => $wx_userinfo['city'], 'country' => $wx_userinfo['country'], 'headimgurl' => $wx_userinfo['headimgurl'], 'privilege' => json_encode($wx_userinfo['privilege']), 'unionid' => isset($wx_userinfo['unionid']) ? $wx_userinfo['unionid'] : null);
                    $db->execute($insert_wx_user_sql, $insert_wx_user_bind);
                    $wx_user_id = $db->lastInsertId();
                }
                $get_view_sql = 'select top 1 id from Hui_ActivityShareView where wx_user_id = :wx_user_id and p_user_id = :p_user_id and aid = :aid';
                $get_view_bind = array('wx_user_id' => $wx_user_id, 'p_user_id' => $p_user_id, 'aid' => 228);
                $view_result = $db->query($get_view_sql, $get_view_bind);
                $view_result->setFetchMode(Db::FETCH_ASSOC);
                $view_record = $view_result->fetch();
                if ($wx_user_id and empty($view_record)) {
                    //添加微信用户访问记录(本次活动)
                    $insert_view_sql = 'insert into Hui_ActivityShareView (p_user_id, wx_user_id, aid) values (:p_user_id, :wx_user_id, :aid)';
                    $insert_view_bind = array('p_user_id' => $p_user_id, 'wx_user_id' => $wx_user_id, 'aid' => 228);
                    $insert_view_success = $db->execute($insert_view_sql, $insert_view_bind);
                }
            }
            $this->view->setVar('wx_openid', $wx_token['openid']);
        }
        $bind_user = null;
        if ($wx_userinfo) {
            $bind_user_list = User::getUserList(array('wx_openid' => isset($wx_userinfo['openid']) ? $wx_userinfo['openid'] : 'cyh'));
            if (!empty($bind_user_list)) {
                $bind_user = $bind_user_list[0];
            }
        }
        if (!$user_phone and !$bind_user) {
            //查找上家分享码
            $query_sql = 'select invitation_code from ActivityUser where userid = :user_id and aid = :aid';
            $query_bind = array('user_id' => $p_user_id, 'aid' => 228);
            $query_result = $db->query($query_sql, $query_bind);
            $query_result->setFetchMode(Db::FETCH_ASSOC);
            $involved_p_user = $query_result->fetch();
            $this->view->setVar('invitation_code', !empty($involved_p_user) ? $involved_p_user['invitation_code'] : '');
            return;
        }
        $user = !empty($bind_user) ? $bind_user : User::getUserByPhone($user_phone);
        //未注册的用户
        if (empty($user)) {
            $this->view->setVar('is_user', false);
            $client_type = null;
            if (strpos($user_agent, 'iPhone') !== false) {
                $client_type = 'iPhone';
            } elseif (strpos($user_agent, 'iPod') !== false) {
                $client_type = 'iPod';
            } elseif (strpos($user_agent, 'iPad') !== false) {
                $client_type = 'iPad';
            } elseif (strpos($user_agent, 'Android') !== false) {
                $client_type = 'Android';
            }
            $register_result = file_get_contents('http://192.168.3.31/vehIllegalQuery/index.php?mod=Member&act=RegisterSave&PWD=' . $user_phone . '&PHONE=' . $user_phone . '&clientType=' . $client_type);
            $user = User::getUserByPhone($user_phone);
            $this->view->setVar('car_mate_user_phone', $user_phone);
            $this->view->setVar('car_mate_pwd', $user_phone);
        }
        $this->view->setVar('user_id', $user['user_id']);
        //如果用户没绑定,则绑定(微信客户端访问页面时)
        if ($is_wx and !$bind_user) {
            $bind_user_sql = 'update IAM_USER set weixintoken = :wx_openid, wx_openid = :wx_openid where userid = :user_id';
            $bind_user_bind = array('wx_openid' => $wx_userinfo['openid'], 'user_id' => $user['user_id']);
            $bind_user_success = $db->execute($bind_user_sql, $bind_user_bind);
        }
        $query_sql = 'select invitation_code from ActivityUser where userid = :user_id and aid = :aid';
        $query_bind = array('user_id' => $user['user_id'], 'aid' => 228);
        $query_result = $db->query($query_sql, $query_bind);
        $query_result->setFetchMode(Db::FETCH_ASSOC);
        $involved_user = $query_result->fetch();
        $is_already = !empty($involved_user);
        $this->view->setVar('is_already', $is_already);
        if ($is_already) {
            //在微信客户端访问则进入过此页面的微信用户信息
            if ($is_wx) {
                $get_view_sql = <<<SQL
\t\t\t\tselect u.nickname, u.headimgurl, convert(varchar(20), v.create_date, 20) as create_date from Hui_ActivityShareView v
\t\t\t\tleft join WX_USER u on u.id = v.wx_user_id
\t\t\t\twhere v.wx_user_id is not null and v.p_user_id = :p_user_id and v.aid = :aid
SQL;
                $get_view_bind = array('p_user_id' => $user['user_id'], 'aid' => 228);
                $record_result = $db->query($get_view_sql, $get_view_bind);
                $record_result->setFetchMode(Db::FETCH_ASSOC);
                $record_list = $record_result->fetchAll();
                $this->view->setVar('view_record_list', $record_list);
            }
            if ($p_user_id) {
                $this->flashSession->success('您也获得了邀请码哦!<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们');
            } else {
                $this->flashSession->success('您已成功参加活动<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!<br/>成功邀请<b style="color:orange">20</b>个好友购买保险,您的车险就可以免单啦!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们');
            }
            $this->view->setVar('invitation_code', $involved_user['invitation_code']);
            $this->view->setVar('p_user_phone', $user['phone']);
            return;
        }
        $invitation_code = strtoupper(str_pad(dechex($user['id']), 5, '0', STR_PAD_LEFT));
        $insert_au_sql = 'insert into ActivityUser(userid, aid, p_user_id, invitation_code) values (:user_id, :aid, :p_user_id, :invitation_code)';
        $insert_au_bind = array('user_id' => $user['user_id'], 'aid' => 228, 'p_user_id' => $p_user_id, 'invitation_code' => $invitation_code);
        $insert_au_success = $db->execute($insert_au_sql, $insert_au_bind);
        if ($p_user_id) {
            $this->flashSession->success('您也获得了邀请码哦!<br/> 可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们');
        } else {
            $this->flashSession->success('您已成功参加活动<br/>可以点击右上角分享给您的好友,也可以将邀请码告知您的好友,在保险精算时填写邀请码!<br/>成功邀请<b style="color:orange">20</b>个好友购买保险,您的车险就可以免单啦!如有疑问请<a href="tel:400-009-0047">拨打服务热线</a>或<a href="http://wpa.qq.com/msgrd?v=3&uin=1011973383&site=qq&menu=yes">加客服QQ</a>联系我们');
        }
        $this->view->setVar('invitation_code', $invitation_code);
        $this->view->setVar('p_user_phone', $user['phone']);
        $this->view->setVar('is_success', true);
    }
 /**
  * 处理微信用户绑定
  */
 private function _doMicroMessengerBind($user_phone, $openid, $source = 'cm')
 {
     $user = User::getUserByPhone($user_phone);
     if (empty($user)) {
         $user_agent = $this->request->getUserAgent();
         $this->view->setVar('is_user', false);
         $client_type = null;
         if (strpos($user_agent, 'iPhone') !== false) {
             $client_type = 'iPhone';
         } elseif (strpos($user_agent, 'iPod') !== false) {
             $client_type = 'iPod';
         } elseif (strpos($user_agent, 'iPad') !== false) {
             $client_type = 'iPad';
         } elseif (strpos($user_agent, 'Android') !== false) {
             $client_type = 'Android';
         }
         $register_result = file_get_contents('http://192.168.3.31/vehIllegalQuery/index.php?mod=Member&act=RegisterSave&PWD=' . $user_phone . '&PHONE=' . $user_phone . '&clientType=' . $client_type);
         $user = User::getUserByPhone($user_phone);
         $this->view->setVars(array('car_mate_user_phone' => $user_phone, 'car_mate_pwd' => $user_phone));
     }
     $bind_success = User::wxBindUser($user['user_id'], $openid, $source);
     $this->view->setVar('bind_success', $bind_success);
     $this->view->setVar('user_id', $user['user_id']);
 }