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;
 | |
|     }
 | |
| }
 |