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