/**
  * 构造函数
  */
 function sitePushback2share()
 {
     $this->_userConfig['ip'] = DB::mysqli_escape(XWB_plugin::getIP());
     $this->_userConfig['uid'] = (int) XWB_plugin::pCfg('pushback_uid');
     $this->_userConfig['username'] = DB::mysqli_escape(XWB_plugin::convertEncoding((string) XWB_plugin::pCfg('pushback_username'), 'UTF-8', XWB_S_CHARSET));
     $this->_userConfig['timestamp'] = (int) TIMESTAMP;
     //DZ已有的变量,直接使用之
     if ($this->_userConfig['uid'] < 1) {
         $this->_userConfig['uid'] = 0;
         $this->_userConfig['username'] = '******';
     }
 }
 /**
  * 进行身份验证
  * 请保证传参所用字符集和论坛字符集一致,否则请先自行转换再传参
  * @param string $username
  * @param string $password
  * @param int $questionid
  * @param string $answer
  * @param boolen $isuid 使用UID验证么?
  * @return array
  *    第一个数组下标($return[0])若大于0,则表示验证成功的登录uid。否则为错误信息:
  *   	 -1:UC用户不存在,或者被删除
  *    	 -2:密码错
  *   	 -3:安全提问错
  *   	 -4:用户没有在dz注册
  *    第二个数组下标($return[1])若大于等于0,则表示验证成功的adminid;
  *   	 否则为-1,表示验证失败
  */
 function verify($username, $password, $questionid = '', $answer = '', $isuid = 0)
 {
     $return = array(0 => -1, 1 => -1);
     $ip = XWB_plugin::getIP();
     /**
      * 校验用户输入错误密码的次数
      */
     $failedlogins = $this->db->fetch_first("select * from " . XWB_S_TBPRE . "failedlogins where `ip`='{$ip}'");
     if ($failedlogins && $failedlogins['count'] >= 5) {
         $return[0] = -5;
         return $return;
     }
     /**
      * 校验用户输入的用户名和密码是否正确
      */
     if (true === UCENTER) {
         //加载Ucenter客户端文件
         include_once ROOT_PATH . './api/uc_client/client.php';
         $uc_result = uc_user_login($username, $password, $isuid, 0, $questionid, $answer);
         $ucuid = $uc_result[0];
         if ($ucuid < 1) {
             $return[0] = $ucuid;
             return $return;
         }
     }
     $member = $this->db->fetch_first("SELECT `uid`, `password`, `nickname`, `username`, `role_type`, `salt` FROM " . XWB_S_TBPRE . "members WHERE `nickname`='{$username}'");
     if ($member) {
         /**
          * 在记事狗系统中比对用户输入的密码
          */
         if ($member['password'] == jsg_member_password($password, $member['salt'])) {
             $return[0] = (int) $member['uid'];
             $return[1] = 'admin' == $member['role_type'] ? 1 : 0;
         } else {
             $return[0] = -2;
             /**
              * 更新密码输入错误的次数
              */
             if ($failedlogins) {
                 $this->db->query("update " . XWB_S_TBPRE . "failedlogins set `count`='" . (max(1, (int) $failedlogins['count']) + 1) . "', `lastupdate`='" . time() . "' where `ip`='{$ip}'");
             } else {
                 $this->db->query("insert into " . XWB_S_TBPRE . "failedlogins (`ip`,`count`,`lastupdate`) values ('{$ip}','1','" . time() . "')");
             }
         }
     }
     return $return;
 }
 /**
  * 生成统计上报url(当$html参数为true时,可使用返回的内容,通过客户端进行上报)
  * @param string $type stat类型
  * @param array $args stat参数
  * @param bool 生成html?默认为否
  * @param bool 是否产生random?默认为是
  * @return string
  */
 function statUrl($type, $args = array(), $html = false, $random = true)
 {
     if (defined('XWB_P_STAT_DISABLE')) {
         return '';
     }
     $statUrl = 'http://beacon.x.weibo.com/a.gif';
     //stat参数公用部分添加
     $args['pjt'] = XWB_P_PROJECT;
     $args['dsz'] = XWB_S_VERSION;
     $args['ver'] = XWB_P_VERSION;
     $args['xt'] = $type;
     $args['akey'] = isset($args['akey']) ? $args['akey'] : XWB_APP_KEY;
     $args['ip'] = XWB_plugin::getIP();
     //新浪用户uid,最好强制传值,否则会异步计算错误
     if (!isset($args['uid'])) {
         $args['uid'] = XWB_plugin::getBindInfo("sina_uid");
     }
     $args['uid'] = !is_numeric($args['uid']) || 1 > $args['uid'] ? '' : $args['uid'];
     if (true === $random) {
         $args['random'] = rand(1, 999999);
     }
     $statUrl .= '?' . http_build_query($args);
     if (defined('XWB_P_DEBUG') && true == XWB_P_DEBUG) {
         $logmsg = "上报的URL为:" . $statUrl;
         XWB_plugin::LOG($logmsg, 'statRecord', false);
     }
     if (false == $html) {
         return $statUrl;
     } else {
         return '<img src="' . $statUrl . '" style="display:none" />';
     }
 }
 /**
  * 生成一个session id校验
  * @uses XWB_P_ROOT , XWB_plugin
  * @param string $id
  */
 function generateSessionHash($id)
 {
     $key = '';
     if (!empty($_SERVER['HTTP_USER_AGENT'])) {
         $key .= $_SERVER['HTTP_USER_AGENT'];
     }
     $key = XWB_P_ROOT . XWB_plugin::getIP() . $id;
     return sprintf('%08x', crc32($key));
 }
 /**
  * Format and sign an OAuth / API request
  * 目前仅支持get和post方法
  *
  * @return array
  */
 function oAuthRequest($url, $method, $parameters, $useType = true, $multi = false)
 {
     $request = ns_OAuthRequest::from_consumer_and_token($this->token, $method, $url, $parameters);
     $method = strtoupper($method);
     switch ($method) {
         case 'GET':
             $this->last_req_url = $request->to_url();
             $this->http->setUrl($request->to_url());
             break;
         case 'POST':
             $this->last_req_url = $request->get_normalized_http_url();
             $this->http->setUrl($request->get_normalized_http_url());
             $this->http->setData($request->to_postdata($multi));
             if ($multi) {
                 $header_array = array();
                 $header_array2 = array();
                 if ($multi) {
                     $header_array2 = array("Content-Type: multipart/form-data; boundary=" . $GLOBALS['__CLASS']['ns_OAuthRequest']['__STATIC']['boundary'], "Expect: ");
                 }
                 foreach ($header_array as $k => $v) {
                     array_push($header_array2, $k . ': ' . $v);
                 }
                 if (!defined('CURLOPT_HTTPHEADER')) {
                     define('CURLOPT_HTTPHEADER', 10023);
                 }
                 $config = array(CURLOPT_HTTPHEADER => $header_array2);
                 $this->http->setConfig($config);
             }
             break;
         default:
             trigger_error('WRONG REQUEST METHOD IN WEIBO CLASS!', E_USER_ERROR);
             break;
     }
     $this->http->setHeader('API-RemoteIP', (string) XWB_plugin::getIP());
     $time_start = microtime();
     $result = $this->http->request(strtolower($method));
     $time_end = microtime();
     $time_process = array_sum(explode(" ", $time_end)) - array_sum(explode(" ", $time_start));
     if ($useType === false || $useType === true) {
         $result = xwb_util_json::decode($result, true);
     }
     $code = $this->http->getState();
     if (200 != $code) {
         $this->_delBindCheck(isset($result['error']) ? (string) $result['error'] : (string) $result);
         $this->req_error_count++;
     }
     if (defined('XWB_DEV_LOG_ALL_RESPOND') && XWB_DEV_LOG_ALL_RESPOND == true) {
         $this->logRespond($this->last_req_url, $method, (int) $code, $result, array('param' => $parameters, 'time_process' => $time_process, 'triggered_error' => $this->http->get_triggered_error(), 'base_string' => $request->base_string, 'key_string' => $request->key_string));
     }
     if (200 != $code) {
         if (0 == $code) {
             $result = array("error_code" => "50000", "error" => "timeout");
         }
         if ($useType === true) {
             if (!is_array($result)) {
                 $result = array('error' => (string) $result, 'error_code' => $code);
             }
             $this->setError($result);
         }
     }
     return $result;
 }