tablePrefix ='tab_'; /* 执行构造方法 */ parent::__construct($name, $tablePrefix, $connection); } /** * 验证用户名 */ public function checkUsername($username){ $map = array(); $map['account'] = $username; $user = $this->where($map)->find(); return $user; } /** * 用户注册 */ public function register($username, $password, $email, $realname, $idcard){ $data = array( 'account' => $username, 'password' => $password, 'flatcoin' => 0, 'viplevel' => 0, 'addup' => 0, 'lock' => 1, 'createdate' => date("Y-m-d H:i:s",time()), 'email' => $email, 'realname' => $realname, 'idcard' => $idcard, 'registerip' => $this->getIPaddress(), ); // 添加用户 if($this->create($data)){ $uid = $this->add(); return $uid ? $uid : 0; //0-未知错误,大于0-注册成功 } else { return $this->getError(); } } /** * 获取用户信息 * @param $account * @param array $filed * @return mixed * author: xmy 280564871@qq.com */ public function getUserByAccount($account,$filed=['*']){ $map['account'] = $account; $data = $this->field($filed)->where($map)->find(); return $data; } /** * 修改密码 * @param $phone * @param $old_pwd 旧密码 * @param $new_pwd 新密码 * @return bool * author: xmy 280564871@qq.com */ public function changePwd($account, $old_pwd, $new_pwd) { //修改UC密码 $result = $this->changeUcPwd($account,$old_pwd,$new_pwd,0); if(!$result){ return false; } $user = $this->getUserByAccount($account); if (!empty($user) && think_psw_md5($old_pwd, UC_AUTH_KEY) === $user['password']) { $user['password'] = think_psw_md5($new_pwd, UC_AUTH_KEY); $result = $this->save($user); }else{ $result = -1; } return $result; } /** * 修改UC密码 * @param $account * @param string $old_pwd 旧密码 * @param $new_pwd 新密码 * @param $type 0 修改密码 1 忘记密码 * @return bool * author: xmy 280564871@qq.com */ private function changeUcPwd($account,$old_pwd="",$new_pwd,$type){ //修改UC密码 if(C('UC_SET') == 1){ $uc = new Ucservice(); $data_uc = $uc->get_uc($account); if (is_array($data_uc)) { $result = $uc->uc_edit($account, $old_pwd, $new_pwd,'',$type); if($result < 0){ return false; } return true; }else{ return true; } }else{ return true; } } function getIPaddress(){ $ip=false; if(!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip=$_SERVER['HTTP_CLIENT_IP']; } if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); if($ip){ array_unshift($ips, $ip); $ip=FALSE; } for ($i=0; $i < count($ips); $i++){ if(!eregi ('^(10│172.16│192.168).', $ips[$i])){ $ip=$ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); } /** * 用户登录 */ public function login($uid){ $user = $this->field(true)->find($uid); //if(!$user || 1 != $user['status']) { if (!$user && 1 != $user['lock']) { $this->error = '用户不存在或已被禁用!'; //应用级别禁用 return false; } $this->autoLogin($user); return true; } /** * 验证邮箱 */ public function checkEmail($email) { $user = $this->where('email="'.$email.'"')->find(); return $user; } /** * 修改密码 */ public function update($uid,$password) { $data = array( 'playerid' => $uid, 'password' => think_ucenter_md5($password, UC_AUTH_KEY), ); return $this->save($data); } /** * 获取用户信息 * @param $user_id * @param array $field * @return mixed * author: xmy 280564871@qq.com */ public function getUserInfo($account,$field=['id','account','nickname','promote_id','phone','balance','head_img','sex','point','idcard','real_name','age_status']){ //根据手机号或者账号查找信息(WAP找回密码需要根据手机号查找) $map['account'] = $account; $map['phone'] = $account; $map['_logic'] = 'OR'; $data = $this->field($field)->where($map)->find(); if (empty($data)){ return $data; } if(is_numeric($data['head_img'])){ $head_img = get_img_url($data['head_img']); $data['head_img'] = $head_img == false?"":$head_img; } if ($data['age_status']==0 && !empty($data['idcard']) && !empty($data['real_name'])){ $data['age_status'] = 4; } return $data; } /** * 退出 */ public function logout(){ $member = new SuserApi; $member->logout(); } public function getLoginInfo() { $member = new SuserApi; return $member->login_info(); } /** * 检测用户是否已登录 */ public function isLogin() { $users = $this->getLoginInfo(); if(is_array($users) && !empty($users['username'])) { return $users; }else { return false; } } public function updateInfo($uid,$info='',$type) { $data['playerid'] = $uid; if('email'==$type) { if (preg_match("/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i",$info)) { $data['email']=$info; $type = 1; } else $type = -5; } if ('phone'==$type) { if (preg_match("/^13[0-9]{1}[0-9]{8}$|15[0189]{1}[0-9]{8}$|189[0-9]{8}$/",$info)) { $data['phone']=$info; $type = 1; } else $type = -9; } if ($type>0) { $this->save($data); return true; } else { return $type; } } /** * 密码 */ public function checkPwd($username,$password) { $account['account']=$username; $user = $this->where($account)->find(); if(is_array($user)){ if(think_ucenter_md5($password, UC_AUTH_KEY) === $user['password']){ return $user['playerid']; //登录成功,返回用户ID } else { return -2; //密码错误 } } else { return -1; //用户不存在或被禁用 } } /** * 自动登录用户 */ private function autoLogin($user){ // 更新登录信息 $data = array( 'playerid' => $user['playerid'], 'addup' => array('exp', '`addup`+1'), 'lastlogintime' => date("Y-m-d H:i:s",time()), 'lastloginip' => $this->getIPaddress(), ); $this->save($data); // 设置session $auth = array( 'uid' => $user['playerid'], 'username' => $user['account'], 'flatcoin' => empty($user['flatcoin'])?0:$user['flatcoin'], 'status' => $user['lock'], 'logintime' => $user['lastlogintime'], ); session('user_auth', $auth); session('user_auth_sign', data_auth_sign($auth)); cookie('user_auth',$auth,3600); } /** * 添加支付宝 * @author 鹿文学 */ public function saveAlipay() { $alipay = $_POST['alipay']; $alipay_real_name = $_POST['alipay_real_name']; if(empty($alipay)) {return ['status'=>0,'info'=>'支付宝不能为空'];} if(empty($alipay_real_name)) {return ['status'=>0,'info'=>'真实姓名不能为空'];} if(!preg_match('/^[\x{4e00}-\x{9fa5}]{2,}$/u',$alipay_real_name)) {return ['status'=>0,'info'=>'真实姓名必须是大于2位的汉字'];} $user = $this->getLoginInfo(); $data = array('alipay'=>$alipay,'alipay_real_name'=>$alipay_real_name); $res = $this->where(['id'=>$user['user_id']])->save($data); if ($res) { return ['status'=>1,'info'=>'支付宝添加成功']; } else { return ['status'=>1,'info'=>'支付宝添加成功']; } } /** * 获取支付宝信息 */ public function getAlipay() { $user = $this->getLoginInfo(); return $this->field('id,alipay,alipay_real_name')->where(['id'=>$user['user_id']])->find(); } public function useing_record($p=1) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $row = 10; $spend = M('Spend','tab_'); $deposit = M('Deposit','tab_'); $bind = M('BindRecharge','tab_'); $user = $this->getLoginInfo(); if(is_array($user)) { $map['pay_status'] = 1; $map['user_id'] = $user['user_id']; $bindids = $bind->field('GROUP_CONCAT(id) as ids')->where($map)->group('user_id')->select(); $map['pay_way'] = array('gt',0); $depositids = $deposit->field('GROUP_CONCAT(id) as ids')->where($map)->group('user_id')->select(); $spendids = $spend->field('GROUP_CONCAT(id) as ids')->where($map)->group('user_id')->select(); $ids=''; if(!empty($bindids[0]['ids'])){ $bids = $bindids[0]['ids']; $ids .= ','.$bids;$bmap['b.id'] = array('in',$bids);} if(!empty($depositids[0]['ids'])){$dids = $depositids[0]['ids']; $ids .= ','.$dids;$dmap['d.id'] = array('in',$dids);} if(!empty($spendids[0]['ids'])){$sids = $spendids[0]['ids']; $ids .= ','.$sids;$smap['s.id'] = array('in',$sids);} if(!empty($ids)) { $count = count(explode(',',substr($ids,1))); if(!empty($smap)) { empty($bmap) || $bind_data = $bind->alias('b')->field('b.id,b.amount as pay_amount,FROM_UNIXTIME(b.create_time,"%Y-%m-%d %H:%i:%s") as pay_time,b.game_id,b.game_name,b.zhekou')->where($bmap)->select(false); empty($dmap) || $deposit_data = $deposit->alias('d')->field('d.id,d.pay_amount,FROM_UNIXTIME(d.create_time,"%Y-%m-%d %H:%i:%s") as pay_time,if(d.user_id,0,0) as game_id,if(d.user_account,"","") as game_name,IF (d.user_id, -1, -1) as zhekou')->where($dmap)->select(false); $sql = $spend->alias('s')->field('s.id,s.pay_amount,FROM_UNIXTIME(s.pay_time,"%Y-%m-%d %H:%i:%s") as pay_time,s.game_id,s.game_name,IF (s.user_id, -1, -1) as zhekou') ->union($bind_data) ->union($deposit_data) ->where($smap)->select(false); $lists = $spend->table('('.$sql.') as a')->page($page,$row)->select(); } elseif(!empty($dmap)) { empty($bmap) || $bind_data = $bind->alias('b')->field('b.id,b.amount as pay_amount,FROM_UNIXTIME(b.create_time,"%Y-%m-%d %H:%i:%s") as pay_time,b.game_id,b.game_name,b.zhekou')->where($bmap)->select(false); $sql = $deposit->alias('d')->field('d.id,d.pay_amount,FROM_UNIXTIME(d.create_time,"%Y-%m-%d %H:%i:%s") as pay_time,if(d.user_id,0,0) as game_id,if(d.user_account,"","") as game_name,IF (d.user_id, -1, -1) as zhekou') ->union($bind_data) ->where($dmap)->select(false); $lists = $spend->table('('.$sql.') as a')->page($page,$row)->select(); } elseif(!empty($bmap)) { $sql = $bind->alias('b')->field('b.id,b.amount as pay_amount,FROM_UNIXTIME(b.create_time,"%Y-%m-%d %H:%i:%s") as pay_time,b.game_id,b.game_name,b.zhekou')->where($bmap)->select(); $lists = $spend->table('('.$sql.') as a')->page($page,$row)->select(); } } } if(is_array($lists)) { $data['lists'] = $lists;$data['status']=1; if($count > $row){ $data['total'] = ceil($count/$row); } else { $data['total']=1; } } else { $data['lists']='';$data['total'] = 1;$data['status'] = 0; } $data['current'] = $page; return $data; } /** * 规则显示与否 * @param integer $type 类型 0:表示买家 1:表示卖家 * @return array * @author 鹿文学 */ public function set_rule_status($type=0) { if(is_numeric($type) && ($type == 1 || $type == 0)) { $user = $this->getLoginInfo(); if(is_array($user)) { $rule = $_POST['rule']; if($type == 1){$data['seller_rule']=$rule;}else{$data['buyer_rule']=$rule;} $res = $this->where(['id'=>$user['user_id']])->save($data); if($res) { return ['status'=>1,'info'=>'已记住']; } else { return ['status'=>0,'info'=>'更改失败']; } } else { return ['status'=>0,'info'=>'未登录']; } } else { return ['status'=>0,'info'=>'参数错误']; } } /** * 获取规则显示与否 * @param integer $type 类型 0:表示买家 1:表示卖家 * @return array * @author 鹿文学 */ public function get_rule_status($type=0) { if(is_numeric($type) && ($type == 1 || $type == 0)) { $user = $this->getLoginInfo(); if(is_array($user)) { if($type == 1){$fields = 'seller_rule';}else{$fields = 'buyer_rule';} $data = $this->field($fields)->where(['id'=>$user['user_id']])->find(); return $data[$fields]?$data[$fields]:0; } else { return 0; } } else { return 0; } } /** * 获取小号信息 * @param integer $id 小号编号 * @return array * @author 鹿文学 */ public function get_small_info($id=0) { $data = $this->field('DATEDIFF(CURDATE(),FROM_UNIXTIME(register_time,"%Y-%m-%d")) as day,cumulative as accumulation') ->where(['id'=>$id])->find(); return $data; } /** * 获取金币数额 * @return integer * @author 鹿文学 */ public function get_gold_coin() { $user = $this->getLoginInfo(); $gold_coin = $this->field('gold_coin')->where(['id'=>$user['user_id']])->find(); return $gold_coin['gold_coin']; } /** * 获取金币相关信息 * @return array * @author 鹿文学 */ public function get_info_about_gold() { $user = $this->getLoginInfo(); $gold_coin = $this->field('id,account,gold_coin,alipay,alipay_real_name')->where(['id'=>$user['user_id']])->find(); return $gold_coin; } public function get_phone() { $user = $this->getLoginInfo(); $data = $this->field('account,phone')->where(['id'=>$user['user_id']])->find(); if(preg_match('/^1[3456789][0-9]{9}$/u',$data['account'])) { return $data['account']; } elseif (!empty($data['phone'])) { return $data['phone']; } else { return ''; } } /** * 获取小号列表通过游戏 * @param integer $game_id 游戏编号 * @return array * @author 鹿文学 */ public function get_small_list_by_game($game_id=0) { if(is_numeric($game_id) && $game_id > 0) { $lists = $this->get_small_list_on_shop($game_id); $spend = $this->get_small_list_on_self($game_id); if(!is_array($lists)) {$lists = array();} if(!is_array($spend)) {$spend = array();} return array_merge($lists,$spend); } else { return ''; } } /** * 获取自己购买的小号列表 * @param integer $game_id 游戏编号 * @return array * @author 鹿文学 */ public function get_small_list_on_shop($game_id=0) { if(is_numeric($game_id) && $game_id > 0) { $user = D('User')->getLoginInfo(); $lists = $this->alias('u')->field('u.id as small_id,u.account as small_account,u.cumulative') ->join('tab_merchandise as m on (m.small_id=u.id and m.status=1) ') ->where(['m.game_id'=>$game_id,'u.lock_status'=>1,'u.puid'=>$user['user_id'],'source_puid'=>array('gt',0),'source_time'=>array('gt',0)])->select(); return $lists; } else { return ''; } } /** * 获取自己创建的且充过值的小号列表 * @param integer $game_id 游戏编号 * @return array * @author 鹿文学 */ public function get_small_list_on_self($game_id=0) { if(is_numeric($game_id) && $game_id > 0) { $user = D('User')->getLoginInfo(); $lists = $this->alias('u')->field('u.id as small_id,u.account as small_account,u.cumulative') ->join('tab_spend as s on(u.id=s.small_id and s.pay_status=1) ') ->where(['s.game_id'=>$game_id,'u.lock_status'=>1,'u.puid'=>$user['user_id'],'u.source_puid'=>0,'u.source_time'=>0])->group('s.small_id')->select(); return $lists; } else { return ''; } } /** * 获取自己创建的且充过值的小号列表 * @param string $fields 字段列表 * @return array * @author 鹿文学 */ public function getInfo($fields=true) { $session = $this->getLoginInfo(); $data = $this->field($field)->where(['id'=>$session['user_id']])->find(); if (empty($data)){ return $data; } if(is_numeric($data['head_img'])){ $head_img = get_img_url($data['head_img']); $data['head_img'] = $head_img == false?"":$head_img; } if ($data['age_status']==0 && !empty($data['idcard']) && !empty($data['real_name'])){ $data['age_status'] = 4; } return $data; } }