# 个人 API 服务 > Serverless 函数集合。上传月度销售 Excel(xlsx)→ 返回 JSON 统计结果。全程 HTTPS,HMAC-SHA256 签名认证。 ## 文档 - [完整接口文档(Markdown,推荐 LLM 阅读)](https://apis.gankun.cn.lu/llms.md) - [OpenAPI 3.0 规范](https://apis.gankun.cn.lu/openapi.json) - [HTML 接口文档](https://apis.gankun.cn.lu/) - [站点地图(本文件)](https://apis.gankun.cn.lu/llms.txt) ## 关键事实 - Base URL:`https://apis.gankun.cn.lu`。所有请求通过 HTTPS。 - 接口:`POST /api/analyze`(需认证,上传 xlsx base64 → MonthlySalesStats JSON);`GET /api/health`(公开)。 - 认证:请求头 `x-api-key` / `x-timestamp`(秒级时间戳,服务端校验 ±5 分钟窗口防重放)/ `x-signature`。 - 签名算法:`bodyHash = sha256Hex(请求体原文)`;`signature = HMAC-SHA256(secret, "${timestamp}:${bodyHash}")`,十六进制小写。 - 可选请求体加密:请求头 `x-encrypted: 1`,AES-256-GCM,密文格式 `base64(iv).base64(tag).base64(data)`,密钥 = `sha256(secret + ":" + apiKey)`。 - 响应统一信封:`{ code, message, data }`。成功 `code=0`;失败时 `code` 与 HTTP 状态码一致、`data=null`。 - 错误码:400(JSON 非法 / 缺 file / 解析失败)、401(认证失败)、405(方法不符)、413(请求体超过平台 4.5MB 上限)。 - 数据模型 `MonthlySalesStats`:`{ months: string[], byMonth: { "YYYY-MM": SalesStats }, total: SalesStats }`。 - `SalesStats`:`{ meta, byHospital[], byLevel[], byDistributor[], byAgent[], byManager[], byProvince[], newHospitals[] }`。 - `meta`:`{ year, month, rows, hospitals, totalQty, totalConv, newHospitals }`;total 的 month=0。 - 分组项:`{ name, qty, conv, records }`,按 conv(折算万盒)降序,空值显示为 `"(空)"`。 - 新增医院:`{ hospital, level, province, qty, conv }`(医院去重=1 的行)。 - 输入 xlsx:解析第一个工作表,按列名取数:年 / 月 / 配送商业 / 标准医院名称 / 标准级别 / 代理商 / 省份 / 出库数量 / 招商经理 / 折算2贴数量(万盒) / 医院去重。跳过「出库数量」为空的行。 - 请求体体积:base64 使体积膨胀约 33%,平台请求体上限 4.5MB,原始 xlsx 建议不超过约 3.3MB。 - SDK:零依赖单文件,浏览器 / Node.js 通用(Web Crypto + fetch),源码见 llms.md「SDK 源码」节,可整段保存为 `sdk.js` 直接使用。