Login.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <?php
  2. namespace App\Model;
  3. use PhalApi\Model\NotORMModel as NotORM;
  4. class Login extends NotORM {
  5. protected $fields='id,user_nickname,avatar,avatar_thumb,sex,signature,coin,user_status,login_type,province,city,area,birthday,last_login_time,code,age,mobile';
  6. /* 会员登录 */
  7. public function userLogin($user_login,$source,$mobileid) {
  8. $info1=\PhalApi\DI()->notorm->user
  9. ->select($this->fields)
  10. ->where('user_login=? and user_type="1"',$user_login)
  11. ->fetchOne();
  12. if($info1){
  13. return 1004;
  14. }
  15. $info=\PhalApi\DI()->notorm->user
  16. ->select($this->fields)
  17. ->where('user_login=? and user_type="2"',$user_login)
  18. ->fetchOne();
  19. $now=time();
  20. $nowYear=date("Y",$now);
  21. if(!$info){
  22. //获取vip
  23. $from_ip= ip2long($_SERVER["REMOTE_ADDR"]);
  24. //判断是否超过后台的配置数
  25. $checklimit=\App\checkRegIpLimit($mobileid,$from_ip);
  26. if($checklimit){
  27. return 1001;
  28. }
  29. $birthdayYear=2000;
  30. //新注册该用户
  31. $user_pass='qwe123';
  32. $user_pass=\App\setPass($user_pass);
  33. $user_login=$user_login;
  34. $nickname=\PhalApi\T('手机用户').substr($user_login,-4);
  35. $avatar='/default.png';
  36. $avatar_thumb='/default_thumb.png';
  37. $code=$this->createCode();
  38. //注册奖励
  39. $configpri=\App\getConfigPri();
  40. $reg_reward=$configpri['reg_reward'];
  41. $data=array(
  42. 'user_login' => $user_login,
  43. 'user_nickname' =>$nickname,
  44. 'user_pass' =>$user_pass,
  45. 'signature' =>\PhalApi\T('这家伙很懒,什么都没留下'),
  46. 'avatar' =>$avatar,
  47. 'avatar_thumb' =>$avatar_thumb,
  48. 'bg_img' =>$avatar,
  49. 'last_login_ip' =>$_SERVER['REMOTE_ADDR'],
  50. 'create_time' => time(),
  51. 'user_status' => 1,
  52. "user_type"=>2,//会员
  53. "code"=>$code,
  54. "coin"=>$reg_reward,
  55. "age"=>$nowYear-$birthdayYear,
  56. "birthday"=>'2000-01-01',
  57. "mobile"=>$user_login,
  58. "login_type"=>'phone',
  59. "ip"=>$from_ip,
  60. "mobileid"=>$mobileid,
  61. "is_firstlogin"=>'1'
  62. );
  63. if($source){
  64. $data['source']=$source;
  65. }
  66. $rs=\PhalApi\DI()->notorm->user->insert($data);
  67. //注册奖励写入消费记录
  68. $reg_data=array(
  69. 'type'=>'income',
  70. 'action'=>'reg_reward',
  71. 'uid'=>$rs['id'],
  72. 'touid'=>$rs['id'],
  73. 'totalcoin'=>$reg_reward,
  74. 'addtime'=>time()
  75. );
  76. \App\setCoinRecord($reg_data);
  77. $info['id']=$rs['id'];
  78. $info['user_nickname']=$data['user_nickname'];
  79. $info['avatar']=\App\get_upload_path($data['avatar']);
  80. $info['avatar_thumb']=\App\get_upload_path($data['avatar_thumb']);
  81. $info['sex']='2';
  82. $info['signature']=$data['signature'];
  83. $info['coin']=$reg_reward;
  84. $info['login_type']=$data['login_type'];
  85. $info['province']='';
  86. $info['city']='';
  87. $info['birthday']='';
  88. $info['last_login_time']='';
  89. $info['code']=$code;
  90. $info['age']="0";
  91. $info['mobile']=$user_login;
  92. $info['isreg']='1'; //此参数结合后台配置参数agent_must(邀请码是否必填),如果邀请码非必填时,只有在此参数=1时app端才会弹窗显示邀请码
  93. $info['hometown']='';
  94. }else{
  95. //重新计算用户的年龄
  96. $month=date("m",strtotime($info['birthday']));
  97. $nowMonth=date("m",$now);
  98. if($nowMonth>=$month){
  99. $cha=0;
  100. }else{
  101. $cha=1;
  102. }
  103. $birthdayYear=date("Y",strtotime($info['birthday']));
  104. $age=$nowYear-$birthdayYear-$cha;
  105. \PhalApi\DI()->notorm->user->where("id=?",$info['id'])->update(array("age"=>$age));
  106. if($info['user_status']=='0'){
  107. return 1002;
  108. }
  109. if($info['user_status']=='3'){
  110. return 1003;
  111. }
  112. unset($info['user_status']);
  113. $info['avatar']=\App\get_upload_path($info['avatar']);
  114. $info['avatar_thumb']=\App\get_upload_path($info['avatar_thumb']);
  115. $info['isreg']='0'; //此参数结合后台配置参数agent_must(邀请码是否必填),如果邀请码非必填时,只有在此参数=1时app端才会弹窗显示邀请码
  116. $info['hometown']=$info['province'].$info['city'].$info['area'];
  117. }
  118. $token=md5(md5($info['id'].$user_login.time()));
  119. $info['token']=$token;
  120. $this->updateToken($info['id'],$token);
  121. $usersign=\App\txImUserSign($info['id']);
  122. $info['usersign']=$usersign;
  123. $cache=array("token_".$info['id'],"userinfo_".$info['id']);
  124. \App\delcache($cache);
  125. return $info;
  126. }
  127. /* 第三方会员登录 */
  128. public function userLoginByThird($openid,$type,$nickname,$avatar,$source,$mobileid) {
  129. $info=\PhalApi\DI()->notorm->user
  130. ->select($this->fields)
  131. ->where('openid=? and login_type=? and user_type="2"',$openid,$type)
  132. ->fetchOne();
  133. $configpri=\App\getConfigPri();
  134. $now=time();
  135. $nowYear=date("Y",$now);
  136. if(!$info){
  137. //获取vip
  138. $from_ip= ip2long($_SERVER["REMOTE_ADDR"]);
  139. //判断是否超过后台的配置数
  140. $checklimit=\App\checkRegIpLimit($mobileid,$from_ip);
  141. if($checklimit){
  142. return 1001;
  143. }
  144. /* 注册 */
  145. $birthdayYear=2000;
  146. $user_pass='qwe123';
  147. $user_pass=\App\setPass($user_pass);
  148. $user_login=$type.'_'.time().rand(100,999);
  149. if(!$nickname){
  150. $nickname=$type.'用户-'.substr($openid,-4);
  151. }else{
  152. $nickname=urldecode($nickname);
  153. }
  154. if(!$avatar){
  155. $avatar='/default.png';
  156. $avatar_thumb='/default_thumb.png';
  157. }else{
  158. $avatar=urldecode($avatar);
  159. $avatar_thumb=$avatar;
  160. }
  161. $code=$this->createCode();
  162. //注册奖励
  163. $configpri=\App\getConfigPri();
  164. $reg_reward=$configpri['reg_reward'];
  165. $data=array(
  166. 'user_login' => $user_login,
  167. 'user_nickname' =>$nickname,
  168. 'user_pass' =>$user_pass,
  169. 'signature' =>'这家伙很懒,什么都没留下',
  170. 'avatar' =>$avatar,
  171. 'avatar_thumb' =>$avatar_thumb,
  172. 'bg_img'=>$avatar,
  173. 'last_login_ip' =>$_SERVER['REMOTE_ADDR'],
  174. 'create_time' => time(),
  175. 'user_status' => 1,
  176. 'openid' => $openid,
  177. 'login_type' => $type,
  178. "user_type"=>2,//会员
  179. "code"=>$code,
  180. "age"=>$nowYear-$birthdayYear,
  181. "birthday"=>'2000-01-01',
  182. "coin"=>$reg_reward,
  183. "ip"=>$from_ip,
  184. "mobileid"=>$mobileid
  185. );
  186. if($source){
  187. $data['source']=$source;
  188. }
  189. $rs=\PhalApi\DI()->notorm->user->insert($data);
  190. //注册奖励写入消费记录
  191. $reg_data=array(
  192. 'type'=>'income',
  193. 'action'=>'reg_reward',
  194. 'uid'=>$rs['id'],
  195. 'touid'=>$rs['id'],
  196. 'totalcoin'=>$reg_reward,
  197. 'addtime'=>time()
  198. );
  199. \App\setCoinRecord($reg_data);
  200. $info['id']=$rs['id'];
  201. $info['user_nickname']=$data['user_nickname'];
  202. $info['avatar']=\App\get_upload_path($data['avatar']);
  203. $info['avatar_thumb']=\App\get_upload_path($data['avatar_thumb']);
  204. $info['sex']='2';
  205. $info['signature']=$data['signature'];
  206. $info['coin']=$reg_reward;
  207. $info['login_type']=$data['login_type'];
  208. $info['province']='';
  209. $info['city']='';
  210. $info['birthday']='';
  211. $info['consumption']='0';
  212. $info['user_status']=1;
  213. $info['last_login_time']='';
  214. $info['isreg']='1'; //此参数结合后台配置参数agent_must(邀请码是否必填),如果邀请码非必填时,只有在此参数=1时app端才会弹窗显示邀请码
  215. }else{
  216. if($info['user_status']=='0'){
  217. return 1002;
  218. }
  219. if($info['user_status']=='3'){
  220. return 1003;
  221. }
  222. //重新计算用户的年龄
  223. $month=date("m",strtotime($info['birthday']));
  224. $nowMonth=date("m",$now);
  225. if($nowMonth>=$month){
  226. $cha=0;
  227. }else{
  228. $cha=1;
  229. }
  230. $birthdayYear=date("Y",strtotime($info['birthday']));
  231. $age=$nowYear-$birthdayYear-$cha;
  232. \PhalApi\DI()->notorm->user->where("id=?",$info['id'])->update(array("age"=>$age));
  233. $info['isreg']='0'; //此参数结合后台配置参数agent_must(邀请码是否必填),如果邀请码非必填时,只有在此参数=1时app端才会弹窗显示邀请码
  234. }
  235. unset($info['user_status']);
  236. unset($info['last_login_time']);
  237. $token=md5(md5($info['id'].$openid.time()));
  238. $info['token']=$token;
  239. $info['avatar']=\App\get_upload_path($info['avatar']);
  240. $info['avatar_thumb']=\App\get_upload_path($info['avatar_thumb']);
  241. $this->updateToken($info['id'],$token);
  242. $usersign=\App\txImUserSign($info['id']);
  243. $info['usersign']=$usersign;
  244. $cache=array("token_".$info['id'],"userinfo_".$info['id']);
  245. \App\delcache($cache);
  246. return $info;
  247. }
  248. /* 更新token 登陆信息 */
  249. public function updateToken($uid,$token) {
  250. $expiretime=time()+60*60*24*300;
  251. $nowtime=time();
  252. \PhalApi\DI()->notorm->user
  253. ->where('id=?',$uid)
  254. ->update(array('last_login_time' => time(), "last_login_ip"=>$_SERVER['REMOTE_ADDR'] ));
  255. $isok=\PhalApi\DI()->notorm->user_token
  256. ->where('user_id=?',$uid)
  257. ->update(array("token"=>$token, "expire_time"=>$expiretime ,'create_time' => $nowtime ));
  258. if(!$isok){
  259. \PhalApi\DI()->notorm->user_token
  260. ->insert(array("user_id"=>$uid,"token"=>$token, "expire_time"=>$expiretime ,'create_time' => $nowtime ));
  261. }
  262. $token_info=array(
  263. 'uid'=>$uid,
  264. 'token'=>$token,
  265. 'expire_time'=>$expiretime,
  266. );
  267. \App\setcaches("token_".$uid,$token_info);
  268. return 1;
  269. }
  270. /* 生成邀请码 */
  271. public function createCode(){
  272. $code = 'ABCDEFGHIJKLMNPQRSTUVWXYZ';
  273. $rand = $code[rand(0,25)]
  274. .strtoupper(dechex(date('m')))
  275. .date('d').substr(time(),-5)
  276. .substr(microtime(),2,5)
  277. .sprintf('%02d',rand(0,99));
  278. for(
  279. $a = md5( $rand, true ),
  280. $s = '123456789ABCDEFGHIJKLMNPQRSTUV',
  281. $d = '',
  282. $f = 0;
  283. $f < 6;
  284. $g = ord( $a[ $f ] ),
  285. $d .= $s[ ( $g ^ ord( $a[ $f + 6 ] ) ) - $g & 0x1F ],
  286. $f++
  287. );
  288. if(mb_strlen($d)==6){
  289. $oneinfo=\PhalApi\DI()->notorm->user
  290. ->select("id")
  291. ->where('code=?',$d)
  292. ->fetchOne();
  293. if(!$oneinfo){
  294. return $d;
  295. }
  296. }
  297. $d=$this->createCode();
  298. return $d;
  299. }
  300. //获取注销账号条件
  301. public function getCancelCondition($uid){
  302. $res=array('list'=>array(),'can_cancel'=>'0');
  303. $list=array(
  304. '0'=>array(
  305. 'title'=>\PhalApi\T('1、账号内无大额未消费或未提现的财产'),
  306. 'content'=>\PhalApi\T('你账号内无未结清的欠款、资金和虚拟权益,无正在处理的提现记录;注销后,账户中的虚拟权益等将作废无法恢复。'),
  307. 'is_ok'=>'0'
  308. ),
  309. );
  310. //获取用户的映票、钻石、余额
  311. $userinfo=\PhalApi\DI()->notorm->user->where("id=?",$uid)->select("coin,votes")->fetchOne();
  312. //获取用户映票提现未处理记录
  313. $votes_cashlist=\PhalApi\DI()->notorm->user_cashrecord->where("uid=? and status=0",$uid)->fetchAll();
  314. //钻石小于100,映票小于100,余额为0
  315. if($userinfo['coin']<100 && $userinfo['votes']<100 && !$votes_cashlist ){
  316. $list[0]['is_ok']='1';
  317. }
  318. if($list[0]['is_ok']==1){
  319. $res['can_cancel']='1';
  320. }
  321. $res['list']=$list;
  322. return $res;
  323. }
  324. //注销账号
  325. public function cancelAccount($uid){
  326. $condition=$this->getCancelCondition($uid);
  327. if(!$condition['can_cancel']){
  328. return 1001;
  329. }
  330. //修改用户昵称
  331. \PhalApi\DI()->notorm->user->where("id=?",$uid)->update(array('user_nickname'=>'用户已注销','user_status'=>3));
  332. //未审核的视频改为拒绝
  333. \PhalApi\DI()->notorm->user_video->where("uid=? and status=0",$uid)->update(array('status'=>2));
  334. //上架的视频改为下架
  335. \PhalApi\DI()->notorm->user_video->where("uid=? and status=1 and isdel=0",$uid)->update(array('isdel'=>1));
  336. //视频绑定的商品下架
  337. \PhalApi\DI()->notorm->shop_goods->where("uid=?",$uid)->update(array("status"=>'-1'));
  338. //删除粉丝和关注
  339. \PhalApi\DI()->notorm->user_attention->where("uid=? or touid=?",$uid,$uid)->delete();
  340. \App\delcache("userinfo_".$uid);
  341. return 1;
  342. }
  343. }