快速开始 认证方式 ① API 密钥(音乐) ② OAuth 2.0 应用(收藏) 应用申请流程 限速规则 开发者等级 429 处理 接口列表 账号 / 收藏 / 番茄 OAuth 管理 音乐解析 错误码 最佳实践

星海开放平台 · 开发者文档

版本 v1.1 · 更新于 2026-10-18 · 适用于 yy.zddyr.top 认证服务与音乐解析 API

本文档覆盖第三方接入的全部内容:认证方式、限速规则、接口列表、错误码与最佳实践。阅读顺序建议:快速开始 → 认证 → 限速 → 按需查接口。

开发者可用的凭证共两种:API 密钥(音乐解析)与 OAuth 2.0 应用(收藏等敏感数据,需申请审核)。

快速开始(5 分钟)

  1. 注册并登录星海账号(邮箱验证通过)。
  2. 进入 开发者平台(developer.php),个人类申请「普通」等级——免网站验证,提交即通过;网站类或更高等级需人工审核。
  3. 在「API 密钥」卡片点「生成密钥」,立即保存完整密钥(仅显示这一次)——用于音乐解析 API。
  4. 需要访问收藏等敏感数据?在「OAuth 应用」卡片提交应用申请,审核通过后领取 client_id / client_secret。
  5. 带上凭证调用接口:
# 音乐解析(API 密钥,GET)
curl "https://yy.zddyr.top/lx/api/?types=search&source=kw&name=海阔天空&key=你的密钥"

# 开放接口(API 密钥,POST)
curl https://yy.zddyr.top/auth/api.php \
  -H "Authorization: Bearer xhkey_your_key_here" \
  -d "action=me"

返回示例:

{
  "code": 200,
  "msg": "ok",
  "data": { "user": { "id": 12, "username": "demo", "email": "demo@example.com" } }
}
所有接口统一为 POST https://yy.zddyr.top/auth/api.php,参数放 JSON body 或表单,action 指定操作;音乐解析 API 为 GET,见下文。

认证方式

面向开发者的凭证只有两种,按访问的数据类型选择:

凭证能访问什么获取方式状态
① API 密钥 音乐解析 API(搜索 / 播放地址 / 歌词等) 开发者平台「API 密钥」卡提交申请 → 通过后领取(个人认证免审,其余管理员审核) 推荐
② OAuth 2.0 应用 收藏、番茄下载记录等敏感个人信息;授权登录(user:read) 开发者平台提交申请 → 管理员审核通过后发放 需申请
开发者平台上的三个申请——开发者认证、API 密钥、OAuth 应用——各自独立、互不依赖,可以只申请其中一个:个人认证类免审直过,网站 / 企业类及其余情况走人工审核。

① API 密钥(音乐)推荐

密钥由服务端生成(xhkey_ 开头),与账号密码解耦:泄露了只删这一个密钥,不影响账号。已改为申请制:在开发者平台「API 密钥」卡提交申请(填备注名与用途说明),个人认证(个人类开发者)用户提交即过,其余经管理员审核;通过后点「领取密钥」获取完整密钥,请求头二选一:

Authorization: Bearer <密钥>
# 或
X-Api-Key: <密钥>
  • 音乐解析 API 也可以把密钥放 URL 参数 ?key=(GET 场景图方便,服务端日志已脱敏)。
  • 密钥可在开发者平台随时停用 / 启用 / 删除,立即生效;完整密钥仅领取时显示一次,再次领取会重置旧密钥。
  • 限速:按单 IP 每秒(默认 3 次/秒)+ 单日封顶(默认 10000 次);开发者等级放大数值,L4 单日无限。

② OAuth 2.0 应用(收藏等敏感数据)需申请

收藏、番茄下载记录属于敏感个人信息,不开放自助直开:先在开发者平台提交应用申请,管理员审核通过后才创建应用并发放 client_id / client_secret。第三方应用凭这对凭证,经用户本人授权后访问其数据。

申请流程

  1. 开发者平台 →「OAuth 应用 · 收藏访问」卡片 →「提交新申请」。
  2. 填写申请材料:应用名称 / 类型、回调地址、权限范围、用途详细说明、数据使用与存储说明、隐私政策链接(选填)、预计规模(选填)、联系邮箱。
  3. 管理员审核:通过则自动创建归属你的应用;拒绝会注明理由,可修改后重新提交。
  4. 在「我的应用」里点「重置密钥」领取 client_secret——仅显示这一次,请当场保存。
