示例#1
0
 /**
  * 初始化.
  * 检查是否有 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();
         }
     }
 }