Files
2026-10-27 16:19:46 +08:00

52 lines
1.5 KiB
PHP

<?php
namespace app\common\service;
use app\common\model\Accounts;
use app\common\model\User;
use app\common\traits\ServiceTrait;
class UserService
{
use ServiceTrait;
/** @var User */
public static $Model = User::class;
const GENDER_MAP = ['未知', '男', '女'];
const ROLE_DEV = 'dev'; //开发者
/**
* @throws
*/
public static function wxLogin($code)
{
// 微信登录(EasyWeChat 6.x: code2session)
$result = (new EasyWeChatService())->login($code);
if (empty($result['openid'])) {
throw new \Exception('微信登录失败:' . ($result['errmsg'] ?? '未知错误'));
}
$openid = $result['openid'];
$user = self::$Model::where('openid', $openid)->field('id,username,nickname,avatar,role')->find();
if (!$user) {
// 新用户自动注册
$user = new User;
$user->openid = $openid;
$user->nickname = '微信用户' . mt_rand(10000, 99999);
$user->account = new Accounts();
$res = $user->together('account')->save();
}
$account = Accounts::where('user_id', $user->id ?? 0)->find();
if (!$account) {
$acRes = $user->account()->save([]);
}
// 虚拟支付用户态签名依赖 session_key,只放缓存,不回给前端
if (!empty($result['session_key']) && !empty($user->id)) {
VirtualPayService::saveSessionKey($user->id, $result['session_key']);
}
return $user;
}
}