run(); //token验证 } } /** * 用户信息传递 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ protected static function auth() { //$this->info(); //获取相关信息 if (!isset($_SERVER['HTTP_USERID'])) { exit(send_http_status(412)); } $user_id = $_SERVER['HTTP_USERID']; $_USER = Db::name(self::$table_user)->where('id', $user_id)->find(); if (!$_USER) { exit(send_http_status(415)); } !defined('USER_ID') ? define('USER_ID', $_USER['id']) : ''; !defined('MEMBER') ? define('MEMBER', $_USER) : ''; } /** * 会员发布权限判断 * @param int $curr_count 当前已有数据统计 * @param string $count_type 判断的类型 默认房源,否则根据传入的类型 */ protected static function authAddHouse($curr_count = 0, $count_type = 'count') { //超级管理员以外直接不允许添加 if (MEMBER['is_manager'] != 1) { exit(send_http_status(51004)); } //子账号不允许删除和添加 if ($_SERVER['HTTP_SUBUSERID'] > 0) { exit(send_http_status(417)); } //判断有没有手机号 if (empty(MEMBER['phone']) || strlen(MEMBER['phone']) != 11) { exit(send_http_status(51016)); } //暂时免费 return; //超级管理员直接返回 if (MEMBER['is_manager'] == 1) { return; } //判断当前用户 会员是否过期(普通用户不用判断) if (MEMBER['vip_level'] > 0 && MEMBER['vip_endtime'] < time() && MEMBER['is_manager'] != 1) { exit(send_http_status(416)); } //获取等级配置信息 $vip_level = config('vip_level'); $member_vip = $vip_level[MEMBER['vip_level']]; if ($curr_count >= $member_vip[$count_type]) { exit(send_http_status(51004)); } } /** * 获取常用硬件信息 */ protected function info() { $code = ''; if (!isset($_SERVER['HTTP_DEVICENAME'])) { $code = 408; } if (!isset($_SERVER['HTTP_SYSTEMVERSION'])) { $code = 409; } if (!isset($_SERVER['HTTP_DEVICECODE'])) { $code = 410; } if (!isset($_SERVER['HTTP_PHONETYPE'])) { $code = 411; } if (!isset($_SERVER['HTTP_USERID'])) { $code = 412; } if ($code) { exit(send_http_status($code)); } //获取、设备号、机型、终端 $devicename = 'Android'; if (strtolower($_SERVER['HTTP_DEVICENAME']) != strtolower($devicename)) { $devicename = 'iOS'; } //获取版本号 $version = isset($_SERVER['HTTP_VERSION']) ? $_SERVER['HTTP_VERSION'] : 0; defined('VERSION') or define("VERSION", $version); //版本号 defined('DEVICENAME') or define("DEVICENAME", $devicename); //终端名称 defined('SYSTEMVERSION') or define("SYSTEMVERSION", strtoupper($_SERVER['HTTP_SYSTEMVERSION'])); //系统版本 defined('DEVICECODE') or define("DEVICECODE", $_SERVER['HTTP_DEVICECODE']); //设备号 defined('PHONETYPE') or define("PHONETYPE", $_SERVER['HTTP_PHONETYPE']); //机型 defined('USERID') or define("USERID", $_SERVER['HTTP_USERID']); } /** * 根据密钥、标识、时间戳、随机数 验证请求接口 */ public function run() { //客户端标识列表 $_client = config('CLIENT'); $_secret = config('SECRET'); $code = ''; //没有指定平台标识 defined('CLIENT') or define("CLIENT", strtoupper($_SERVER['HTTP_CLIENT'])); //终端名称 if (empty(CLIENT) || !in_array(CLIENT, $_client)) { $code = 201; } //判断标识是否正确 if (!isset($_SERVER['HTTP_APPID']) || $_SERVER['HTTP_APPID'] != $_secret[CLIENT]['APPID']) { $code = 202; } //指定随机数 $nonce = $_SERVER['HTTP_NONCE']; if (!isset($nonce) || empty($nonce)) { $code = 203; } //判断加密串 $openkey = $_secret[CLIENT]['APPID'] . $nonce . $_secret[CLIENT]['SECRET']; $encry_old = md5($openkey); $encry = md5($openkey . $_SERVER['HTTP_USERID']); if ($_SERVER['HTTP_OPENKEY'] != $encry && $encry_old != $_SERVER['HTTP_OPENKEY']) { $code = 207; } if ($code) { exit(send_http_status($code)); } } /** * 根据收租方式 切割提醒的时间节点 * @param $_data 房间数据 * @param int $month 指定分割月数 * @throws \think\Exception * @throws \think\exception\PDOException */ protected function crontab_room($_data, $month = 3) { $start_time = $_data['start_time']; $end_time = $_data['end_time']; //计算指定天数后的时间戳 $_arr = []; while ($start_time < $end_time) { $arr_temp['room_id'] = $_data['id']; $arr_temp['user_id'] = USER_ID; $arr_temp['start_time'] = $start_time; $arr_temp['end_time'] = $start_time = strtotime('+' . $month . ' month', $start_time); $arr_temp['create_time'] = time(); $_arr[] = $arr_temp; } //删除最后一个元素,置换为end_time(防止开始时间与结束时间不一致) $last_arr = array_pop($_arr); $last_arr['end_time'] = $end_time; $_arr[] = $last_arr; //新增前先清空 $house_crontab = Db::name($this->table_room_crontab); $house_crontab->where('room_id', $_data['id'])->where('user_id', USER_ID)->delete(); $house_crontab->insertAll($_arr); } }