0) { $this->page_size = intval(trim($_GET['page'])); } else { $this->page_size = 20; } if (is_numeric($_GET['curpage']) && intval(trim($_GET['curpage'])) > 0) { $this->cur_page = intval(trim($_GET['curpage'])); } else { $this->cur_page = 1; } $this->initpage($this->page_size, $this->cur_page); $this->check_app_type(); $param = $_GET; $param['client_type'] = $_SESSION['client_type']; $this->set_relay(); statistics_helper::instance()->add_call($param); if(session_helper::version_code() > 168) { if(!$this->verify()) { throw new UnSignException(); } } else { throw new UnSignException(); } } private function verify() { $pub = $this->pubKey(); $input = $_GET; $sign = $input['sign']; $input['sign'] = null; $input['from'] = null; $data = $this->getSignCotent($input); $res = openssl_verify($data,base64_decode($sign),$pub); Log::record("openssl_verify res={$res}",Log::DEBUG); return $res == 1; } protected function checkEmpty($value) { if (!isset($value)) return true; if ($value === null) return true; if (trim($value) === "") return true; return false; } private function getSignCotent($params) { ksort($params); $stringToBeSigned = ""; $i = 0; foreach ($params as $k => $v) { if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) { if ($i == 0) { $stringToBeSigned .= "{$k}" . "=" . urlencode($v); } else { $stringToBeSigned .= "&" . "{$k}" . "=" . urlencode($v); } $i++; } } return $stringToBeSigned; } private function record_path() { $record = []; $record['user_session'] = session_helper::session_id(); $record['member_id'] = session_helper::memberid(); $record['relay_id'] = session_helper::relay_id(); $record['add_time'] = time(); $record['exec_time'] = intval((microtime(true) - self::$startime) * 1000000); $record['content'] = $_SERVER['original_querystring']; $record['client_type'] = session_helper::client_type(); if(!empty($_GET['from'])) { $from = base64_decode($_GET['from']); Log::record("ort={$_GET['from']}",Log::DEBUG); Log::record("from={$from}",Log::DEBUG); } Log::record_path(json_encode($record)); } public function __destruct() { $this->record_path(); } private function set_relay() { if(isset($_GET['relay_id'])) { session_helper::set_relay($_GET['relay_id']); } elseif (isset($_COOKIE['relay_id'])) { session_helper::set_relay($_COOKIE['relay_id']); } } protected function initpage($page_size,$cur_page) { pagecmd('seteachnum', $page_size); pagecmd('setnowpage', $cur_page); } protected function price_calcer() { if(session_helper::logined()) { return new bonus\account(session_helper::memberid(),true); } else { return new bonus\normal_calc(); } } protected function android() { return $_SESSION['client_type'] == 'android'; } protected function page_size() { return $this->page_size; } protected function page_no() { return $this->cur_page; } protected function pages($count) { return intval($count / $this->page_size()) + ($count % $this->page_size() == 0 ? 0 : 1); } /** * @throws UnloginException */ protected function need_login() { if ($_SESSION['is_login'] != 1) { throw new UnloginException(); } } private static function eclipse_time() { return (microtime(true) - self::$startime); } protected function check_app_type() { $client = strtolower(trim($_SERVER['HTTP_CLIENT_TYPE'])); $version = trim($_SERVER['HTTP_CLIENT_VERSION']); Log::record("HTTP_CLIENT_VERSION:{$version}",Log::DEBUG); if (empty($client)) { $client = $_POST['client_type']; Log::record($_POST['client_type'],Log::DEBUG); } else { $_SESSION['is_app'] = true; } if (empty($client) || !in_array($client, self::$stClienTypes)) { $_SESSION['client_type'] = 'wap'; } else { $_SESSION['client_type'] = $client; } if (!empty($version)) { $_SESSION['client_version'] = $version; } else { $_SESSION['client_version'] = ''; } $version = intval(floatval($version) * 100 + 0.5); if($client == 'ios') { $cur_ver = $GLOBALS['setting_config']['mobile_ios_version']; $lastest_version = intval($cur_ver * 100 + 0.5); if($version >= $lastest_version) { $_SESSION['is_lasted'] = true; } else { $_SESSION['is_lasted'] = false; } } elseif($client == 'android') { $cur_ver = $GLOBALS['setting_config']['mobile_apk_version']; $lastest_version = intval($cur_ver * 100 + 0.5); if($version >= $lastest_version) { $_SESSION['is_lasted'] = true; } else { $_SESSION['is_lasted'] = false; } } return true; } public static function outerr($code, $msg = '', $page = '', $type = NULL) { static $json_clients = ['android', 'ios','mini']; if(!empty($type)) { $show_type = $type; } else { $show_type = $_SESSION['client_type']; } if (in_array($show_type, $json_clients)) { joutput_error($code, $msg); } elseif ($show_type == 'wap') { Tpl::clear(); Tpl::output("error", $msg); if (!empty($page)) { Tpl::showpage($page); } } elseif ($show_type == 'ajax') { $callback = $_GET['callback']; if(!isset($callback) || empty($callback)) { joutput_error($code, $msg); } else { echo "{$callback}("; joutput_error($code, $msg); echo ");"; } } else { if(empty($msg)) { $msg = errcode::msg($code); } $start = microtime(true); echo joutput_error($code, $msg, 'web') . "
"; perfor_period("joutput",$start,"web"); echo sprintf("eclipse_time = %.6f

", self::eclipse_time()); echo "性能关键统计:

"; performance_helper::format_log(); $sqls = Log::sql_log(); echo "sql count = " . count($sqls) . "

"; foreach ($sqls as $sql) { echo "{$sql}
"; } } return true; } public static function outsuccess($data, $page = '', $type = NULL) { static $json_clients = ['android', 'ios','mini']; if(!empty($type)) { $show_type = $type; } else { $show_type = $_SESSION['client_type']; } if (in_array($show_type, $json_clients)) { joutput_data($data); } elseif ($show_type == 'wap') { Tpl::clear(); if (is_array($data)) { foreach ($data as $key => $val) { Tpl::output($key, $val); } } if (!empty($page)) { Tpl::showpage($page); } } elseif ($show_type == 'ajax') { $callback = $_GET['callback']; if(!isset($callback) || empty($callback)) { joutput_data($data); } else { echo "{$callback}("; joutput_data($data); echo ");"; } } else { echo 'success: return data=
'; $start = microtime(true); joutput_data($data, 'web'); perfor_period("joutput",$start,"web"); echo "

"; echo sprintf("eclipse_time = %.6f

", self::eclipse_time()); echo "性能关键统计:

"; performance_helper::format_log(); $sqls = Log::sql_log(); echo "sql count = " . count($sqls) . "

"; foreach ($sqls as $sql) { echo "{$sql}
"; } } return true; } public function separate_page($items,&$pages) { $arr_items = array_chunk($items,$this->page_size()); $pages = count($arr_items); $page_no = $pages >= $this->page_no() ? $this->page_no() : $pages; return ($arr_items[$page_no - 1]); } private function pubKey() { static $pub = null; if($pub == null) { $pub_key = BASE_DATA_PATH . '/api/alipay/key/lrlz_public_key.pem'; $key = file_get_contents($pub_key); $pub = openssl_get_publickey($key); } return $pub; } } class mobileHomeControl extends mobileControl { public function __construct() { parent::__construct(); } } class mbMemberControl extends mobileControl { public $err_code = errcode::Success; public function __construct() { parent::__construct(); if (!session_helper::logined()) { throw new UnloginException(); } } } function bonus_version() { return "v=2019012101"; } function shop_version() { return "v=2019012101"; }