/** * 切换定位城市. * * @access public * @return void */ public function choicePositionAction() { $cityId = (int) I('post.choiceCity', ''); // 切换的定位城市 ID. if ($cityId < 1) { $this->setAjaxData(Message::PARAM_ERROR, Message::get(Message::PARAM_ERROR))->myAjaxReturn(); } $modelCity = new CityModel(); $cityInfo = $modelCity->fetchNameById($cityId); if (NULL === $cityInfo) { $this->setAjaxData(Message::PARAM_ERROR, Message::get(Message::PARAM_ERROR))->myAjaxReturn(); } // 将定位城市写入 token. $this->setTokenData(C('var_locate_city'), $cityInfo); $this->setAjaxData(Message::SUCCESS, Message::get(Message::SUCCESS), $cityInfo)->myAjaxReturn(); }
/** * 初始化. * 检查是否有 appid 的参数. * * @access protected * @return void */ protected function _initialize() { $ip = get_client_ip(); $controllerName = CONTROLLER_NAME; $acname = ACTION_NAME; $modname = MODULE_NAME; if (!in_array(ACTION_NAME, $this->noCheckTokenActions, TRUE)) { //$url = $_SERVER['REQUEST_URI']; //$get = $_GET; $appid = I('get.' . C('var_app_id'), ''); $token = I('get.' . C('var_app_token'), ''); $locateCity = I('get.' . C('var_locate_city'), ''); // 默认城市信息. $defaultCity = []; $modelAppClient = new AppClientModel(); // 实例化 AppClient 模型 $appClientInfo = $modelAppClient->checkAppId($appid); // 请求的参数不包含 appid 或 appid 无效. if (empty($appid) || FALSE === $appClientInfo) { $this->setAjaxData(Message::PARAM_ERROR, Message::get(Message::PARAM_ERROR))->myAjaxReturn(); } $this->_appId = $appid; // 保存 appid. $this->_appKey = $appClientInfo['app_key']; // 保存 appkey. $this->_appName = $appClientInfo['app_name']; // 保存 appname. // 请求的方法名不是 getToken 必须带有 token 标记 和 定位城市标记. if ('gettoken' !== strtolower(ACTION_NAME)) { // 检测 token 和 定位城市标记. if (empty($token) || empty($locateCity)) { $this->setAjaxData(Message::PARAM_ERROR, Message::get(Message::PARAM_ERROR))->myAjaxReturn(); } // 校验 token 若无效, 重新生成 token, 并把传过来的城市写入该 token 缓存. $modelCity = new CityModel(); $defaultCity = $modelCity->fetchNameById($locateCity); $defaultCity = NULL === $defaultCity ? C('default_locate_city') : $defaultCity; $modelCountry = new CountryModel(); $defaultCountry = $modelCountry->fetchNameById($defaultCity['countryID']); $defaultCountry = NULL === $defaultCountry ? C('default_locate_country') : $defaultCountry; $defaultCountry['unit'] = C('default_monetary_unit')[$defaultCountry['id']]; // 取货币单位. if (!Token::check($token)) { $newToken = $this->reNewToken([C('var_locate_city') => $defaultCity], $token); // 将默认城市写入缓存. $data = [C('var_locate_city') => $defaultCity, C('var_refresh_token') => $newToken]; $this->_token = $newToken; // 保存 token 为新 token. $this->setAjaxData(Message::TOKEN_INVALID, Message::get(Message::TOKEN_INVALID), $data)->myAjaxReturn(); } else { $this->_token = $token; // 保存有效的 token. } $this->_locateCity = $defaultCity; // 保存定位城市信息. $this->_locateCountry = $defaultCountry; // 保存定位城市所属国家信息. unset($defaultCity, $defaultCountry); } } // 校验签名. if (in_array(ACTION_NAME, $this->needSignActions, TRUE)) { $oriSign = I('get.' . C('var_app_sign'), ''); $sign = $this->makeSignature($_POST); if (!$this->checkSignature($sign, $oriSign)) { $this->setAjaxData(Message::SIGN_ERROR, Message::get(Message::SIGN_ERROR))->myAjaxReturn(); } } }