69 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace app\model; | ||
|  | 
 | ||
|  | use think\Exception; | ||
|  | 
 | ||
|  | class User extends Base | ||
|  | { | ||
|  |     const  TokenCloseTime = 86400; | ||
|  |     //根据用户ID获取用户信息
 | ||
|  |     public static function getByOpenid($openid) | ||
|  |     { | ||
|  |         return self::where('openid', $openid)->findOrEmpty()->toArray(); | ||
|  |     } | ||
|  | 
 | ||
|  |     //更新用户信息 或添加用户信息
 | ||
|  |     public static function userLogin($data) | ||
|  |     { | ||
|  |         if (!empty($data['openid'])) { | ||
|  |             $wechatUser = self::getByOpenid($data['openid']); | ||
|  |             self::startTrans(); | ||
|  |             try { | ||
|  |                 $time = time(); | ||
|  |                 if ($wechatUser) { | ||
|  |                     //更新用户微信信息
 | ||
|  |                     $wechatUserId = $wechatUser['id']; | ||
|  |                     $data["token"] = md5($data["openid"] . $time . randomStr(1, 16)); | ||
|  |                     $data["token_close_time"] = $time + 86400 * 3; | ||
|  |                     $data["created_at"] = date('Y-m-d H:i:s', $time); | ||
|  |                     $data["login_ip"] =request()->ip(); | ||
|  |                     $data["last_login"] = date('Y-m-d H:i:s', $time); | ||
|  |                     self::where(["id" => ["=", $wechatUserId]])->update($data); | ||
|  |                 } else { | ||
|  |                     //新增用户信息
 | ||
|  |                     $data["token"] = md5($data["openid"] . $time . randomStr(1, 16)); | ||
|  |                     $data["token_close_time"] = $time + (86400 * 3); | ||
|  |                     $data["created_at"] = date('Y-m-d H:i:s', $time); | ||
|  |                     $data["login_ip"] = request()->ip(); | ||
|  |                     $data["last_login"] = date('Y-m-d H:i:s', $time); | ||
|  |                     $data["username"] = "";//所属用户
 | ||
|  | 
 | ||
|  |                     self::insertGetId($data); | ||
|  |                 } | ||
|  |                 //提交事务
 | ||
|  |                 self::commit(); | ||
|  |                 return json(["state" => "ok", "message" => "登录成功", "token" => $data["token"]]); | ||
|  |             } catch (Exception $e) { | ||
|  |                 self::rollback(); | ||
|  |                 return json(["state" => "fail", "message" => "登录失败500"]); | ||
|  |             } | ||
|  |         } else { | ||
|  |             return json(["state" => "fail"]); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //验证当前用户登录状态
 | ||
|  |     static function userTokenVerification(string $token, string $openid) | ||
|  |     { | ||
|  |         $user = self::where([["openid", "=", $openid], ["token", "=", $token]])->field("id,token,token_close_time")->findOrEmpty(); | ||
|  |         if ($user->isEmpty()) { | ||
|  |             return []; | ||
|  |         } | ||
|  |         if (!$user["token"] || !($user["token_close_time"]) || $user["token_close_time"] < time()) { | ||
|  |             return []; | ||
|  |         } | ||
|  |         return $user; | ||
|  |     } | ||
|  | } |