utils->errorThrow('缺少 code'); } $credentials = WxMiniService::getInstance()->jscode2session($code); $openId = (string) $credentials['openid']; $now = time(); $user = WxUserModel::where('open_id', $openId)->first(); if (empty($user)) { $userId = WxUserModel::insertGetId([ 'open_id' => $openId, 'session_key' => (string) ($credentials['session_key'] ?? ''), 'avatar' => $params['avatar'] ?? self::DEFAULT_AVATAR, 'nick_name' => $params['nick_name'] ?? '微信用户', 'phone' => '', 'created_at' => $now, ]); if (empty($userId)) { $this->utils->errorThrow('用户创建失败'); } ListModel::insert([ 'list_no' => SerialNoService::getInstance()->generate(SerialNoService::PREFIX_LIST, 'list', 'list_no'), 'user_id' => $userId, 'name' => '默认清单', 'remark' => '系统默认生成的清单', 'created_at' => $now, ]); } else { $userId = (int) $user['id']; WxUserModel::where('id', $userId)->update([ 'session_key' => (string) ($credentials['session_key'] ?? ''), 'updated_at' => $now, ]); } $userInfo = WxUserModel::where('id', $userId)->with('enterprise')->first(); $userInfo = $userInfo ? $userInfo->toArray() : []; unset($userInfo['session_key']); return [ 'token' => WxTokenService::getInstance()->issue((int) $userId, (string) ($credentials['app_code'] ?? '')), 'user_info' => $userInfo, ]; } }