{
  "module": {
    "module": "OpenAPI 接口",
    "moduleKey": "openapi"
  },
  "api": {
    "title": "会员登录",
    "method": "POST",
    "path": "/openapi/memberships/login",
    "description": "同时支持企业账号与散客账号的登录校验，并返回加密的登录令牌。如果用户有多个可用站点，会返回站点信息。散客账号登录时必须包含同意协议字段。",
    "requestParams": {
      "headers": [
        {
          "name": "Authorization",
          "type": "string",
          "required": true,
          "description": "登录令牌，包含手机号、密码和同意协议信息（散客账号必填），格式为 Bearer TOKEN。令牌 payload 应包含：phone（手机号）、password（密码）、agreeTerms（同意协议，散客账号必填且必须为 true）"
        },
        {
          "name": "X-System-Code",
          "type": "string",
          "required": true,
          "description": "系统编码。用于指定当前登录的业务系统（例如 AUTH_MANAGEMENT、CONTENT_MANAGEMENT）。当系统不支持时将返回“登录用户不支持当前系统，可联系管理员处理”。"
        }
      ]
    },
    "responseExample": {
      "success": {
        "code": "0000",
        "message": "登录成功",
        "data": {
          "token": "eyJhbGciOiJIUzI1NiIs...",
          "user": {
            "id": "BAKj1wKp7etrmSAT",
            "code": "USER000001",
            "username": "企业管理员",
            "phone": "13800138000",
            "email": "admin@example.com",
            "individualism": true,
            "status": 1,
            "createTime": "2025-01-21T10:00:00.000Z",
            "accountType": "user",
            "type": "普通用户"
          },
          "companyName": "靖苒数字",
          "site": {
            "id": "site-id",
            "key": "56B57A72-59C4-460B-82E5-22196205391B-A4608B6E9D4D6F599",
            "name": "所属站点",
            "createTime": "2025-01-21T10:00:00.000Z"
          }
        }
      },
      "failure": {
        "code": "1302",
        "message": "当前账号处于黑名单状态",
        "data": null
      },
      "failureAgreeTerms": {
        "code": "1303",
        "message": "请同意隐私等协议",
        "data": null
      }
    },
    "notes": [
      "优先尝试企业账号登录，失败后自动回退到散客账号校验。",
      "散客账号登录时，登录令牌的 payload 中必须包含 agreeTerms 字段且值为 true，否则返回错误码 1303（请同意隐私等协议）。",
      "企业账号登录时，agreeTerms 字段可选，不影响登录流程。",
      "成功时 data.token 与响应 Header X-OpenAPI-Result 均为加密令牌。",
      "响应中的 site 字段说明：",
      "  - site 字段只返回个人站点信息（如果用户有个人站点），不会返回所属站点信息",
      "  - 有个人站点时：site 字段包含个人站点的完整信息（id、key、name、createTime）",
      "  - 无个人站点时：site 字段为 null（无论用户是否有所属站点）",
      "  - 判断逻辑：只需判断 site 是否为 null 即可知道用户是否有个人站点",
      "  - 注意：用户可能既有所属站点（通过 user.siteKey 访问），也有个人站点（通过 site 字段访问）",
      "后续请求可通过 X-Site header 切换站点，切换后使用对应站点的数据库。"
    ],
    "responseExamples": {
      "有个人站点": {
        "code": "0000",
        "message": "登录成功",
        "data": {
          "token": "eyJhbGciOiJIUzI1NiIs...",
          "user": {
            "id": "BAKj1wKp7etrmSAT",
            "code": "USER000001",
            "username": "企业管理员",
            "phone": "13800138000",
            "email": "admin@example.com",
            "individualism": true,
            "status": 1,
            "createTime": "2025-01-21T10:00:00.000Z",
            "accountType": "user",
            "type": "普通用户"
          },
          "companyName": "靖苒数字",
          "site": {
            "id": "MNFIOHH6QOA3kg0z",
            "key": "A1B2C3D4-E5F6-7890-ABCD-EF1234567890-ABCDEF12",
            "name": "个人站点",
            "createTime": "2025-01-21T10:00:00.000Z"
          }
        }
      },
      "无个人站点": {
        "code": "0000",
        "message": "登录成功",
        "data": {
          "token": "eyJhbGciOiJIUzI1NiIs...",
          "user": {
            "id": "BAKj1wKp7etrmSAT",
            "code": "USER000001",
            "username": "企业管理员",
            "phone": "13800138000",
            "email": "admin@example.com",
            "individualism": false,
            "status": 1,
            "createTime": "2025-01-21T10:00:00.000Z",
            "accountType": "user",
            "type": "普通用户"
          },
          "companyName": "靖苒数字",
          "site": null
        }
      }
    }
  }
}