qingjian/app/model/User.php

69 lines
2.6 KiB
PHP
Raw Permalink Normal View History

2021-08-06 18:50:55 +08:00
<?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;
}
}