Login.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. "parent_time"=>$p_id <= 0 ? 0 : time(),
  77. ));
  78. if(empty($uid)){
  79. return app('json')->fail("网络繁忙,请稍后尝试");
  80. }
  81. //生成MD5
  82. $token = base64_encode(md5($uid ."openid" .$data["openid"] . time()));
  83. (new UserModel)->where('uid', $uid)->save(['lasttime'=>time(),'token'=>$token]);
  84. //生成登录日志
  85. (new UserLogin)->insert([
  86. 'uid' => $uid,
  87. 'ip' => $regip,
  88. 'time' => time(),
  89. 'device_id' => $device_id,
  90. 'from_plat' => $platform,
  91. 'device_type' => $system,
  92. 'version' => $model,
  93. ]);
  94. $result = [];
  95. $result['nickname'] = $nickname;
  96. $result['avatar'] = $avatar;
  97. $result['token'] = $token;
  98. return app('json')->success($result);
  99. }
  100. if ($member['status'] == -1) {
  101. return app('json')->fail("账号已被禁用");
  102. }
  103. //生成MD5
  104. $token = base64_encode(md5($member['uid'] ."openid" . $member['openid'] . time()));
  105. (new UserModel)->where('uid', $member['uid'])->save([
  106. 'lasttime' => time(),
  107. 'token' => $token,
  108. ]);
  109. //生成登录日志
  110. (new UserLogin)->insert([
  111. 'uid' => $member['uid'],
  112. 'ip' => $regip,
  113. 'time' => time(),
  114. 'device_id' => $device_id,
  115. 'from_plat' => $platform,
  116. 'device_type' => $system,
  117. 'version' => $model,
  118. ]);
  119. $result = [];
  120. $result['nickname'] = $member['nickname'];
  121. $result['avatar'] = $member['avatar'];
  122. $result['token'] = $token;
  123. return app('json')->success($result);
  124. }
  125. }