]}..., "
                f"employee_id={employee_id}, name={name}"
            )
            return {
                "success": True,
                "message": "扫码登录成功",
                "employee_id": employee_id,
                "name": name,
            }

        # 兼容旧流程:auto_confirm=False 时仍走 confirm 端点
        logger.info(
            f"扫码成功(待用户确认): ticket={ticket[:8]}..., employee_id={employee_id}, name={name}"
        )
        return {
            "success": True,
            "message": "扫码成功,等待用户确认",
            "employee_id": employee_id,
            "name": name,
        }

    def _dev_extract_user(self, code: str) -> tuple[str, str]:
        """dev 模式专用: 从 code 字符串提取 userid。

        约定 code 格式:
          - "dev:dev-user-001" → ("dev-user-001", "张三(普通员工)")
          - "dev:dev-agent-001" → ("dev-agent-001", "李四(IT 坐席)")
          - 其他 → 兜底用 settings.dev_default_userid

        Args:
            code: 企微 OAuth code(dev 模式下是 dev 约定串)

        Returns:
            tuple[str, str]: (employee_id, name)
        """
        # dev 模式预设用户表(与 dev_auth.py 保持一致)
        DEV_USERS = {
            "dev-user-001": ("dev-user-001", "张三(普通员工)"),
            "dev-agent-001": ("dev-agent-001", "李四(IT 坐席)"),
            "dev-admin-001": ("dev-admin-001", "钱七(系统管理员)"),
        }

        if code.startswith("dev:"):
            user_id = code[4:]
            if user_id in DEV_USERS:
                return DEV_USERS[user_id]

        # 兜底:用 settings 默认 dev 用户
        return (
            settings.dev_default_userid,
            settings.dev_default_name,
        )

    async def _fetch_oauth_user(self, code: str) -> tuple[str, str]:
        """生产模式: 用企微 OAuth2 code 换取 userid 与 name。

        对应企微 API:
          1. GET /cgi-bin/auth/getuserinfo?access_token=...&code=...
             → { userid, user_ticket }
          2. GET /cgi-bin/user/get?access_token=...&userid=...
             → { name, ... }

        Args:
            code: 企微 OAuth2 授权 code

        Returns:
            tuple[str, str]: (userid, name)

        Raises:
            RuntimeError: 企微 API 调用失败
        """
        # 延迟导入:避免 dev 模式测试时触发不必要的网络初始化
        from app.services.wecom_service import WecomService

        # 用同一个 redis 客户端保证 access_token 缓存命中
        wecom = WecomService(self.redis)
        try:
            oauth_info = await wecom.get_oauth_user_info(code)
            user_id = oauth_info.get("userid", "")
            if not user_id:
                raise RuntimeError("企微 OAuth 返回的 userid 为空")

            user_info = await wecom.get_user_inf