123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609 |
- <?php
- /**
- * Member.php UTF-8
- * 玩家管理类
- *
- * @date : 2017/11/24 22:30
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huo\controller\member;
- use huo\controller\common\Base;
- use huo\controller\common\HuoCookie;
- use huo\controller\common\HuoSession;
- use huo\controller\request\Channel;
- use huo\controller\request\Device;
- use huo\controller\request\Game;
- use huo\controller\request\Mem;
- use huo\controller\sign\Sign;
- use huo\controller\wallet\GmCache;
- use huo\logic\member\MemberLogic;
- use huo\model\log\MemLoginLogModel;
- use huo\model\member\MemBaseModel;
- use huo\model\member\MemberModel;
- use huo\model\member\MemGameModel;
- use huo\model\member\MemTokenModel;
- use huolib\constant\CommonConst;
- use huolib\constant\DeviceTypeConst;
- use huolib\constant\GameConst;
- use huolib\constant\MemConst;
- use huolib\constant\OauthConst;
- use huolib\constant\OptionConst;
- use huolib\status\MemberStatus;
- use huolib\tool\StrUtils;
- use huolib\utils\UserUtils;
- use think\Cookie;
- use think\Log;
- class Member extends Base {
- /**
- * 插入登陆记录
- *
- * @param Game $game_rq
- * @param Channel $channel
- * @param Device $device
- * @param Mem $member
- * @param $mem_data
- *
- * @return bool|int|string
- */
- public function insertLoginLog(Game $game_rq, Channel $channel, Device $device, Mem $member, $mem_data) {
- /* 插入mem_game */;
- $_data = $device->toArray();
- $_data['mem_id'] = $mem_data['mem_id'];
- $_data['mg_mem_id'] = $mem_data['mg_mem_id'];
- $_data['agent_id'] = $channel->getAgentId();
- $_data['agent_game'] = $channel->getAgentGame();
- $_data['app_id'] = $game_rq->getHAppId();
- $_data['reg_time'] = get_val($mem_data, 'create_time', 0);
- $_data['reg_app_id'] = get_val($mem_data, 'app_id', 0);
- // 使用请求时间
- $_request_time = request()->server('REQUEST_TIME', 0);
- $_data['create_time'] = !empty($_request_time) ? $_request_time : time();
- /* 异步处理数据 */
- $member->setRegTime($_data['reg_time']);
- $member->setMemId($_data['mem_id']);
- $member->setMgMemId($_data['mg_mem_id']);
- $member->setLoginTime(time());
- $channel->setCh($mem_data['agent_id']);
- $_device_from = $device->getFrom();
- if ((GameConst::GAME_MP != $_device_from) || (1 == $member->getisReg())) {
- if (1 == $member->getisReg()) {
- $member->setRegTime($_data['reg_time']);
- (new \huo\controller\queue\Mem($game_rq->getHAppId()))->create($device, $game_rq, $channel, $member);
- } else {
- (new \huo\controller\queue\Mem($game_rq->getHAppId()))->online($device, $game_rq, $channel, $member);
- }
- }
- /* 添加最后登录时间与登录次数 */
- $_me_cache = MemCache::ins();
- $_me_data = $_me_cache->getMeInfoById($mem_data['mem_id']);
- $_me_data['login_cnt'] += 1;
- $_me_data['last_login_time'] = $_data['create_time'];
- $_me_data['last_login_ip'] = $device->getIp();
- $_me_cache->updateMeCache($mem_data['mem_id'], $_me_data);
- /* Modified by luowei BEGIN 2021-03-11 ISSUES:14299 实名认证数据上报 */
- $_class_name = '\huoIdentify\controller\Identify';
- if (class_exists($_class_name)) {
- (new $_class_name())->reportLoginBehavior($game_rq->getHAppId(), $_data['mem_id']);
- }
- /* END 2021-03-11 ISSUES:14299 */
- return (new MemLoginLogModel())->insertLog($_data);
- }
- /**
- * 自动生成用户名
- *
- * @param string $type
- *
- * @return string
- */
- public function genUsername($type = '') {
- $_mb_model = new MemBaseModel();
- switch ($type) {
- case OauthConst::OAUTH_QQ:
- $type = OauthConst::OAUTH_QQ_PREFIX;
- break;
- case OauthConst::OAUTH_WEIBO:
- $type = OauthConst::OAUTH_WB_PREFIX;
- break;
- case OauthConst::OAUTH_WEIXIN:
- case OauthConst::OAUTH_WXQRCODE:
- $type = OauthConst::OAUTH_WX_PREFIX;
- break;
- case OauthConst::OAUTH_MP:
- $type = OauthConst::OAUTH_MP_PREFIX;
- break;
- default:
- $type = 't';
- }
- $_username = $_mb_model->genUsername($type);
- $_rs = $this->checkUserName($_username);
- $_i = 0;
- while ($_rs && $_i < 20) {
- $_i++;
- $_username = $_mb_model->genUsername();
- $_rs = $this->checkUsername($_username);
- }
- return $_username.'';
- }
- /**
- * 验证用户是否存在
- *
- * @param string $username 用户名
- *
- * @return bool 用户名已经注册返回true;没注册返回false
- */
- public function checkUserName($username = '') {
- $_mem_id = $this->getIdByName($username);
- return empty($_mem_id) ? false : true;
- }
- /**
- * 通过用户名获取Id
- *
- * @param string $username
- *
- * @return array|bool
- */
- public function getIdByName($username = '') {
- $_mem_id = (new MemberLogic())->getIdByName($username);
- return $_mem_id;
- }
- /**
- * 通过手机号获取Id
- *
- * @param string $mobile
- *
- * @return array|bool
- */
- public function getIdByMobile($mobile = '') {
- $_mem_id = (new MemberLogic())->getIdByMobile($mobile);
- return $_mem_id;
- }
- /**
- * 验证手机号是否存在
- *
- * @param string $mobile 手机号
- *
- * @return bool 手机号已经注册返回true;没注册返回false
- */
- public function checkMobile($mobile = '') {
- $_mem_data = $this->getInfoByMobile($mobile);
- return $_mem_data ? true : false;
- }
- /**
- * 校验手机号是否注册
- *
- * @param $mobile
- *
- * @return bool
- */
- public function getInfoByMobile($mobile) {
- $_mem_data = (new MemberLogic())->getInfoByMobile($mobile);
- return $_mem_data;
- }
- /**
- * 添加用户
- *
- * @param array $mem_data 玩家数据
- *
- * @return int
- */
- public function addMember($mem_data) {
- $_mem_id = (new MemberModel())->addMem($mem_data);
- if (!empty($_mem_id) && $_mem_id > 0) {
- MemCache::ins()->getInfoById($_mem_id);
- return $_mem_id;
- } else {
- return 0;
- }
- }
- /**
- * 校验密码
- *
- * @param $no_en_pwd
- * @param $db_pwd
- *
- * @return bool
- */
- public function checkPwd($no_en_pwd, $db_pwd) {
- if (cmf_password($no_en_pwd) != $db_pwd) {
- return false;
- }
- return true;
- }
- /**
- * @param string $mem_id
- * @param string $new_pwd
- *
- * @return bool
- */
- public function updatePassword($mem_id, $new_pwd) {
- $_rs = UserUtils::checkPassword($new_pwd);
- if (MemberStatus::NO_ERROR != $_rs) {
- return $_rs;
- }
- $_data['password'] = $new_pwd;
- //$_data['status'] = 2;
- return MemCache::ins()->updateMem($mem_id, $_data);
- }
- public function setMemRq(Game $game_rq, Channel $channel, Device $device, Mem &$member) {
- $member->setAgentId($channel->getAgentId());
- $member->setAppId($game_rq->getHAppId());
- $member->setDeviceId($device->getDeviceId());
- $member->setAgentId($channel->getAgentId());
- $member->setAgentGame($channel->getAgentGame());
- $member->setRegIp($device->getIp());
- $member->setFromDevice($device->getFromDevice());
- }
- /**
- * 获取玩家信息 组合
- *
- * @param $mem_id
- * @param $app_id
- *
- * @return mixed
- */
- public function getMemInfo($mem_id, $app_id = 0) {
- $_mc_class = MemCache::ins();
- $_mem_data = $_mc_class->getInfoById($mem_id);
- $_me_data = $_mc_class->getMeInfoById($mem_id);
- $_gm_data = null;
- if (!empty($app_id)) {
- $_gm_class = GmCache::ins();
- $_gm_data = $_gm_class->getInfoByMemGame($mem_id, $app_id);
- }
- $_rdata['mem_id'] = isset($_mem_data['id']) ? $_mem_data['id'] : 0;
- $_rdata['avatar'] = !empty($_mem_data['avatar']) ? $_mem_data['avatar']
- : STATICSITE.'\h5wap\images\mine_touxiang.png';
- $_rdata['real_name'] = isset($_mem_data['real_name']) ? $_mem_data['real_name'] : '';
- $_rdata['id_card'] = isset($_mem_data['id_card']) ? $_mem_data['id_card'] : '';
- $_rdata['mobile'] = isset($_mem_data['mobile']) ? $_mem_data['mobile'] : '';
- $_rdata['alipay_account'] = isset($_mem_data['alipay_account']) ? $_mem_data['alipay_account'] : '';
- $_rdata['nickname'] = empty($_mem_data['nickname']) ? $_mem_data['username'] : $_mem_data['nickname'];
- $_rdata['username'] = $_mem_data['username'];
- $_rdata['my_integral'] = isset($_me_data['my_integral']) ? $_me_data['my_integral'] : 0;
- $_rdata['gift_cnt'] = isset($_me_data['gift_cnt']) ? $_me_data['gift_cnt'] : 0;
- $_rdata['game_cnt'] = isset($_me_data['game_cnt']) ? $_me_data['game_cnt'] : 0;
- $_rdata['ptb_cnt'] = isset($_me_data['ptb_cnt']) ? StrUtils::formatNumber($_me_data['ptb_cnt']) : 0;
- $_rdata['gm_cnt'] = isset($_gm_data['remain']) ? StrUtils::formatNumber($_gm_data['remain']) : 0;
- $_rdata['has_msg'] = isset($_me_data['has_msg']) ? $_me_data['has_msg'] : 0;
- $_rdata['last_sign_time'] = isset($_me_data['last_sign_time']) ? $_me_data['last_sign_time'] : 0;
- $_rdata['sign_days'] = isset($_me_data['sign_days']) ? $_me_data['sign_days'] : 0;
- $_rdata['has_identify'] = empty($_mem_data['id_card']) ? 1 : 2;
- $_rdata['has_bind_mobile'] = empty($_mem_data['mobile']) ? 1 : 2;
- $_rdata['status'] = !empty($_mem_data['status']) ? $_mem_data['status'] : 2;
- list($_rdata['sign_days'], $_rdata['last_sign_time']) = Sign::getSignDaysAndTime(
- $_me_data['sign_days'], $_me_data['last_sign_time']
- );
- $_rdata['has_sign'] = Sign::isSignToday($_rdata['last_sign_time']) ? 2 : 1;
- return $_rdata;
- }
- protected function retSucMsg($code, $data = []) {
- $_msg = MemberStatus::getMsg($code);
- return $this->huoSuccess($code, $_msg, $data);
- }
- protected function retErrMsg($code) {
- $_err_msg = MemberStatus::getMsg($code);
- return $this->huoError($code, $_err_msg);
- }
- protected function getReturnData($mem_data, $app_id = 0, $device_type = '') {
- $_mg_data = $this->memGameLogin($mem_data, $app_id);
- $_rdata['mem_id'] = $mem_data['id'];
- $_rdata['mg_mem_id'] = !empty($_mg_data['id']) ? $_mg_data['id'] : 0;
- $_rdata['agent_game'] = $mem_data['agent_game'];
- $_rdata['agent_id'] = $mem_data['agent_id'];
- $_rdata['is_bind'] = !empty($mem_data['mobile']) ? 2 : 1;
- $_rdata['create_time'] = $mem_data['create_time'];
- $_rdata['url'] = $this->getUrl();
- $_rdata['is_reg'] = isset($mem_data['is_reg']) ? $mem_data['is_reg'] : MemConst::MEM_IS_LOGIN;
- $_rdata['app_id'] = $mem_data['app_id'];//20200809新增注册游戏id
- if (empty($mem_data['mobile'])) {
- $_rdata['is_bind'] = 2;
- }
- (new Member())->updateToken($mem_data['id'], $device_type);
- return $_rdata;
- }
- /**
- * 玩家游戏登陆
- *
- * @param $mem_data
- * @param $app_id
- *
- * @return array|bool|false
- */
- public function memGameLogin($mem_data, $app_id) {
- $_mg_data = (new MemGameModel())->login($mem_data, $mem_data['id'], $app_id);
- if (false == $_mg_data) {
- return false;
- }
- (new HuoSession($mem_data['id'], $app_id))->setMgMemId($_mg_data['id']);
- return $_mg_data;
- }
- /**
- * 登陆成功后跳转地址
- *
- * @param string $key
- *
- * @return mixed|string
- */
- public function getUrl($key = '') {
- if (!empty($key)) {
- $_redirect_url = Cookie::get($key);
- }
- if (empty($_redirect_url)) {
- //$_redirect_url = '';// TODO: wuyonghong 2018/4/26
- $_redirect_url = request()->param('redirect_url', '');
- }
- return $_redirect_url;
- }
- /**
- * 修改密码
- *
- * @param $mem_id
- * @param $oldpwd
- * @param $newpwd
- *
- * @return array|int
- */
- public function updatePwd($mem_id, $oldpwd, $newpwd) {
- $_mem_data = MemCache::ins()->getInfoById($mem_id);
- if (empty($_mem_data)) {
- $_code = MemberStatus::USERNAME_NOT_EXISTS;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- //验证旧密码
- $_chk_pwd = $this->checkPwd($oldpwd, $_mem_data['password']);
- if (false == $_chk_pwd) {
- $_code = MemberStatus::PASSWORD_ERROR;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- //验证新密码
- $_chk_pwd_rs = UserUtils::checkPassword($newpwd);
- if (MemberStatus::NO_ERROR != $_chk_pwd_rs) {
- return $this->huoError($_chk_pwd_rs, MemberStatus::getMsg($_chk_pwd_rs));
- }
- //修改密码
- $_rs = $this->updatePassword($mem_id, $newpwd);
- if (is_numeric($_rs)) {
- $_code = $_rs;
- } elseif (false !== $_rs) {
- $_code = MemberStatus::NO_ERROR;
- } else {
- $_code = MemberStatus::UNKNOWN_ERROR;
- }
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- /**
- * 修改昵称
- *
- * @param $mem_id
- * @param $nickname
- *
- * @return array
- */
- public function updateNickname($mem_id, $nickname) {
- $_res = $this->checkMemCanEdit($mem_id);
- if ($_res['code'] != MemberStatus::NO_ERROR) {
- return $_res;
- }
- $_chk_nickname_rs = UserUtils::checkNickname($nickname);
- if (MemberStatus::NO_ERROR != $_chk_nickname_rs) {
- return $this->huoError($_chk_nickname_rs, MemberStatus::getMsg($_chk_nickname_rs));
- }
- $_mem_class = new Member();
- $_mem_data = $_mem_class->getMemInfo($mem_id);
- if (empty($_mem_data)) {
- $_code = MemberStatus::USERNAME_NOT_EXISTS;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- $_data['nickname'] = $nickname;
- $_rs = MemCache::ins()->updateMem($mem_id, $_data);
- if (is_numeric($_rs)) {
- $_code = $_rs;
- } elseif (false !== $_rs) {
- $_code = MemberStatus::NO_ERROR;
- } else {
- $_code = MemberStatus::UNKNOWN_ERROR;
- }
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- /**
- * 通过token获取玩家Id
- *
- * @param string $token Token
- *
- * @param string $device_type 设备信息
- * @param bool $is_up 是否更新
- *
- * @return int
- */
- public function getMemIdByToken($token, $device_type = DeviceTypeConst::DEVICE_TYPE_MP, $is_up = false) {
- if (empty($token)) {
- return 0;
- }
- $_mt_model = new MemTokenModel();
- $_mt_data = $_mt_model->getTokenInfoByToken($token, $device_type);
- if (empty($_mt_data)) {
- return 0;
- }
- $_now_time = time();
- if ($_now_time > $_mt_data['expire_time']) {
- /* 已过期 */
- return 0;
- }
- $_mem_id = $_mt_data['mem_id'];
- $_rs = $is_up;
- /* 时间大于一天 86400s 更新token */
- if ($_rs && $_now_time > $_mt_data['update_time'] + CommonConst::CONST_DAY_SECONDS) {
- $_edit_rs = $this->updateToken($_mem_id, $device_type);
- if (false === $_edit_rs) {
- return 0;
- }
- }
- return $_mem_id;
- }
- /**
- * @param int $mem_id
- * @param string $device_type
- *
- * @return bool
- */
- public function addToken($mem_id, $device_type = DeviceTypeConst::DEVICE_TYPE_MP) {
- $_token = (new MemTokenModel())->addToken($mem_id, $device_type);
- if (false === $_token) {
- return false;
- }
- HuoCookie::setMemToken($_token);
- return true;
- }
- /**
- * 更新玩家token
- *
- * @param int $mem_id
- * @param string $device_type
- *
- * @return bool
- */
- public function updateToken($mem_id, $device_type = DeviceTypeConst::DEVICE_TYPE_MP) {
- $_mt_model = new MemTokenModel();
- $_mt_data = $_mt_model->getTokenInfoByMemDevice($mem_id, $device_type);
- if (empty($_mt_data)) {
- $_token = $_mt_model->addToken($mem_id, $device_type);
- if (false == $_token) {
- return false;
- }
- } else {
- $_token = $_mt_model->editToken($_mt_data, $_mt_data['id']);
- if (false == $_token) {
- return false;
- }
- }
- Log::write(
- "@@@@@@@@" . $_token, Log::ERROR
- );
- HuoCookie::setMemToken($_token);
- Log::write(
- "????????" . Cookie::get('MTT'), Log::ERROR
- );
- return $_token;
- }
- /**
- * 查找玩家支付宝是否绑定玩家
- *
- * @param string $alipay_account
- *
- * @return int
- */
- public function getMemIdByAlipayAccount($alipay_account) {
- return (new MemberModel())->getMemIdByAlipayAccount($alipay_account);
- }
- /**
- * 修改昵称
- *
- * @param int $mem_id 玩家ID
- * @param string $avatar 头像地址
- *
- * @return array
- */
- public function updateAvatar($mem_id, $avatar) {
- $_res = $this->checkMemCanEdit($mem_id);
- if ($_res['code'] != MemberStatus::NO_ERROR) {
- return $_res;
- }
- $_mc_class = MemCache::ins();
- $_mem_data = $_mc_class->getInfoById($mem_id);
- if (empty($_mem_data)) {
- $_code = MemberStatus::USERNAME_NOT_EXISTS;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- $_data['avatar'] = $avatar;
- $_rs = $_mc_class->updateMem($mem_id, $_data);
- if (is_numeric($_rs)) {
- $_code = $_rs;
- } elseif (false !== $_rs) {
- $_code = MemberStatus::NO_ERROR;
- } else {
- $_code = MemberStatus::UNKNOWN_ERROR;
- }
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- public function checkMemCanEdit($mem_id) {
- $_mc_class = MemCache::ins();
- $_mem_data = $_mc_class->getMeInfoById($mem_id);
- if (empty($_mem_data)) {
- $_code = MemberStatus::USERNAME_NOT_EXISTS;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- $_conf = cmf_get_option(OptionConst::WAP_MEM_EDIT_SETTING);
- if (empty($_conf['mem_can_edit_pay_amount'])) {
- $_code = MemberStatus::NO_ERROR;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- if ($_mem_data['sum_money'] < $_conf['mem_can_edit_pay_amount']) {
- $_code = MemberStatus::MEM_NOT_REACH_STAND;
- $_msg = '该功能只开放VIP玩家,充值'.$_conf['mem_can_edit_pay_amount'].'元以上的会员';
- return $this->huoError($_code, $_msg);
- }
- $_code = MemberStatus::NO_ERROR;
- return $this->huoError($_code, MemberStatus::getMsg($_code));
- }
- }
|