o(user_id)
            name = user_info.get("name", "")
            return user_id, name
        finally:
            try:
                await wecom.close()
            except Exception:
                pass

    # ------------------------------------------------------------------
    # confirm: 当前已登录用户确认授权,创建 token
    # ------------------------------------------------------------------
    async def process_confirm(
        self,
        ticket: str,
        current_user_id: str,
        current_user_name: str,
        current_roles: list,
        otp_code: Optional[str] = None,
    ) -> Dict[str, Any]:
        """处理确认授权: 把扫码用户身份变成可登录 Token。

        流程:
          1. 校验 ticket 存在
          2. 校验 scan 结果存在(否则没人扫过这个码)
          3. TODO (Phase 2.1): admin 角色校验 otp_code
          4. 创建 TokenService token(roles 来自扫码用户,不是 current_user)
          5. 写 Redis qrcode:confirm:{ticket} (TTL 60s) 供前端 poll 拿到

        Args:
            ticket: 扫码登录票据
            current_user_id: 当前已登录用户的 ID(用于 admin 校验)
            current_user_name: 当前已登录用户的姓名
            current_roles: 当前已登录用户的角色
            otp_code: OTP 动态码(admin 场景下可选)

        Returns:
            Dict: 包含 token / employee_id / name / roles / require_otp

        Raises:
            ValueError: 票据过期 / 未扫码
        """
        # 1. 校验 ticket
        if not await self.redis.get(self._ticket_key(ticket)):
            raise ValueError("扫码票据已过期或不存在")

        # 2. 校验 scan 结果
        scan_data_raw = await self.redis.get(self._scan_key(ticket))
        if not scan_data_raw:
            raise ValueError("该二维码尚未被扫码或扫码已过期")

        # 解析扫码用户身份
        try:
            scan_data = json.loads(scan_data_raw)
        except json.JSONDecodeError:
            logger.error(f"扫码数据解析失败: ticket={ticket[:8]}...")
            raise ValueError("扫码数据异常")

        employee_id = scan_data.get("employee_id", "")
        name = scan_data.get("name", "")
        if not employee_id:
            raise ValueError("扫码数据缺少 employee_id")

        # 3. TODO Phase 2.1: admin 场景下的 OTP 校验
        # 当前 Phase 1.1 不强制,otp_code 字段仅作为预留
        require_otp = False
        if otp_code is not None and "admin" in current_roles:
            # 预留接口,真实校验逻辑放在 Phase 2.1 实现
            # 此处仅标记 require_otp=True 提示前端
            require_otp = True
            logger.info(
                f"扫码确认收到 OTP(预留字段,Phase 2.1 校验): "
                f"current_user={current_user_id}, otp_code={otp_code[:2]}..."
            