52 lines
1.5 KiB
PHP
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;
|
|
}
|
|
} |