应用创建后不会直接展示 client_secret(服务端只存哈希)。泄露或怀疑泄露时再重置一次,旧密钥立即失效。

授权码 + PKCE 流程

# 1. 跳转用户到授权页(用户在浏览器完成登录与同意;PKCE 的 S256 challenge 必填)
GET https://yy.zddyr.top/auth/oauth.php?action=authorize
    ?client_id=你的client_id
    &redirect_uri=https://your.app/callback
    &response_type=code
    &scope=favorites:read%20favorites:write
    &state=随机串
    &code_challenge=BASE64URL(SHA256(code_verifier))
    &code_challenge_method=S256

# 2. 回调得到 code,换取访问令牌
POST https://yy.zddyr.top/auth/oauth.php
{"action":"token","code":"授权码","client_id":"...","client_secret":"...","code_verifier":"第1步的原文"}

# 3. 携带访问令牌调用接口
Authorization: Bearer <access_token>

# 4. 校验 / 注销令牌
{"action":"introspect","token":"..."}
{"action":"revoke","token":"..."}
  • 可用 scope 现为四项:favorites:read(读收藏)、favorites:write(写收藏)、fanqie_downloads:read(番茄下载记录)、user:read(授权登录·读取基本信息)。
  • 已授权过的同 scope 应用会跳过同意页(skip-consent)。
  • 限速:按 client_id 每分钟计(默认 120 次,管理员可为单个应用调整)。
  • scope 缺失时接口返回 403;用户可在「个人管理 → 我的授权」随时取消授权。

授权登录(使用星海账号登录)

想让你的应用提供「使用星海账号登录 / 注册」?申请应用时勾选 user:read 权限,走与上面完全相同的授权码 + PKCE 流程拿到 access_token,然后调用用户信息端点识别用户:

# 用 access_token 换取用户基本信息(令牌需含 user:read scope)
GET https://yy.zddyr.top/auth/oauth.php?action=userinfo
Authorization: Bearer <access_token>

# 返回示例
{
  "sub": 123,                    // 稳定账号 ID——请以此为用户唯一键
  "id": 123,
  "username": "zhangsan",
  "email": "zhangsan@example.com",
  "email_verified": true,
  "avatar": "https://..."
}
  • sub 是该用户在你应用下的稳定标识,登录取到后直接建立本地账号关联即可。
  • email_verified 为 true 表示邮箱已验证,可放心用于注册填充。
  • userinfo 与业务接口一样按 client_id 每分钟限速(默认 120 次)。

限速规则

核心原则:单 IP 每秒,对所有人一致

普通用户与开发者都只按「单 IP 每秒」限速(默认 3 次/秒)。开发者等级只是把这个数值按比例放大,不改变计费维度。NAT/代理后面的多个用户共享同一个 IP 的额度——把服务端调用也收敛到固定出口 IP,避免互相挤占。

开发者等级

等级每秒放大单日封顶获取方式
普通用户基准10000 次注册即得
普通+10%默认封顶个人类申请,免网站验证,提交即通过
L1+30%默认封顶人工审核(L4 封顶;网站类需先网站验证)
L2+40%默认封顶
L3+50%默认封顶
L4+100%无限
L4 以上自定义自定义联系管理员单独定制
放大公式:max(基础+1, round(基础 × (1+boost%)))。例:基础 3 次/秒 + 40% → 4 次/秒;基础 10000/日 + 200% → 30000/日。L4 的「无限」只取消单日封顶,每秒限流依然生效。

其他限速层

层维度默认值
OAuth 应用级client_id / 分钟120 次(管理员可调)
音乐 API 平台级平台 / 秒(所有 IP 共享)管理面板可调
音乐 API 单 IPIP / 窗口管理面板可调(1~8 次/1~3 秒)
音乐 API 每小时IP / 小时管理面板可调(0=不限)

429 处理

超限返回 HTTP 429,body 形如:

{
  "code": 429,
  "msg": "请求过于频繁:后端密钥默认每秒 3 次,请 1 秒后重试",
  "data": { "retry_after": 1, "limit": 3, "scope": "second" }
}

