Login.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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] = UtilService::getMore([
  30. ['code', '', 'empty', 'code参数错误'],
  31. ['nickname','微信用户',],
  32. ['avatar','',],
  33. ['device_id',''],
  34. ['model',''],
  35. ['platform',''],
  36. ['system',''],
  37. ['gender','0'],
  38. ], $request, true);
  39. //用户登录
  40. if(empty($avatar)){
  41. //默认通向
  42. $avatar = "";
  43. }
  44. if(!in_array((string)$gender, array("0","1","2"))){
  45. $gender = 0;
  46. }
  47. $regip = get_client_ip();
  48. if(empty($regip)){
  49. $regip = $request->ip();
  50. }
  51. $weixinA = new weixina();
  52. $data=$weixinA->auth_code2Session($code);//新版
  53. if(empty($data) || empty($data['openid'])) {
  54. return app('json')->fail("微信授权登录失败,关闭页面重新授权".$weixinA->error);
  55. }
  56. $member = (new UserModel)->where("openid",$data["openid"])->find();
  57. if(empty($member)){
  58. //用户注册
  59. $uid = (new UserModel)->insertGetId(array(
  60. "openid"=>$data["openid"],
  61. "unionid"=>empty($data["unionid"])?"":$data["unionid"],
  62. "nickname"=>$nickname,
  63. "avatar"=>$avatar,
  64. "sex"=>(int)$gender,
  65. "regtime"=>time(),
  66. "regip"=>$regip,
  67. ));
  68. if(empty($uid)){
  69. return app('json')->fail("网络繁忙,请稍后尝试");
  70. }
  71. //生成MD5
  72. $token = base64_encode(md5($uid ."openid" .$data["openid"] . time()));
  73. (new UserModel)->where('uid', $uid)->save(['lasttime'=>time(),'token'=>$token]);
  74. //生成登录日志
  75. (new UserLogin)->insert([
  76. 'uid' => $uid,
  77. 'ip' => $regip,
  78. 'time' => time(),
  79. 'device_id' => $device_id,
  80. 'from_plat' => $platform,
  81. 'device_type' => $system,
  82. 'version' => $model,
  83. ]);
  84. $result = [];
  85. $result['nickname'] = $nickname;
  86. $result['avatar'] = $avatar;
  87. $result['token'] = $token;
  88. return app('json')->success($result);
  89. }
  90. if ($member['status'] == -1) {
  91. return app('json')->fail("账号已被禁用");
  92. }
  93. //生成MD5
  94. $token = base64_encode(md5($member['uid'] ."openid" . $member['openid'] . time()));
  95. (new UserModel)->where('uid', $member['uid'])->save([
  96. 'lasttime' => time(),
  97. 'token' => $token,
  98. ]);
  99. //生成登录日志
  100. (new UserLogin)->insert([
  101. 'uid' => $member['uid'],
  102. 'ip' => $regip,
  103. 'time' => time(),
  104. 'device_id' => $device_id,
  105. 'from_plat' => $platform,
  106. 'device_type' => $system,
  107. 'version' => $model,
  108. ]);
  109. $result = [];
  110. $result['nickname'] = $member['nickname'];
  111. $result['avatar'] = $member['avatar'];
  112. $result['token'] = $token;
  113. return app('json')->success($result);
  114. }
  115. }