login.action.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | FANWE 直播系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. class loginModule extends baseModule
  10. {
  11. /**
  12. * 手机登录接口
  13. */
  14. public function do_login()
  15. {
  16. $m_config = load_auto_cache("m_config");//初始化手机端配置
  17. if(trim($_REQUEST['mobile']) == '13888888888'||trim($_REQUEST['mobile']) == '13999999999'){
  18. //控制审核账号登录
  19. $dev_type = strim($_REQUEST['sdk_type']);
  20. if ($dev_type == 'ios'){
  21. if($m_config['ios_check_version'] == ''){
  22. $root['status'] = 0;
  23. $root['error'] = '审核账号非审核期间无法登录!';
  24. ajax_return($root);
  25. }
  26. }else{
  27. $root['status'] = 0;
  28. $root['error'] = '审核账号只能IOS端登录!';
  29. ajax_return($root);
  30. }
  31. if($GLOBALS['db']->getOne("SELECT count(*) FROM ".DB_PREFIX."user WHERE mobile='".$_REQUEST['mobile']."'")>0){
  32. $root = array('status' => 0,'error'=>'','first_login'=>0);
  33. if(!$_REQUEST)
  34. {
  35. app_redirect(APP_ROOT."/");
  36. }
  37. foreach($_REQUEST as $k=>$v)
  38. {
  39. $_REQUEST[$k] = strim($v);
  40. }
  41. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  42. $result = do_login_user($_REQUEST['mobile'],$_REQUEST['verify_coder']);
  43. if($result['status'])
  44. {
  45. $root['user_id'] = $result['user']['id'];
  46. $root['status'] = 1;
  47. $root['is_lack'] = $result['is_lack'];
  48. $root['is_agree'] = intval($result['user']['is_agree']);//是否同意直播协议 0 表示不同意 1表示同意
  49. $root['user_id'] = intval($result['user']['id']);
  50. $root['nick_name'] = $result['user']['nick_name'];
  51. if($root['is_lack']){
  52. }else{
  53. $root['error'] = "登录成功";
  54. }
  55. $root['user_info'] = $result['user_info'];
  56. $root['first_login'] = $result['first_login'];
  57. $root['new_level'] = $result['new_level'];
  58. $root['login_send_score'] = intval($m_config['login_send_score']);
  59. }
  60. else
  61. {
  62. $root['error'] = $result['info'];
  63. }
  64. ajax_return($root);
  65. }elseif($GLOBALS['db']->getOne("SELECT count(*) FROM ".DB_PREFIX."user WHERE mobile='".$_REQUEST['mobile']."'")==0){
  66. $root = array('status' =>0,'error'=>'','first_login'=>0,'new_level'=>0);
  67. $image = array(
  68. './public/attachment/test/noavatar_0.JPG',
  69. './public/attachment/test/noavatar_1.JPG',
  70. './public/attachment/test/noavatar_2.JPG',
  71. './public/attachment/test/noavatar_3.JPG',
  72. './public/attachment/test/noavatar_4.JPG',
  73. './public/attachment/test/noavatar_5.JPG',
  74. './public/attachment/test/noavatar_6.JPG',
  75. './public/attachment/test/noavatar_7.JPG',
  76. './public/attachment/test/noavatar_8.JPG',
  77. );
  78. $random = mt_rand(0,8);
  79. //$user_id = get_max_user_id(0);
  80. $head_image =$image[$random];
  81. $nick_name='方维科技';
  82. $mobile = trim($_REQUEST['mobile']);
  83. $signature='方维科技';
  84. if($random%2==0)
  85. $sex = 1;
  86. else
  87. $sex = 2;
  88. $data = array(
  89. 'head_image'=>$head_image,
  90. 'nick_name'=>$nick_name,
  91. 'sex'=>$sex,
  92. 'mobile'=>$mobile,
  93. 'signature'=>$signature,
  94. );
  95. if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!='NONE')
  96. {
  97. syn_to_remote_image_server($data['head_image']);
  98. }
  99. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  100. $return = save_user($data);
  101. $user_data = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where id =".$return['data']);
  102. if($user_data['id']!=''){
  103. $root['status'] = 1;
  104. $root['error'] = '注册登录成功';
  105. //添加 10000 钻石
  106. $GLOBALS['db']->query("update ".DB_PREFIX."user set `diamonds`=10000 where id =".$return['data']);
  107. if($GLOBALS['db']->affected_rows()){
  108. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
  109. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
  110. $user_redis = new UserRedisService();
  111. $update_data['diamonds'] = 10000;
  112. $user_redis->update_db($return['data'], $update_data);
  113. }
  114. //修改登录时间之前,获取上一次登录时间,每日首次登录赠送积分
  115. $login_root = login_prompt($user_data['id']);
  116. $root['first_login'] = $login_root['first_login'];
  117. $root['new_level'] = $login_root['new_level'];
  118. $root['login_send_score'] = intval($m_config['login_send_score']);
  119. $GLOBALS['db']->query("update ".DB_PREFIX."user set login_ip = '".get_client_ip()."',login_time= '".to_date(NOW_TIME)."' where id =".$user_data['id']);
  120. $user_redis->update_db($user_data['id'],array("login_time"=>to_date(NOW_TIME)));
  121. es_session::set("user_info",$user_data);
  122. $GLOBALS['user_info'] = $user_data;
  123. es_cookie::set("client_ip",CLIENT_IP,3600*24*30);
  124. es_cookie::set("nick_name",$user_data['nick_name'],3600*24*30);
  125. es_cookie::set("user_id",$user_data['id'],3600*24*30);
  126. es_cookie::set("user_pwd",md5($user_data['user_pwd']."_EASE_COOKIE"),3600*24*30);
  127. es_cookie::set("PHPSESSID2",es_session::id(),3600*24*30);
  128. $root['user_id'] = $user_data['id'];
  129. $root['nick_name'] = $user_data['nick_name'];
  130. $root['is_agree'] = intval($user_data['is_agree']);//是否同意直播协议 0 表示不同意 1表示同意
  131. $root['user_info']['user_id'] =$user_data['id'];
  132. $root['user_info']['nick_name'] =$user_data['nick_name'];
  133. $root['user_info']['mobile'] =$user_data['mobile'];
  134. $root['user_info']['signature'] =$user_data['signature'];
  135. $root['user_info']['head_image'] =get_spec_image($user_data['head_image']);
  136. if($user_data['synchronize'] == 0){
  137. //同步IM
  138. accountimport($user_data);
  139. }
  140. //当固定号码注册成功时,更新一次签名,防止报错.
  141. $GLOBALS['db']->query("update ".DB_PREFIX."user set `signature`=$signature where id =".$return['data']);
  142. if($GLOBALS['db']->affected_rows()){
  143. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php');
  144. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
  145. $user_redis = new UserRedisService();
  146. $user_data['signature'] = $signature;
  147. $user_redis->update_db($return['data'], $user_data);
  148. }
  149. }
  150. ajax_return($root);
  151. }
  152. } else{
  153. $root = array('status' => 0,'error'=>'','first_login'=>0);
  154. if(!$_REQUEST)
  155. {
  156. app_redirect(APP_ROOT."/");
  157. }
  158. foreach($_REQUEST as $k=>$v)
  159. {
  160. $_REQUEST[$k] = strim($v);
  161. }
  162. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  163. $result = do_login_user($_REQUEST['mobile'],$_REQUEST['verify_coder']);
  164. if($result['status'])
  165. {
  166. $root['user_id'] = $result['user']['id'];
  167. $root['status'] = 1;
  168. $root['is_lack'] = $result['is_lack'];
  169. $root['is_agree'] = intval($result['user']['is_agree']);//是否同意直播协议 0 表示不同意 1表示同意
  170. $root['user_id'] = intval($result['user']['id']);
  171. $root['nick_name'] = $result['user']['nick_name'];
  172. if($m_config['name_limit']==1){
  173. //登录过滤铭感词汇
  174. $nick_name=$result['user']['nick_name'];
  175. $limit_sql =$GLOBALS['db']->getCol("SELECT name FROM ".DB_PREFIX."limit_name");
  176. //判断用户名是否含有铭感词汇,如果包含,替换
  177. if($GLOBALS['db']->getCol("SELECT name FROM ".DB_PREFIX."limit_name WHERE '$nick_name' like concat('%',name,'%')")){
  178. $root['nick_name']=str_replace($limit_sql,'',$nick_name);
  179. }
  180. //判断用户名如果被过滤后为空,格式则变更为: 账号+ID
  181. if($root['nick_name']==''){
  182. $root['nick_name']=('账号'.$root['user_id']);
  183. }
  184. $result['user_info']['nick_name']=$root['nick_name'];
  185. $name=$result['user_info']['nick_name'];
  186. $id=$result['user']['id'];
  187. //更新数据库
  188. $sql = "update ".DB_PREFIX."user set nick_name = '$name' where id=".$id;
  189. $GLOBALS['db']->query($sql);
  190. //更新redis
  191. user_deal_to_reids(array($id));
  192. }
  193. $is_effect = $GLOBALS['db']->getOne("select is_effect from ".DB_PREFIX."user where id =".$root['user_id']);
  194. if($root['is_lack']){
  195. $root['error'] = "请更新个人信息";
  196. }elseif($is_effect!=1){
  197. ajax_return(array("status"=>0,"error"=>'账号已被禁用'));
  198. }elseif($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  199. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  200. }else{
  201. $root['error'] = "登录成功";
  202. }
  203. $root['user_info'] = $result['user_info'];
  204. $root['first_login'] = $result['first_login'];
  205. $root['new_level'] = $result['new_level'];
  206. $root['login_send_score'] = intval($m_config['login_send_score']);
  207. //登录日志
  208. $log_date = array();
  209. if (is_array($_REQUEST)) $log_date['request'] = json_encode($_REQUEST);
  210. $log_date['login_type'] = 2 ;
  211. $log_date['user_id'] = $root['user_id'];
  212. if(function_exists('log_login')){
  213. log_login($log_date);
  214. }
  215. }
  216. else
  217. {
  218. $root['error'] = $result['info'];
  219. }
  220. ajax_return($root);
  221. }
  222. }
  223. /**
  224. * 手机登录更新(昵称、性别、头像)
  225. */
  226. public function do_update()
  227. {
  228. $root =array("status"=>0,"error"=>'');
  229. if(!$GLOBALS['user_info']){
  230. $root['error'] = "用户未登陆,请先登陆.";
  231. $root['status'] = 0;
  232. $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
  233. }else{
  234. $user_data = array();
  235. $user_req = $_REQUEST;
  236. foreach($user_req as $k=>$v)
  237. {
  238. $user_req[$k] = strim($v);
  239. }
  240. $user_id = $GLOBALS['user_info']['id'];
  241. $user_data['id'] = $user_id;
  242. $type = intval($user_req['type']);//开启oss 上传OSS图片链接
  243. $oss_path = $user_req['oss_path'];//开启oss 上传OSS图片链接
  244. $normal_head_path = $user_req['normal_head_path'];//修改头像上传的图片链接
  245. $nick_name = $user_req['nick_name'];
  246. $head_image = $user_req['head_image'];//注册时候上传的头像链接
  247. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  248. if($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  249. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  250. }
  251. $m_config = load_auto_cache("m_config");//初始化手机端配置
  252. $open_sts = intval($m_config['open_sts']);
  253. $system_head_image = $m_config['app_logo'];
  254. //oss //注册流程 (ios:$normal_head_path=='',android:intval($user_req['sex'])!=0)&&$type==0
  255. //2.2 版本以后优化此部分 去除 $normal_head_path 和 $user_req['sex']的判断,目前兼容旧版本暂时保留
  256. if($normal_head_path==''&&$type==0&&intval($user_req['sex'])!=0){
  257. $GLOBALS['db']->query("set names 'utf8mb4'");
  258. $nick_name = emoji_encode($nick_name);
  259. if($nick_name==''){
  260. ajax_return(array("status"=>0,"error"=>'请输入昵称'));
  261. }else{
  262. $user_data['nick_name'] = $nick_name;
  263. }
  264. if($GLOBALS['db']->getOne("SELECT nick_name FROM ".DB_PREFIX."user WHERE nick_name<>".$user_id." and nick_name ='$nick_name'"))
  265. {
  266. ajax_return(array("status"=>0,"error"=>'昵称被占用,请重新输入'));
  267. }
  268. //过滤敏感词
  269. if($m_config['name_limit']==1){
  270. $limit_sql =$GLOBALS['db']->getCol("SELECT name FROM ".DB_PREFIX."limit_name");
  271. //昵称如果等于铭感词,则提示,如果包含 则用*代替
  272. $in=in_array($nick_name,$limit_sql);
  273. if($in){
  274. ajax_return(array("status"=>0,"error"=>'昵称包含敏感词汇'));
  275. }elseif($GLOBALS['db']->getCol("SELECT name FROM ".DB_PREFIX."limit_name WHERE '$nick_name' like concat('%',name,'%')")){
  276. $user_data['nick_name']=str_replace($limit_sql,'*',$nick_name);
  277. }
  278. }
  279. $user_data['sex'] = $user_req['sex']==1?1:2;
  280. //
  281. //判断头像 IOS 上传参数 $head_image;Android:$oss_path
  282. if($head_image==''&&$oss_path==''){
  283. if($system_head_image==''){
  284. $head_image = './public/attachment/test/noavatar_10.JPG';
  285. syn_to_remote_image_server($head_image,false);
  286. }else{
  287. $head_image = $system_head_image;
  288. }
  289. }else{
  290. if($oss_path!=''){
  291. $head_image=$oss_path;
  292. }
  293. }
  294. }else{//修改头像
  295. //兼容 IOS和Android 参数名称不同
  296. if($normal_head_path==''){
  297. $head_image=$oss_path;
  298. }else if($normal_head_path!=''){
  299. $head_image=$normal_head_path;
  300. }
  301. $user_data['sex'] = $GLOBALS['user_info']['sex'];
  302. }
  303. $user_data['head_image']=$head_image;
  304. $res = update_mobile_user($user_data,'UPDATE');
  305. if($res['status'] == 1)
  306. {
  307. //更新session
  308. $user_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where id =".$user_id);
  309. es_session::set("user_info", $user_info);
  310. $user =array();
  311. $user['user_id'] =$user_info['id'];
  312. $user['nick_name'] =$user_info['nick_name'];
  313. $user['mobile'] =$user_info['mobile'];
  314. $user['head_image'] =get_spec_image($user_info['head_image']);
  315. $root['error']='修改成功';
  316. $root['status']=1;
  317. $root['user_id']=$res['data'];
  318. $root['user_info']=$user;
  319. ajax_return($root);
  320. }
  321. else
  322. {
  323. $root['error']=$res['error'];
  324. ajax_return($root);
  325. }
  326. }
  327. }
  328. /**
  329. * 退出功能
  330. */
  331. public function loginout(){
  332. $ajax = intval($_REQUEST['ajax']);
  333. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  334. $result = loginout_user();
  335. es_session::delete("user_info");
  336. $root['status'] = 1;
  337. $root['error'] = "登出成功";
  338. ajax_return($root);
  339. }
  340. /**
  341. * 检查手机验证码
  342. */
  343. function check_verify_code()
  344. {
  345. $settings_mobile_code=strim($_REQUEST['code']);
  346. $mobile=strim($_REQUEST['mobile']);
  347. if($GLOBALS['db']->getOne("SELECT count(*) FROM ".DB_PREFIX."mobile_verify_code WHERE mobile=".$mobile." AND verify_code='".$settings_mobile_code."'")==0){
  348. $data['status'] = 0;
  349. $data['info'] = "手机验证码错误";
  350. ajax_return($data);
  351. }else{
  352. $data['status'] = 1;
  353. $data['info'] = "验证码正确";
  354. ajax_return($data);
  355. }
  356. }
  357. /**
  358. * 是否开启图片验证
  359. */
  360. function is_user_verify(){
  361. $root =array('status'=>0,'error'=>'','verify_url'=>'');
  362. if(app_conf('USER_VERIFY_STATUS')){
  363. $root['status']=1;
  364. $root['verify_url']=get_domain().APP_ROOT.'/verify.php?name=login_verify';
  365. }
  366. if(OPEN_YPSMS==1){
  367. $root['status']=1;
  368. $area=array();
  369. $area[]=array('id'=>1,'name'=>'中国大陆');
  370. /*$area[]=array('id'=>2,'name'=>'港澳台');
  371. $area[]=array('id'=>3,'name'=>'日本');
  372. $area[]=array('id'=>4,'name'=>'韩国');*/
  373. $area[]=array('id'=>5,'name'=>'其他国家(请在号码前加上区号)');
  374. $root['area']=$area;
  375. }else{
  376. $root['area']=array();
  377. }
  378. ajax_return($root);
  379. }
  380. /**
  381. * 发送手机验证码
  382. */
  383. function send_mobile_verify(){
  384. $mobile = addslashes(htmlspecialchars(trim($_REQUEST['mobile'])));
  385. $type = intval($_REQUEST['type']);
  386. /*if(!isMobile()){
  387. $root['status'] = 0;
  388. $root['error'] = "非客户端访问";
  389. ajax_return($root);
  390. }*/
  391. if(app_conf("SMS_ON")==0)
  392. {
  393. $root['status'] = 0;
  394. $root['error'] = "短信未开启";
  395. if($type){
  396. api_ajax_return($root);
  397. }else{
  398. ajax_return($root);
  399. }
  400. }
  401. if($mobile == '')
  402. {
  403. $root['status'] = 0;
  404. $root['error'] = "请输入你的手机号";
  405. if($type){
  406. api_ajax_return($root);
  407. }else{
  408. ajax_return($root);
  409. }
  410. }
  411. if(OPEN_YPSMS==1){
  412. }else if(!check_mobile($mobile))
  413. {
  414. $root['status'] = 0;
  415. $root['error'] = "请填写正确的手机号码";
  416. if($type){
  417. api_ajax_return($root);
  418. }else{
  419. ajax_return($root);
  420. }
  421. }
  422. //添加:手机发送 防护
  423. $root = check_sms_send($mobile);
  424. if ($root['status'] == 0){
  425. $root['time'] = 0;
  426. if($type){
  427. api_ajax_return($root);
  428. }else{
  429. ajax_return($root);
  430. }
  431. }
  432. //微信绑定判断手机是否被使用
  433. //获取登录方式
  434. if($GLOBALS['user_info'] && intval($_REQUEST['wx_binding'])){
  435. if($GLOBALS['user_info']['login_type']==''){
  436. $login_type_sql = "select login_type from ".DB_PREFIX."user where id = '".$GLOBALS['user_info']['id']."'";
  437. $login_type = $GLOBALS['db']->getOne($login_type_sql);
  438. }else{
  439. $login_type = $GLOBALS['user_info']['login_type'];
  440. }
  441. if($GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."user where mobile = '".$mobile."' and login_type = ".$login_type) > 0){
  442. $root['status'] = 0;
  443. $root['error'] = "该手机号已经被使用过";
  444. if($type){
  445. api_ajax_return($root);
  446. }else{
  447. ajax_return($root);
  448. }
  449. }
  450. }
  451. if($GLOBALS['db']->getOne("select id from ".DB_PREFIX."user where mobile = '".$mobile."' and is_effect =0")){
  452. $root['status'] = 0;
  453. $root['error'] = "账号已被禁用";
  454. if($type){
  455. api_ajax_return($root);
  456. }else{
  457. ajax_return($root);
  458. }
  459. }
  460. $result = array("status"=>1,"info"=>'');
  461. //图片验证码
  462. if(app_conf("USER_VERIFY_STATUS")==1&&!$GLOBALS['user_info']){
  463. $image_code = strim($_REQUEST['image_code']);
  464. if($image_code){
  465. $sql = "select id from ".DB_PREFIX."image_verify_code where verify_code = '".md5($image_code)."'";
  466. $verify_id = $GLOBALS['db']->getOne($sql);
  467. if(intval($verify_id)==0){
  468. ajax_return(array("status"=>0,"error"=>"图片验证码错误!"));
  469. }else{
  470. $GLOBALS['db']->query("DELETE FROM ".DB_PREFIX."image_verify_code WHERE verify_code = '".md5($image_code)."'");
  471. }
  472. }else{
  473. if($type){
  474. api_ajax_return(array("status"=>0,"error"=>"图片验证码不能为空!"));
  475. }else{
  476. ajax_return(array("status"=>0,"error"=>"图片验证码不能为空!"));
  477. }
  478. }
  479. }
  480. //发送时间
  481. if($GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."mobile_verify_code where mobile = '".$mobile."' and client_ip='".get_client_ip()."' and create_time>=".(get_gmtime()-60)." ORDER BY id DESC") > 0)
  482. {
  483. $root['status'] = 0;
  484. $root['error'] = "发送速度太快了";
  485. if($type){
  486. api_ajax_return($root);
  487. }else{
  488. ajax_return($root);
  489. }
  490. }
  491. $n_time=get_gmtime()-300;
  492. //删除超过5分钟的验证码
  493. $GLOBALS['db']->query("DELETE FROM ".DB_PREFIX."mobile_verify_code WHERE create_time <=".$n_time);
  494. //开始生成手机验证
  495. if($mobile == '13888888888'||$mobile=='13999999999') {
  496. $root['status'] = 1;
  497. $root['time'] = 60;
  498. $root['error'] = "发送成功";
  499. }else{
  500. $code = rand(1000,9999);
  501. $GLOBALS['db']->autoExecute(DB_PREFIX."mobile_verify_code",array("verify_code"=>$code,"mobile"=>$mobile,"create_time"=>get_gmtime(),"client_ip"=>get_client_ip()),"INSERT");
  502. $_REQUEST['code']=$code;
  503. send_verify_sms($mobile,$code);
  504. $status = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal_msg_list where dest = '".$mobile."' and code='".$code."'");
  505. if($status['is_success']){
  506. $root['status'] = 1;
  507. $root['time'] = 60;
  508. $root['error'] = $status['title'].$status['result'];
  509. }else{
  510. $root['status'] = 0;
  511. $root['time'] = 0;
  512. $root['error'] = "短信验证码发送失败";
  513. }
  514. }
  515. if($type){
  516. api_ajax_return($root);
  517. }else{
  518. ajax_return($root);
  519. }
  520. }
  521. /**
  522. * 微信登录(获取 openid && access_token)
  523. */
  524. public function wx_login(){
  525. $root = array('status'=>1,'error'=>'');
  526. fanwe_require(APP_ROOT_PATH."system/utils/weixin.php");
  527. $m_config = load_auto_cache("m_config");//初始化手机端配置
  528. $ajax= 1;
  529. //登录限制(相同IP都限制)
  530. if($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  531. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  532. }
  533. if($m_config['wx_appid']==''||$m_config['wx_secrit']==''){
  534. $root['status'] = 0;
  535. $root['error'] = "wx_appid或wx_secrit不存在";
  536. ajax_return($root);
  537. }else{
  538. $wx_appid = strim($m_config['wx_appid']);
  539. $wx_secrit = strim($m_config['wx_secrit']);
  540. }
  541. $jump_url = SITE_DOMAIN.url_wap("login#wx_login");
  542. $weixin=new weixin($wx_appid,$wx_secrit,$jump_url);
  543. if(($_REQUEST['openid']!=""&&$_REQUEST['access_token']!="")||$_REQUEST['code']!=""){
  544. if($_REQUEST['openid']!=""&&$_REQUEST['access_token']!=""){
  545. $wx_info=$weixin->sns_get_userinfo($_REQUEST['openid'],$_REQUEST['access_token']);
  546. $key = "wx_login_{$_REQUEST['openid']}_{$_REQUEST['access_token']}";
  547. }else if($_REQUEST['code']!=""){
  548. $wx_info=$weixin->scope_get_userinfo($_REQUEST['code']);
  549. $key = "wx_login_{$_REQUEST['code']}";
  550. }else{
  551. $root['status'] = 0;
  552. $root['error'] = "服务端获取微信参数失(openid or code).";
  553. }
  554. if($wx_info&&intval($root['status'])!=0){
  555. if(intval($wx_info['errcode'])!=0){
  556. $root['status'] = 0;
  557. $root['error'] =$wx_info['errcode'].$wx_info['errmsg'];
  558. ajax_return($root);
  559. }
  560. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  561. $root = wxxMakeUser($wx_info);
  562. if (empty($root['user_id'])) {
  563. $GLOBALS['cache']->set($key, $wx_info, 300, true);
  564. ajax_return($root);
  565. }
  566. $root['login_send_score'] = intval($m_config['login_send_score']);
  567. //登录日志
  568. $log_date = array();
  569. if (is_array($_REQUEST)) $log_date['request'] = json_encode($_REQUEST,true);
  570. //'0:微信;1:QQ;2:手机;3:微博',
  571. $log_date['login_type'] = 0 ;
  572. $log_date['user_id'] = $root['user_id'];
  573. if(function_exists('log_login')){
  574. log_login($log_date);
  575. }
  576. }
  577. }else{
  578. $root['status'] = 0;
  579. $root['error'] = "无法获取APP端微信参数(openid or code)!";
  580. }
  581. ajax_return($root);
  582. }
  583. /**
  584. * QQ登录 (获取 openid && access_token)
  585. */
  586. function qq_login(){
  587. $m_config = load_auto_cache("m_config");//初始化手机端配置
  588. //获取QQ openid
  589. $openid = trim($_REQUEST['openid']);
  590. $access_token = trim($_REQUEST['access_token']);
  591. if($openid==''){
  592. $root['status'] = 0;
  593. $root['error'] = "openid不存在";
  594. ajax_return($root);
  595. }
  596. if($access_token==''){
  597. $root['status'] = 0;
  598. $root['error'] = "access_token不存在";
  599. ajax_return($root);
  600. }
  601. //登录限制(相同IP都限制)
  602. if($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  603. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  604. }
  605. // 应用基本信息
  606. $dev_type = strim($_REQUEST['sdk_type']);
  607. if(isios()||$dev_type=='ios'){
  608. $appid =$m_config['ios_qq_app_id'];
  609. }else{
  610. $appid =$m_config['android_qq_app_id'];
  611. }
  612. if($appid==''){
  613. $root['status'] = 0;
  614. $root['error'] = "qq_app_id不存在0".$appid;
  615. ajax_return($root);
  616. }
  617. fanwe_require(APP_ROOT_PATH."system/QQloginApi/qqConnectAPI.php");
  618. $qc = new QC($access_token,$openid,$appid);
  619. $ret = $qc->get_user_info();
  620. $ret['openid'] = $openid;
  621. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  622. if($ret['ret']==0){
  623. $root = qqMakeUser($ret);
  624. if (empty($root['user_id'])) {
  625. $key = "qq_login_{$_REQUEST['openid']}_{$_REQUEST['access_token']}_{$_REQUEST['sdk_type']}";
  626. $GLOBALS['cache']->set($key, $ret, 300, true);
  627. ajax_return($root);
  628. }
  629. $root['login_send_score']= intval($m_config['login_send_score']);
  630. //登录日志
  631. $log_date = array();
  632. if (is_array($_REQUEST)) $log_date['request'] = json_encode($_REQUEST,true);
  633. //'0:微信;1:QQ;2:手机;3:微博',
  634. $log_date['login_type'] = 1 ;
  635. $log_date['user_id'] = $root['user_id'];
  636. if(function_exists('log_login')){
  637. log_login($log_date);
  638. }
  639. }else{
  640. log_err_file(array(__FILE__,__LINE__,__METHOD__,$ret));
  641. $root['status'] = 0;
  642. $root['error'] = "ret".$ret['ret'].",msg:".$ret['msg'];
  643. }
  644. ajax_return($root);
  645. }
  646. /**
  647. * 新浪微博登录
  648. */
  649. function sina_login(){
  650. $m_config = load_auto_cache("m_config");//初始化手机端配置
  651. $access_token = trim($_REQUEST['access_token']);
  652. $sina_id = trim($_REQUEST['sina_id']);
  653. if($access_token==''){
  654. $root['status'] = 0;
  655. $root['error'] = "access_token不存在";
  656. ajax_return($root);
  657. }
  658. if($sina_id==''){
  659. $root['status'] = 0;
  660. $root['error'] = "sina_id不存在";
  661. ajax_return($root);
  662. }
  663. //登录限制(相同IP都限制)
  664. if($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  665. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  666. }
  667. fanwe_require(APP_ROOT_PATH."system/WBloginApi/saetv2.ex.class.php");
  668. if($m_config['sina_app_key']==''||$m_config['sina_app_secret']==''){
  669. $root['status'] = 0;
  670. $root['error'] = "sina_app_key或sina_app_secret不存在";
  671. ajax_return($root);
  672. }
  673. $c = new SaeTClientV2( $m_config['sina_app_key'] , $m_config['sina_app_secret'] , $access_token);
  674. $ms = $c->home_timeline(); // done
  675. $uid_get = $c->get_uid();
  676. $uid = $uid_get['uid'];
  677. $user_message = $c->show_user_by_id($uid);//根据ID获取用户等基本信息
  678. $user_message['sina_id'] =$sina_id;
  679. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  680. if(intval($user_message['error_code'])){
  681. log_err_file(array(__FILE__,__LINE__,__METHOD__,$user_message['error']));
  682. $root['status'] = 0;
  683. $root['error'] = "error_code".$user_message['error_code'].",error:".$user_message['error'];
  684. }else{
  685. $root = sinaMakeUser($user_message);
  686. if (empty($root['user_id'])) {
  687. $key = "sina_login_{$_REQUEST['sina_id']}_{$_REQUEST['access_token']}";
  688. $GLOBALS['cache']->set($key, $user_message, 300, true);
  689. ajax_return($root);
  690. }
  691. $root['login_send_score']= intval($m_config['login_send_score']);
  692. //登录日志
  693. $log_date = array();
  694. if (is_array($_REQUEST)) $log_date['request'] = json_encode($_REQUEST,true);
  695. //'0:微信;1:QQ;2:手机;3:微博',
  696. $log_date['login_type'] = 3 ;
  697. $log_date['user_id'] = $root['user_id'];
  698. if(function_exists('log_login')){
  699. log_login($log_date);
  700. }
  701. }
  702. ajax_return($root);
  703. }
  704. /**
  705. * 国家电话地区表
  706. */
  707. function mobile_code(){
  708. $root =array();
  709. $mobile_code = load_auto_cache("mobile_code");
  710. $root=$mobile_code;
  711. $root['status'] = 1;
  712. $root['error'] = "";
  713. ajax_return($root);
  714. }
  715. /**
  716. * 游客登录
  717. */
  718. public function visitors_login()
  719. {
  720. $root = array('status' =>0,'error'=>'');
  721. $m_config = load_auto_cache("m_config");//初始化手机端配置
  722. //登录限制(相同IP都限制)
  723. if($GLOBALS['db']->getOne("SELECT login_ip FROM ".DB_PREFIX."user WHERE login_ip = '".get_client_ip()."' and is_effect !=1")){
  724. ajax_return(array("status"=>0,"error"=>'当前IP已被封停'));
  725. }
  726. if(intval(VISITORS)&&intval($m_config['open_visitors_login'])){
  727. $um_reg_id = strim($_REQUEST['um_reg_id']);
  728. //客服端手机类型dev_type=android;dev_type=ios
  729. $dev_type = strim($_REQUEST['sdk_type']);
  730. //验证um_reg_id
  731. $um_reg_id_info= $this->verify_um_reg_id($um_reg_id,$dev_type);
  732. $is_agree = 1;//ios 无法验证推送 暂时跳过验证
  733. if($um_reg_id_info['status']){
  734. $is_agree = 1;
  735. }
  736. if($um_reg_id!=''&&$is_agree){
  737. $root = $this->login_viditors($um_reg_id);
  738. }else{
  739. $root['error'] ='请求参数错误!其重新登录!'.$um_reg_id."--".$is_agree;
  740. }
  741. }else{
  742. $root['error'] ='功能未开放,请联系管理员。';
  743. }
  744. ajax_return($root);
  745. }
  746. /**
  747. * 游客登录-登录处理
  748. * @param $um_reg_id
  749. * @return array|mixed
  750. */
  751. private function login_viditors($um_reg_id){
  752. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  753. $result = array('status'=>0,'info'=>'','is_lack'=>0);
  754. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
  755. $user_redis = new UserRedisService();
  756. $sql = "select * from ".DB_PREFIX."user where apns_code = '".$um_reg_id."' and login_type = 4 order by id desc";
  757. $user = $GLOBALS['db']->getRow($sql);
  758. $user_id = intval($user['id']);
  759. //如果不存在,注册账号
  760. if(!$user)
  761. {
  762. $result = $this->reg_visitors($um_reg_id);
  763. }else{
  764. $result['user'] = $user;
  765. //判断账号有效
  766. if($user['is_effect'] != 1){
  767. $result['info'] = "帐户已被禁用,请联系管理员";
  768. }
  769. else
  770. {
  771. $result['status'] =1;
  772. //更新等级
  773. user_leverl_syn($user);
  774. $login_time = get_gmtime();
  775. $user['login_time'] = $login_time;
  776. //设置cookie
  777. es_cookie::set("client_ip",CLIENT_IP,3600*24*30);
  778. es_cookie::set("nick_name",$user['nick_name'],3600*24*30);
  779. es_cookie::set("user_id",$user['id'],3600*24*30);
  780. es_cookie::set("user_pwd",md5($user['user_pwd']."_EASE_COOKIE"),3600*24*30);
  781. es_cookie::set("PHPSESSID2",es_session::id(),3600*24*30);
  782. //设置session
  783. es_session::set("user_info",$user);
  784. $GLOBALS['user_info'] = $user;
  785. //修改登录时间之前,获取上一次登录时间,每日首次登录赠送积分
  786. $login_root = login_prompt($user['id']);
  787. $result['first_login'] = $login_root['first_login'];
  788. $result['new_level'] = $login_root['new_level'];
  789. $GLOBALS['db']->query("update ".DB_PREFIX."user set login_ip = '".get_client_ip()."',login_time= '".to_date($login_time)."' where id =".$user['id']);
  790. //更新redis
  791. $user_redis->update_db($user['id'],array("login_time"=>to_date($login_time),"login_ip"=>get_client_ip()));
  792. //登录成功 同步信息
  793. $user_im = array();
  794. $user_im['id']=$user['id'];
  795. $user_im['nick_name']=$user['nick_name'];
  796. $user_im['head_image']=$user['head_image'];
  797. if($user_im['nick_name']==''){
  798. $user_im['nick_name']= '游客'.$user['id'];
  799. }
  800. if($user_im['head_image']==''){
  801. $m_config = load_auto_cache("m_config");//初始化手机端配置
  802. $system_head_image = $m_config['app_logo'];
  803. if($system_head_image==''){
  804. $system_head_image = './public/attachment/test/noavatar_10.JPG';
  805. }
  806. $user_im['head_image'] = $system_head_image;
  807. }
  808. accountimport($user_im);
  809. }
  810. if($user['nick_name']==''||$user['head_image']==''){
  811. $result['is_lack'] = 1;
  812. }
  813. set_xy_point($user['id']);
  814. $result['user_info']['user_id'] =$user['id'];
  815. $result['user_info']['nick_name'] =$user['nick_name']?$user['nick_name']:'';
  816. $result['user_info']['mobile'] =$user['mobile']?$user['mobile']:'';
  817. $result['user_info']['head_image'] =get_spec_image($user['head_image']);
  818. }
  819. return $result;
  820. }
  821. /**
  822. * 游客登录-注册处理
  823. * @param $um_reg_id
  824. * @return mixed
  825. */
  826. private function reg_visitors($um_reg_id){
  827. $image = array(
  828. './public/attachment/test/noavatar_0.JPG',
  829. './public/attachment/test/noavatar_1.JPG',
  830. './public/attachment/test/noavatar_2.JPG',
  831. './public/attachment/test/noavatar_3.JPG',
  832. './public/attachment/test/noavatar_4.JPG',
  833. './public/attachment/test/noavatar_5.JPG',
  834. './public/attachment/test/noavatar_6.JPG',
  835. './public/attachment/test/noavatar_7.JPG',
  836. './public/attachment/test/noavatar_8.JPG',
  837. );
  838. $random = mt_rand(0,8);
  839. $head_image =$image[$random];
  840. $nick_name='游客';
  841. if($random%2==0)
  842. $sex = 1;
  843. else
  844. $sex = 2;
  845. $data = array(
  846. 'head_image'=>$head_image,
  847. 'nick_name'=>$nick_name,
  848. 'sex'=>$sex,
  849. 'apns_code'=>$um_reg_id,
  850. 'login_type'=>4,
  851. );
  852. if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!='NONE')
  853. {
  854. syn_to_remote_image_server($data['head_image'],false);
  855. }
  856. fanwe_require(APP_ROOT_PATH."system/libs/user.php");
  857. $return = save_user($data);
  858. $user_data = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where id =".$return['data']);
  859. if($user_data['id']!=''){
  860. //更新昵称
  861. $user_nick_name = $nick_name = $user_data['nick_name'] = $user_data['nick_name'].":". $user_data['id'];
  862. $GLOBALS['db']->query("update ".DB_PREFIX."user set login_ip = '".get_client_ip()."', nick_name = '".$user_nick_name."' where id =".$user_data['id']);
  863. $root['status'] = 1;
  864. $root['error'] = $nick_name.'注册登录成功';
  865. $root['user'] = $user_data;
  866. es_session::set("user_info",$user_data);
  867. $GLOBALS['user_info'] = $user_data;
  868. es_cookie::set("client_ip",CLIENT_IP,3600*24*30);
  869. es_cookie::set("nick_name",$user_data['nick_name'],3600*24*30);
  870. es_cookie::set("user_id",$user_data['id'],3600*24*30);
  871. es_cookie::set("user_pwd",md5($user_data['user_pwd']."_EASE_COOKIE"),3600*24*30);
  872. es_cookie::set("is_agree",$user_data['is_agree'],3600*24*30);
  873. es_cookie::set("PHPSESSID2",es_session::id(),3600*24*30);
  874. $root['user_info']['user_id'] = $root['user_id'] = $user_data['id'];
  875. $root['user_info']['nick_name'] = $root['nick_name'] = $user_data['nick_name'];
  876. $root['is_agree'] = intval($user_data['is_agree']);//是否同意直播协议 0 表示不同意 1表示同意
  877. $root['user_info']['head_image'] = $root['head_image'] = get_abs_img_root($user_data['head_image']);//是否同意直播协议 0 表示不同意 1表示同意
  878. if($user_data['synchronize'] == 0){
  879. //同步IM
  880. accountimport($user_data);
  881. }
  882. }else{
  883. $root['error'] =$nick_name.'注册登录成功';
  884. }
  885. return $root;
  886. }
  887. /**
  888. * 游客登录-推送友盟信息
  889. * @param $um_reg_id
  890. * @param $dev_type
  891. * @return array
  892. */
  893. private function verify_um_reg_id($um_reg_id,$dev_type){
  894. $result = array('status'=>0,'error'=>'',);
  895. fanwe_require(APP_ROOT_PATH.'system/schedule/android_list_schedule.php');
  896. fanwe_require(APP_ROOT_PATH.'system/schedule/android_unicast_schedule.php');
  897. fanwe_require(APP_ROOT_PATH.'system/schedule/ios_list_schedule.php');
  898. fanwe_require(APP_ROOT_PATH.'system/schedule/ios_unicast_schedule.php');
  899. if(strtolower($dev_type)=='ios'){
  900. $apns_ios_code_list[0] = $um_reg_id;
  901. }else{
  902. $apns_app_code_list[0] = $um_reg_id;
  903. }
  904. $content = '游客账号注册!';
  905. //安卓推送信息
  906. if(count($apns_app_code_list)>0){
  907. $AndroidList = new android_unicast_schedule();
  908. $android_dest = implode(",",$apns_app_code_list);
  909. $data = array(
  910. 'dest' =>$android_dest,
  911. 'content' =>$content,
  912. 'type'=>0,
  913. );
  914. $return = $AndroidList->exec($data);
  915. }
  916. //ios 推送信息
  917. if(count($apns_ios_code_list)>0){
  918. $IosList = new ios_list_schedule();
  919. $ios_dest = implode(",",$apns_ios_code_list);
  920. $ios_data = array(
  921. 'dest' =>$ios_dest,
  922. 'content' =>$content,
  923. 'type'=>0,
  924. );
  925. $return = $IosList->exec($ios_data);
  926. }
  927. if($return['res']['ret']=='SUCCESS'){
  928. $result['status'] = 1;
  929. }else{
  930. log_err_file(array(__FILE__,__LINE__,__METHOD__,$return));
  931. }
  932. return $result;
  933. }
  934. }
  935. ?>