拍我AI 开放平台
  1. API指南
拍我AI 开放平台
  • 开始使用
  • v5.5 重磅更新!
  • API指南
    • API 工作流程
    • 如何购买API 服务
    • 检查账户余额
    • 文本生成视频使用指南
    • 图像生成视频使用指南
    • 特效模板使用指南
    • 首尾帧功能使用指南
    • 续写(Extend)功能使用指南
    • 对口型(Lipsync)接口使用指南
    • 音效生成(背景音乐)使用指南
    • 多主体功能使用指南
    • 重绘功能使用指南
    • 多帧(Multi-transiton)功能 使用指南
    • 视频编辑(Swap)使用指南
    • 获取视频生成状态
    • 如何使用Webhook 回调?
  • API 接口
    • 查询账号余额
      GET
    • 上传图片
      POST
    • 生成文生视频
      POST
    • 生成图生视频
      POST
    • 首尾帧生成视频
      POST
    • 获取视频状态
      GET
    • 上传资源(视频/音频)
      POST
    • 生成对口型(Lipsync)视频
      POST
    • 获取TTS 音色
      GET
    • 生成延长(Extend)视频
      POST
    • 音效生成(sound_effect)接口
      POST
    • 多主体生成视频
      POST
    • 重绘视频生成视频
      POST
    • 重绘效果列表
      GET
    • 视频编辑(Swap) Mask 生成
      POST
    • 视频编辑(Swap) 视频生成
      POST
    • 多帧(Multi-transition) 视频生成
      POST
  • 产品计费
    • 模型与点数消耗
    • 预付资源包与企业定制
  • 问题排查
    • 常见错误及解决方案
    • FAQ
  • 资源中心
    • 技术支持/联系我们
    • 更新日志
    • 服务条款
    • 隐私协议
    • 附加工具
  1. API指南

如何使用Webhook 回调?

什么是Webhook?#

Webhook 用于在视频生成任务状态变化时,拍我 AI API 平台会自动将结果回调给你。

支持功能列表#

目前Webhook 支持功能的列表, 后续会支持更多拍我AI API功能上
功能(端口/接口)支持情况
文生视频video/text/generate✅
图生视频video/img/generate✅

如何使用#

第一步: 创建Webhook_id
访问Webhook管理页面创建webhook_id
image.png
第二步: 生成接口加webhook_id字段
第三步:收到Webhook后进行验证,并返回ok

WEB 签名指南#

简述#

为确保 Webhook 请求的安全性和完整性,所有 Webhook 推送都会携带签名信息。客户端应验证每个请求的签名,以防止请求伪造和数据篡改。

请求格式#

HTTP Method#

POST

Content-Type#

application/json

请求头 (Headers)#

Header 名称类型说明
Webhook-TimestampstringUnix 时间戳(秒级)
Webhook-Noncestring32 位随机字符串,由大小写字母和数字组成
Webhook-Signaturestring请求签名(Base64 编码的 HMAC-SHA256)
Ai-Trace-Idstring请求追踪 ID,用于问题排查
Content-Typestring固定值 application/json

请求体 (Body)#

JSON 格式的业务数据,示例:
{
  "id": "123456789",
  "status": 1,
  "url": "https://example.com/video.mp4",
  "size": 10.5,
  "has_audio": true,
  "credits": 100
}

签名验证算法#

步骤 1:构造待签名字符串#

待签名字符串由三部分组成,使用换行符 \n 连接:
{timestamp}\n{nonce}\n{url_encoded_payload}
说明:
timestamp:从 Webhook-Timestamp 请求头获取
nonce:从 Webhook-Nonce 请求头获取
url_encoded_payload:将 JSON Body 的各字段按 URL Query String 格式编码

步骤 2:URL 编码 Payload#

将 JSON Body 中的每个字段转为 key=value 格式,并使用 & 连接。
示例:
原始 JSON:
{
  "id": "123456789",
  "status": 1,
  "url": "https://example.com/video.mp4",
  "has_audio": true
}
URL 编码后:
has_audio=true&id=123456789&status=1&url=https%3A%2F%2Fexample.com%2Fvideo.mp4
⚠️ 注意:URL Values 编码通常会按 key 的字母顺序排序。

步骤 3:计算签名#

使用 HMAC-SHA256 算法,以 Secret Key 为密钥对待签名字符串进行签名,然后进行 Base64 编码。
signature = Base64(HMAC-SHA256(secret_key, sign_string))

步骤 4:比对签名#

将计算得到的签名与请求头中的 Webhook-Signature 进行比对。

代码示例#

Python#

Go#

Node.js#

Java#


响应要求#

成功响应#

当 Webhook 接收成功时,必须返回:
项目要求
HTTP Status Code200
Response Bodyok(小写,不含引号和其他字符)
示例:
HTTP/1.1 200 OK
Content-Type: text/plain

ok

失败响应#

返回非 200 状态码或 Body 不为 ok 时,系统会进行重试。

重试机制#

当推送失败时,系统会按以下间隔进行重试:
重试次数间隔时间
第 1 次2 秒
第 2 次10 秒
第 3 次30 秒
第 4 次1 分钟
第 5 次5 分钟
第 6 次15 分钟
第 7 次1 小时
第 8 次4 小时
说明:每次重试间隔会有 ±10% 的随机抖动,以避免重试风暴。达到最大重试次数后,任务将标记为失败。

安全建议#

1.
始终验证签名:在处理任何业务逻辑前,务必先验证签名的有效性。
2.
验证时间戳:建议检查 Webhook-Timestamp 是否在合理范围内(如 5 分钟内),以防止重放攻击。
3.
使用 HTTPS:确保 Webhook 接收端点使用 HTTPS 协议。
4.
安全存储密钥:妥善保管 Secret Key,不要将其暴露在客户端代码或版本控制系统中。
5.
使用时间安全的比较函数:使用 hmac.compare_digest(Python)、crypto.timingSafeEqual(Node.js)或 MessageDigest.isEqual(Java)等函数进行签名比对,以防止时序攻击。
6.
幂等处理:由于存在重试机制,同一事件可能被推送多次。建议使用 id 字段进行去重,确保业务逻辑的幂等性。

常见问题#

Q: 签名验证失败怎么办?#

1.
确认 Secret Key 是否正确
2.
检查 URL 编码实现是否与服务端一致
3.
确认待签名字符串格式正确(注意换行符 \n)
4.
检查布尔值的字符串表示(应为 true/false)

Q: 如何调试签名?#

可以打印以下信息进行对比:
原始 payload
URL 编码后的 payload
完整的待签名字符串
计算得到的签名
请求头中的签名

如有其他问题,请联系技术支持。
修改于 2025-12-26 10:27:35
上一页
获取视频生成状态
下一页
查询账号余额
Built with