where(['game_id' => $gameid, 'restrict_type' => 'preventhook'])->find(); if ($restrictInfo) { $isPreventHook = intval($restrictInfo['restrict_status']); } else { $settingModel = new Setting; $isPreventHook = intval($settingModel::getSetting('CHILD_LIMIT')); } if ($isPreventHook == 2) { // 已实名认证用户做防沉迷判断 $membersTwoInfo = model('MembersTwo')->where(['userid' => $member_id])->find(); $gameInfo = model('Game')->where(['id' => $gameid])->find(); if ($gameInfo['game_auth_type'] == 1 || $gameInfo['game_auth_type'] == 2) { //中宣部实名认证 $gameAccountInfo = model('Subaccount')->where(['game_id' => $gameid, 'member_id' => $member_id])->find(); if ($gameAccountInfo) { if ($gameAccountInfo['auth_status'] == 3) { $membersTwoInfo['realname'] = trim($gameAccountInfo['real_name']); $membersTwoInfo['idcard'] = trim($gameAccountInfo['idcard_num']); } else if ($gameAccountInfo['auth_status'] == 1) { $membersTwoInfo['realname'] = ''; $membersTwoInfo['idcard'] = ''; } else { $membersTwoInfo['realname'] = ''; $membersTwoInfo['idcard'] = ''; } } else { $membersTwoInfo['realname'] = ''; $membersTwoInfo['idcard'] = ''; } } if ($membersTwoInfo && !empty($membersTwoInfo['realname']) && !empty($membersTwoInfo['idcard']) && $membersTwoInfo['realname'] <> -1 && $membersTwoInfo['idcard'] <> -1) { $totalMonthRechargeAmt = model('Pay')->where(['userid' => $member_id, 'status' => 1, 'create_time' => ['egt', strtotime(date('Y-m-01'))]])->sum('amount'); if (isMeetAgeByIDCard($membersTwoInfo['idcard'], 0, 12)) { return ['code' => 0, 'msg' => '未满12周岁的未成年用户,无法进行充值']; } else if (isMeetAgeByIDCard($membersTwoInfo['idcard'], 12, 16)) { if ($amount > 50) { return ['code' => 0, 'msg' => '12周岁以上未满16周岁的未成年用户,单次充值金额不得超过50元,每月累计充值上限为200元']; } if (($totalMonthRechargeAmt + $amount) > 200) { return ['code' => 0, 'msg' => '12周岁以上未满16周岁的未成年用户,单次充值金额不得超过50元,每月累计充值上限为200元']; } } else if (isMeetAgeByIDCard($membersTwoInfo['idcard'], 16, 18)) { if ($amount > 100) { return ['code' => 0, 'msg' => '16周岁以上未满18周岁的未成年用户,单次充值金额不得超过100元,每月累计充值上限为400元']; } if (($totalMonthRechargeAmt + $amount) > 400) { return ['code' => 0, 'msg' => '16周岁以上未满18周岁的未成年用户,单次充值金额不得超过100元,每月累计充值上限为400元']; } } } } return ['code' => 1]; } /** * 获取玩家其他端游戏的渠道ID * * @param $member_id 用户ID * @param $game_id 游戏ID * * @return void */ public function getGameOtherChannelId($member_id, $game_id) { $gameType = model('Common/Game')->where(['id' => $game_id])->value('type'); $where = []; // 游戏类型:1=ios、2=安卓、3=h5 if($gameType == 1){ $where['ios_game_id'] = $game_id; $otherGameIds = ['android_game_id', 'h5_game_id']; } else if ($gameType == 2){ $where['android_game_id'] = $game_id; $otherGameIds = ['ios_game_id', 'h5_game_id']; } else if ($gameType == 3) { $where['h5_game_id'] = $game_id; $otherGameIds = ['android_game_id', 'ios_game_id']; } $gameBandInfo = model('common/GameBand')->where($where)->find(); // 没有绑定 if(!$gameBandInfo){ return ''; } $memberGameIds = []; if($gameType == 1){ $memberGameIds = [$gameBandInfo['android_game_id'], $gameBandInfo['h5_game_id']]; } else if ($gameType == 2){ $memberGameIds = [$gameBandInfo['ios_game_id'], $gameBandInfo['h5_game_id']]; } else if ($gameType == 3) { $memberGameIds = [$gameBandInfo['android_game_id'], $gameBandInfo['ios_game_id']]; } $gameIds = array_filter($memberGameIds, function($v) { return $v>0; }); $channelId = model('common/MemberChannelGame')->where(['member_id' => $member_id, 'game_id' => ['in', $gameIds]])->value('channel_id'); if($channelId){ return $channelId; } return ''; } /** * 处理归属绑定保护 * * 账户注册时间一个月内,如果发现同一实名信息的其他账户在该游戏,则当前归属使用其他实名账户渠道; * 1. 规定时间内注册的玩家,根据实名信息进行一个月归属保护; * 2. 归属期内在多个渠道注册且相同实名的玩家,归属始终为在第一次注册渠道所属。 * 例如: * 1. 玩家1 在归属保护期内,在 甲会长 下注册了账号,然后又去 乙会长 下注册账户,此时注册后归属于 甲会长 。 * * * @param $member_id 处理的玩家ID * @param $member_channel_id 当前绑定的渠道ID * @param $game_id 游戏ID * @param $realname 实名-姓名 * @param $idcard 实名-身份证号 * * @return false * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function handleBelongToBinding($member_id, $member_channel_id, $game_id, $idcard = '', $realname = '') { // $date = date('Y-m-d', time()); $time = time(); // 获取是否需要处理绑定关联 $gameInfo = Db::table('cy_game')->alias('cg') ->join('cy_gameinfo cgi', 'cg.id = cgi.game_id', 'left') ->field('cg.id, cg.name, cg.game_auth_type, cgi.belonging_status') ->where(['cg.id' => $game_id])->find(); if($gameInfo['belonging_status'] != 1){ return false; } $channelInfo = Db::table('nw_subaccount') ->where(['game_id' => $game_id, 'idcard_num' => $idcard, 'auth_status' => 3]) ->field('id as sub_id,channel_id,create_time') ->order('create_time desc') ->find(); if(!$channelInfo){ $channelInfo = Db::table('cy_memberstwo')->alias('cmt') ->join('nw_subaccount ns', 'cmt.userid = ns.member_id', 'left') ->where(['cmt.idcard' => $idcard, 'ns.game_id' => $game_id]) ->field('ns.id as sub_id, ns.channel_id, ns.create_time') ->order('ns.create_time desc') ->find(); } if(empty($channelInfo)){ return false; } if($channelInfo['channel_id'] == $member_channel_id){ return false; } $timestamp = (new \DateTime("@{$channelInfo['create_time']}"))->modify('+1 month')->getTimestamp(); if($timestamp < $time){ return false; } Db::startTrans(); try { $channel_id = $channelInfo['channel_id']; $updateTime = NOW_TIMESTAMP; // 用户 - 初始化注册的记录,可以不用改(需要查用户是否归属保护过时可以根据实名信息,对比账户表子账户所属归属) // model('common/Members')->update(["channel_id" => $channel_id, "update_time" => $updateTime], ['id' => $member_id]); // 子账户 model('common/Subaccount')->update(["channel_id" => $channel_id, "update_time" => $updateTime], ['game_id' => $game_id, 'member_id' => $member_id]); // 玩家-渠道-游戏 关联 model('common/MemberChannelGame')->update(["channel_id" => $channel_id, "update_time" => $updateTime], ['member_id' => $member_id, 'game_id' => $game_id]); // 玩家-游戏-区服 关联 【不用处理,因为牵扯到‘归属功能’,玩家登录时候还没有进游戏】 // model('common/MemberGameServer')->update(["channel_id" => $channel_id, "update_time" => $updateTime], ['member_id' => $member_id, 'game_id' => $game_id]); // 修复切换归属渠道时的登录记录没有改变 model('common/Logininfo')->update(["channel_id" => $channel_id], ['userid' => $member_id, 'sub_id' => $channelInfo['sub_id'], 'gameid' => $game_id]); // 记录日志 $channelName = model('common/Channel')->where(['id' =>['in', [$channel_id, $member_channel_id]]])->column('name', 'id'); Db::table('cy_member_history')->insert([ 'userid' => $member_id, 'channel' => $gameInfo['name'] . " 渠道归属 {$channelName[$member_channel_id]} 改为 {$channelName[$channel_id]}(归属绑定处理)", 'ip' => request()->ip(), 'create_time' => $time ]); Db::commit(); return true; }catch (\Exception $e) { Db::rollback(); log_message('## CommonService@handleBelongToBinding: ' . $e->getMessage().' - '.$e->getFile().':'.$e->getLine(), 'log', LOG_PATH . 'exception/'); } return false; } }