Skip to content

API 参考与错误码

本页涵盖 API 认证相关的错误码、API 密钥管理方法以及 HMAC 签名方案的技术规格。

API 认证错误码

当服务器在 验证流水线 中拒绝 API 请求时,会返回以下错误码之一。流水线按顺序评估——第一个失败的检查决定了错误响应。

错误码名称HTTP说明
GA2001API_KEY_REQUIRED401请求中缺少 X-Api-Key 请求头。
GA2002SIGNATURE_REQUIRED401请求中缺少 X-Signature 请求头。
GA2011API_KEY_INVALID401未找到 API 密钥或格式无效。请确认您使用的是正确的密钥。
GA2012SIGNATURE_INVALID401HMAC 签名验证失败。计算的签名与 X-Signature 不匹配。请检查您的规范消息构造和密钥。
GA2013TIMESTAMP_EXPIRED401请求时间戳超出 60 秒的可接受窗口,或 nonce 已被使用。请确保您的服务器时钟已通过 NTP 同步。
GA2021API_KEY_DISABLED403API 密钥已被工作区管理员禁用。请联系您的工作区所有者。
GA2022IP_NOT_ALLOWED403客户端 IP 地址不在 API 密钥的 IP 白名单中。请在管理门户中添加您服务器的 IP。
GA2024SCOPE_DENIED403API 密钥没有此操作所需的权限范围。
GA2032WORKSPACE_NOT_FOUND404未找到与此 API 密钥关联的工作区。该工作区可能已被删除。
GA2034WORKSPACE_NOT_MEMBER403与此 API 密钥关联的用户不是目标工作区的成员。

调试认证失败

首先检查 HTTP 状态码和响应体中的 code 字段。按照 验证流水线 的顺序逐步排查:如果您看到 GA2013,请先修复时间戳或 nonce,再排查签名问题。GA2012 最常见的原因是哈希计算和实际请求体之间的 JSON 序列化不一致。


API 密钥管理

API 密钥由工作区所有者通过 SlaunchX 管理面板进行管理。您可以在工作区设置页面中创建、查看、撤销和重新生成密钥。

API 密钥格式

API 密钥采用带前缀的格式,用于标识环境:

前缀环境示例
sk_live_生产环境sk_live_abc123def456ghi789
sk_test_沙箱 / 测试环境sk_test_xyz987wvu654tsr321

:::caution 密钥可见性 API 密钥仅在创建或重新生成时 显示一次。如果您丢失了密钥,必须重新生成。没有办法检索以前颁发的密钥。 :::

密钥生命周期

  已创建(活跃)

       ├── 重新生成密钥 → 新密钥,相同密钥 ID

       └── 撤销 → 永久禁用(GA2021)

配置选项

创建或更新 API 密钥时,您可以配置:

  • 权限范围 -- 限制密钥可以执行的 API 操作。如果请求需要密钥不具备的权限范围,服务器将返回 GA2024
  • IP 白名单 -- 限制可以使用该密钥的 IP 地址。来自未列入名单的 IP 的请求将收到 GA2022。留空则允许所有 IP。
  • 描述 -- 用于帮助您识别密钥用途的可读标签。

技术规格

参数
签名算法HMAC-SHA256
请求体哈希算法SHA-256(十六进制编码,小写)
签名编码Base64(标准格式,带填充)
时间戳格式Unix 时间戳(秒,UTC)
时间戳容差60 秒(服务器在 `
Nonce 格式任意唯一字符串;建议使用 UUID v4
Nonce 唯一性强制执行服务端;在时间戳窗口内唯一
空请求体哈希e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
规范消息格式method\npath\ntimestamp\nnonce\nbodyHash
规范消息中的路径仅请求路径(不含协议、主机或查询字符串)

速率限制

API 端点可能根据操作类型实施速率限制。当超过速率限制时,服务器返回 HTTP 429 Too Many Requests。响应中包含 Retry-After 请求头,指示在重试前需要等待的秒数。

请求大小限制

限制
最大请求体大小1 MB
最大 URL 长度8,192 字符

故障排除指南

以下是集成人员最常遇到的问题及诊断步骤。

GA2012:签名无效

这是最常见的错误。请按以下清单逐步排查:

  1. 请求体哈希不匹配。 打印您正在哈希的精确字节字符串,并与 HTTP 库实际发送的精确字节字符串进行比较。注意空白、键顺序或字符编码的差异。
  2. 路径错误。 规范消息仅使用请求路径——不包含协议(https://)、主机或查询字符串。对于 /api/v1/wallets?page=0,应使用 /api/v1/wallets
  3. 换行符问题。 确保使用 \n(LF,0x0A)作为分隔符。某些平台默认使用 \r\n(CRLF),这会产生不同的哈希值。
  4. 密钥编码。 API 密钥是 UTF-8 字符串。不要在将其用作 HMAC 密钥之前对其进行 Base64 解码——直接使用原始字符串。
  5. Base64 输出。 签名必须是标准 Base64(使用 +/= 填充)。不要使用 Base64-URL 编码。

GA2013:时间戳过期

  1. 时钟偏移。 在您的服务器上运行 date -u +%s 并与已知的 NTP 源进行比较。如果差异超过 60 秒,请同步您的时钟。
  2. Nonce 重复使用。 相同的错误码也用于重复的 nonce。如果您的时钟正确,请确保为每个请求生成新的 UUID。
  3. 缓存的时间戳。 如果您计算一次时间戳并在多个请求中重复使用(例如在批量循环中),批次末尾的请求可能超过 60 秒的窗口。

GA2021:API 密钥已禁用

管理员已通过门户禁用了此密钥。请联系您的工作区所有者。一旦禁用,密钥无法重新启用——您必须创建新的密钥。

GA2022:IP 不被允许

您服务器的出站 IP 与此 API 密钥配置的白名单不匹配。如果您的服务器位于负载均衡器或 NAT 网关之后,请使用 SlaunchX API 可见的外部 IP。您可以使用 curl ifconfig.me 进行检查。


安全最佳实践

  1. 安全存储密钥。 使用密钥管理器(如 HashiCorp Vault、AWS Secrets Manager 等),而非将环境变量或配置文件提交到版本控制中。

  2. 定期轮换密钥。 使用重新生成端点来颁发新密钥。协调轮换过程,确保在旧密钥失效之前更新您的服务器。

  3. 使用 IP 白名单。 将 API 密钥的使用限制在已知的服务器 IP 地址。即使密钥泄露,也能防止被滥用。

  4. 应用最小权限范围。 仅授予每个密钥实际需要的权限范围。为不同的服务或使用场景创建不同的密钥。

  5. 同步您的时钟。 使用 NTP 将服务器时钟保持在 UTC 几秒钟之内。60 秒的时间戳窗口已经很宽裕,但超出此范围的时钟偏移会导致持续出现 GA2013 错误。

  6. 切勿在客户端暴露密钥。 API 密钥只能在服务端代码中使用。切勿将其嵌入前端 JavaScript、移动应用或客户端配置中。


相关页面

Lampay API 文档