Login.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | [ WE CAN DO IT MORE SIMPLE ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2018-2020 rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: TABLE ME
  8. // +----------------------------------------------------------------------
  9. // | Date: 2020-08-25 17:23
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\api\controller;
  13. use app\BaseController;
  14. use app\model\api\User as UserModel;
  15. use app\model\api\UserLogin;
  16. use app\Request;
  17. use library\lib\weixina;
  18. use library\services\JsonNull;
  19. use library\services\UtilService;
  20. use think\Cache;
  21. use think\Image;
  22. class Login extends BaseController
  23. {
  24. /**
  25. * 微信登录
  26. * @param Request $request
  27. */
  28. public function weixinLogin(Request $request){
  29. [$code,$nickname,$avatar,$device_id,$model,$platform,$system,$gender,$parent_uid] = UtilService::getMore([
  30. ['code', '', 'empty', 'code参数错误'],
  31. ['nickname','微信用户',],
  32. ['avatar','',],
  33. ['device_id',''],
  34. ['model',''],
  35. ['platform',''],
  36. ['system',''],
  37. ['gender','0'],
  38. ['parent_uid','0'],
  39. ], $request, true);
  40. //用户登录
  41. if(empty($avatar)){
  42. //默认通向
  43. $avatar = "";
  44. }
  45. if(!in_array((string)$gender, array("0","1","2"))){
  46. $gender = 0;
  47. }
  48. $regip = get_client_ip();
  49. if(empty($regip)){
  50. $regip = $request->ip();
  51. }
  52. $weixinA = new weixina();
  53. $data=$weixinA->auth_code2Session($code);//新版
  54. if(empty($data) || empty($data['openid'])) {
  55. return app('json')->fail("微信授权登录失败,关闭页面重新授权".$weixinA->error);
  56. }
  57. $member = (new UserModel)->where("openid",$data["openid"])->find();
  58. if(empty($member)){
  59. $p_id = 0;
  60. if(!empty($parent_uid)){
  61. $pcount = (new UserModel)->where("uid",$parent_uid)->count();
  62. if($pcount>0){
  63. $p_id = (int)$parent_uid;
  64. }
  65. }
  66. //用户注册
  67. $uid = (new UserModel)->insertGetId(array(
  68. "openid" =>$data["openid"],
  69. "unionid" =>empty($data["unionid"])?"":$data["unionid"],
  70. "nickname" =>$nickname,
  71. "avatar" =>$avatar,
  72. "sex" =>(int)$gender,
  73. "regtime" =>time(),
  74. "regip" =>$regip,
  75. "parent_uid"=>$p_id,
  76. ));
  77. if(empty($uid)){
  78. return app('json')->fail("网络繁忙,请稍后尝试");
  79. }
  80. //生成MD5
  81. $token = base64_encode(md5($uid ."openid" .$data["openid"] . time()));
  82. (new UserModel)->where('uid', $uid)->save(['lasttime'=>time(),'token'=>$token]);
  83. //生成登录日志
  84. (new UserLogin)->insert([
  85. 'uid' => $uid,
  86. 'ip' => $regip,
  87. 'time' => time(),
  88. 'device_id' => $device_id,
  89. 'from_plat' => $platform,
  90. 'device_type' => $system,
  91. 'version' => $model,
  92. ]);
  93. $result = [];
  94. $result['nickname'] = $nickname;
  95. $result['avatar'] = $avatar;
  96. $result['token'] = $token;
  97. return app('json')->success($result);
  98. }
  99. if ($member['status'] == -1) {
  100. return app('json')->fail("账号已被禁用");
  101. }
  102. //生成MD5
  103. $token = base64_encode(md5($member['uid'] ."openid" . $member['openid'] . time()));
  104. (new UserModel)->where('uid', $member['uid'])->save([
  105. 'lasttime' => time(),
  106. 'token' => $token,
  107. ]);
  108. //生成登录日志
  109. (new UserLogin)->insert([
  110. 'uid' => $member['uid'],
  111. 'ip' => $regip,
  112. 'time' => time(),
  113. 'device_id' => $device_id,
  114. 'from_plat' => $platform,
  115. 'device_type' => $system,
  116. 'version' => $model,
  117. ]);
  118. $result = [];
  119. $result['nickname'] = $member['nickname'];
  120. $result['avatar'] = $member['avatar'];
  121. $result['token'] = $token;
  122. return app('json')->success($result);
  123. }
  124. }