API v1 更新 兼容承诺 12 个月

AutFeng Hub 开放接口文档

面向 AutFeng 客户端(Android / iOS)与网页端。涵盖认证、资源检索与下载、投稿上传、社区、 服务订单、钱包结算、管理端与 Webhook 回调。

1. 接入准备

环境地址、应用密钥与请求签名

环境地址

请求头

HEADERS
Authorization:   Bearer <accessToken>
X-AF-App-Id:     af_android
X-AF-Timestamp:  1785267600        # 秒级,偏差需 < 300 秒
X-AF-Nonce:      f3a9c1e07b2d4     # 随机串,5 分钟内不可重复
X-AF-Sign:       <签名值>
X-AF-Client-Ver: 4.2.1             # 用于兼容性过滤,务必带上
X-AF-Device-Id:  <设备唯一标识>

签名算法

SIGN
raw  = METHOD + "\n" + PATH + "\n" + SORTED_QUERY + "\n"
     + BODY_MD5 + "\n" + TIMESTAMP + "\n" + NONCE

sign = HMAC_SHA256(raw, APP_SECRET)  // hex lowercase
  • SORTED_QUERY:query 按 key 升序拼 k=v&k=v,无参数为空串
  • BODY_MD5:请求体 MD5(hex lowercase),GET 或空体为空串
  • 签名错误 40101,时间戳超窗 40102,nonce 重放 40103

2. 通用约定

响应结构、分页、限流、幂等与单位

统一响应

RESPONSE
{
  "code": 0,
  "message": "ok",
  "data": {},
  "requestId": "req_9f2c7b1e4a8d",
  "serverTime": 1785267600
}

requestId 请在客户端日志保留,排查问题时提供。

分页响应

PAGINATION
{
  "list": [],
  "page": 1,
  "pageSize": 20,
  "total": 12840,
  "hasMore": true,
  "cursor": "eyJpZCI6InAyMDAxIn0"
}

列表页用 page,社区信息流用 cursor(避免新内容插入导致翻页重复)。

限流

各维度限流阈值
维度限制超限返回
时间
统一秒级 Unix 时间戳(int),客户端自行转本地时区
金额
统一为分(int),16800 表示 ¥168.00;积分为整数
幂等
下单、支付、提现带 Idempotency-Key,重复提交返回首次结果

Webhook 回调

平台向你配置的地址推送事件,带签名与重试

请求格式

POST <你的回调地址>
X-AF-Event:      order.status_changed
X-AF-Event-Id:   evt_9f2c7b1e
X-AF-Timestamp:  1785267600
X-AF-Signature:  <hmac_sha256(body, secret)>

{
  "eventId": "evt_9f2c7b1e",
  "event": "order.status_changed",
  "createdAt": 1785267600,
  "data": {
    "orderId": "AF20260729001",
    "fromStatus": "working",
    "toStatus": "review",
    "operator": "creator"
  }
}

验签与重试

VERIFY
expected = HMAC_SHA256(raw_body, secret)
// hex lowercase,比对 X-AF-Signature
// 不一致直接丢弃
请在 5 秒内返回 HTTP 200,响应体内容不作要求
非 200 重试 7 次:1s、5s、30s、2min、10min、1h、6h
用 eventId 做幂等,同一事件可能重复投递

事件列表

状态机

订单、审核与提现的状态流转规则

订单状态流转

各状态允许的操作

订单各状态下买家与剪辑师可执行的操作
状态含义买家可做剪辑师可做

自动流转

审核状态机

AUDIT
draft ──提交──> pending ──通过──> passed
                    │                  │
                    │                下架
                    │                  ▼
                    │               offline
                    │                  │
                  驳回             恢复上架
                    ▼                  │
                rejected <─────────────┘
                    │
              修改重提 └──> pending

提现状态机

WITHDRAW
pending ──风控通过 + 打款──> paid
   │
   └──驳回──> rejected
              // 金额退回余额
订单完成后资金 T+3 解冻,解冻后才可提现

枚举字典

客户端对未知枚举做兜底展示,优先用服务端下发的 xxxName 字段

客户端集成

版本兼容、深链、导入流程、缓存与埋点

版本兼容性是投诉最高的一类问题
用户下载到无法导入的预设时会直接给差评。请务必在列表请求传 maxVersion, 并用响应里的 compatible 决定按钮态。

兼容性处理顺序

    深链 Deep Link

    客户端需注册 autfeng:// scheme,建议同时配置 Universal Link / App Links 作为降级。

    导入流程

      缓存策略

      各类数据的建议缓存时长与失效策略
      数据建议缓存失效策略
      CONDITIONAL GET
      GET /resources?category=transition
      If-None-Match: "W/9f2c7b1e"
      
      // 未变更返回 304,不消耗流量

      WebView 内嵌

      Hub 页面会被客户端 WebView 内嵌,需注意:

      埋点事件

      POST /analytics/events
      {
        "events": [
          { "event": "resource_view",
            "props": { "resourceId": "p_2001", "from": "category" },
            "ts": 1785267600 },
          { "event": "import_result",
            "props": { "resourceId": "p_2001", "success": true },
            "ts": 1785267640 }
        ]
      }

      错误码

      HTTP 状态码看传输层,业务 code 看业务层

      业务错误码与建议处理方式
      code含义建议处理

      变更日志与兼容承诺

      v1.0.0 · 2026-07-29 首个正式版本

      兼容性承诺
      已发布字段不删除、不改类型;客户端需容忍未知字段
      枚举值可能新增,用 xxxName 字段直接展示服务端下发的名称
      破坏性变更走 /v2 前缀,/v1 至少维护 12 个月