同时响应头带:

X-RateLimit-Limit: 3
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1760000000
Retry-After: 1

客户端应尊重 Retry-After 退避后重试,不要立即重连——那只会延长封禁观感。

接口列表

统一入口 POST https://yy.zddyr.top/auth/api.php,action 参数区分操作;认证方式任选其一(API 密钥 / OAuth access_token)。

账号 / 收藏 / 番茄小说

action说明主要参数
me当前凭证对应的账号信息—
fav_list云端收藏列表page, limit
fav_add新增收藏song 对象
fav_remove移除收藏id 或 song_id
fav_toggle有则删、无则加song 对象
fav_sync批量同步(本地→云端)songs 数组
fav_oldest最早收藏的 N 首(清理用)n
fanqie_downloads番茄小说下载记录列表page, limit
fanqie_download_get单条下载记录详情id
fav_* / fanqie_downloads* 属于敏感数据:用 OAuth access_token(对应 scope)调用,代表已授权的终端用户;也可用 API 密钥 调用,访问的是密钥所属账号自己的数据。

工单 / 反馈

action说明
ticket_create提交工单
ticket_list我的工单列表
ticket_detail工单详情(含回复)
ticket_reply回复工单
ticket_close关闭工单

OAuth 管理(用户侧)

action说明
oauth_my我已授权的第三方应用列表
oauth_revoke取消对某个应用的授权(令牌立即失效)

OAuth 提供侧接口(authorize / token / introspect / revoke / userinfo)走 https://yy.zddyr.top/auth/oauth.php;应用需先在开发者平台提交申请、审核通过后获得。

音乐解析 API(lx)

独立服务,GET 调用:

# 搜索
GET https://yy.zddyr.top/lx/api/?types=search&source=kw&name=海阔天空&key=你的密钥

# 获取播放地址
GET https://yy.zddyr.top/lx/api/?types=url&source=kw&id=12345&key=你的密钥
  • 带 key(API 密钥)走授权档,限速更高;否则未授权档。
  • 平台级 QPS(所有 IP 共享)与单 IP QPS 由管理面板统一调控,现场可调。
  • source 可选 kg / kw / qq / mg / mg2 / nt / qi / kuwo 等,以面板显示为准。

错误码

HTTPcode含义处理建议
200200成功—
400400参数错误 / 业务校验失败检查 msg 字段,修正参数
401401未登录 / 凭证无效或已过期重新获取凭证;密钥被停用则换一把
403403无权限(scope 不足 / 功能未开启)检查开关与授权 scope
404404接口或资源不存在核对 action 拼写
429429触发限流按 Retry-After 退避重试
500500服务端内部错误稍后重试;持续失败请用工单反馈
注意:部分失败也走 HTTP 200 + body code != 200 的形式,一律以 body 的 code 字段为准。

最佳实践

1. 凭证管理

  • 音乐调用用API 密钥,敏感数据用OAuth 应用;一个用途一把密钥,泄露只删一把。
  • 密钥只放请求头,不要放 URL(会进日志、Referer、监控采样);音乐 GET 接口的 ?key= 是唯一例外。
  • 不要把密钥提交进公开仓库;怀疑泄露立刻在开发者平台停用或重置。

2. 限速友好

  • 本地做请求合并与缓存:收藏列表变化不大,30 秒缓存能砍掉九成请求。
  • 遇到 429 指数退避(如 1s、2s、4s…封顶 30s),并抖散避免惊群。
  • 批量操作用 fav_sync 一次同步,不要循环单条 add。
  • 把服务端出口固定到少数 IP:限速按 IP 算,浮动 IP 会让额度忽高忽低。

3. OAuth 专项

  • state 必须带并校验,防 CSRF;PKCE 的 code_verifier 妥善保存,换令牌要用。
  • 只申请用得到的 scope,用户看得见,也减少被拒风险。
  • 申请材料写详细:用途与数据流向说不清,是最常见的被拒理由。
  • 访问令牌失效时用 refresh 流程静默续期,不要反复跳授权页。

4. 变更与反馈

  • 文档以本页为准;接口行为变更会先在工单/订阅通知里公告。
  • 接入遇到问题,用 ticket_create 或站内工单反馈,附上请求时间与 action。