信封签署 (eSign)回调说明回调概览

概述

在控制台 AppId 设置页配置 CallbackUrl 后,信封状态发生变更时,服务端将向 CallbackUrl 发送 POST 请求。 > ⚠️ 注意:回调均为 POST 请求。若收到 GET 请求,请确认 CallbackUrl 是否存在 HTTP 到 HTTPS 的 301/302 跳转。

配置步骤

  1. 1. 登录控制台,进入「应用管理」→ 选择目标 AppId
  2. 2. 在「回调配置」区域填写 CallbackUrl(须为公网可达的 HTTPS 地址)
  3. 3. 保存后系统自动生成 32 字符的 CallbackKey(Base62 编码),用于加解密回调数据
  4. 4. 妥善保管 CallbackKey,遗失后需重新生成(旧 Key 立即失效)
⚠️CallbackUrl 必须为 HTTPS 协议
CallbackUrl 必须为公网可达地址(不允许内网 IP、localhost)
每个 AppId 可配置多个 CallbackUrl,各自拥有独立的 CallbackKey
不同 CallbackUrl 使用各自独立的 CallbackKey,互不影响

数据格式与加密

数据格式与加密

{
  "encrypt": "dGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIGV4YW1wbGU..."
}
算法
AES-256-GCM
密钥
32 字节(256 位)
随机数(Nonce)
12 字节(96 位,随机生成)
密文格式
Base64( nonce[12字节] + GCM_ciphertext + GCM_tag[16字节] )

解密流程

  1. 1. 从请求 Body 中取出 encrypt 字段值
  2. 2. 对该值进行 Base64 标准解码,得到 raw bytes
  3. 3. 前 12 字节为 nonce,剩余部分为 GCM ciphertext(含 16 字节 auth tag)
  4. 4. 使用 CallbackKey(32 字节,UTF-8 编码)构造 AES-256-GCM 解密器
  5. 5. 调用 GCM.Open(nonce, ciphertext) 解密得到原始 JSON 明文
  6. 6. 将 JSON 反序列化为 EnvelopeCallbackPayload 对象

投递策略

HTTP 超时
5 秒(HTTP 请求超时)
成功条件
客户端在 5 秒内返回 HTTP 200 状态码
最大重试
36
重试间隔
1 秒、2 秒、3 秒、4 秒、5 秒 → 10 秒、15 秒、20 秒、25 秒、30 秒、35 秒、40 秒、45 秒、50 秒、55 秒 → 1 分、2 分、3 分、4 分、5 分、6 分、7 分、8 分、9 分、10 分 → 15 分、25 分、35 分、45 分、55 分 → 1 时、2 时、3 时、4 时、5 时、6 时
顺序保证
同一信封 + 同一集成的回调按事件发生时间顺序投递,确保事件顺序一致性
ℹ️重试间隔随次数增加。一旦收到 HTTP 200 响应,平台不再重发该条回调。36 次仍失败则平台视为此消息无法投递并丢弃。

最佳实践

💡
  1. 妥善保管 CallbackKey,不要硬编码在客户端代码中,建议使用环境变量或密钥管理服务
  2. 回调处理逻辑应尽量轻量,确保在 5 秒内返回 HTTP 200,复杂业务逻辑建议异步处理
  3. 建议对回调事件做幂等处理,因为在极端情况下同一事件可能被投递多次
  4. 建议记录回调日志,便于排查问题
  5. 建议通过 EnvelopeId + EventType + OccurredAt 组合判断事件唯一性