接口签署

POST/openapi/v1/envelopes/{envelopeId}/recipients/{recipientId}/sign

客户服务端携带签署人 Signing PIN,代替其完成签署(签署人无需进入签署页)。

  • 签署人须已配置 Signing PIN 并对发件人确认过 ERSD 授权书(首次同意在签署页/前端完成);两者任一缺失都会报错
  • 支持幂等:Idempotency-Key 请求头优先,其次请求体 IdempotencyKey,两者都未传报错;同 key 命中此前成功请求时原样返回(IdempotentReplay=true)
  • 签名资源解析:未在 Tabs 中显式绑定的签署控件,使用 SignatureId / SealId 作为默认签名资产,二者至少提供其一;签名图/印章须属于该签署人
  • 路径参数 envelopeId、recipientId 在 URL 中指定,不在请求体中

适用控件与默认资产

  • 本接口代签署人完成「签名 / 盖章」,只覆盖签署类控件(如 signHere 签名、initialHere 首字母、stamp 印章)。若信封上还存在需填写的其他控件(text/date/email/number 等填写型字段),本接口不会代为填写——此类信封请先由签署人在签署页完成填写后再调用,否则将报「控件未填写」错误
  • Tabs 为可选项,一般无需逐个控件绑定:未在 Tabs 中指定的签署控件会按 SignatureId(签名)或 SealId(印章)作为默认资产

Credential(JWE)

按 JWE(RFC7516)加密签署 PIN:alg=RSA-OAEP-256、enc=A256GCM。

  1. 公钥:GET {baseUrl}/.well-known/jwks.json 取 use=enc 的 key(含 kid)。
  2. 明文 payload:
{"typ":"sign_pin","secret":"<PIN>","context":{"userId":"<收件人 UserId>","envelopeId":"<路径 envelopeId>","recipientId":"<路径 recipientId>"},"iat":<秒>,"exp":<iat+60>,"jti":"<uuid>"}
  1. 加密为 5 段 Compact(protected.encryptedKey.iv.ciphertext.tag)填入 Credential。

要点:必须 5 段(WebCrypto 需把末尾 16 字节 tag 单独成段);header 作 AAD;exp≤60s、jti 一次性(重试需重签);context 与收件人及 URL 一致。

明文 PIN:默认不接受,需联系我们开通。


请求参数

Authorization必填string
Bearer <access_token>
X-Operator-User-Id选填string
操作用户 ID。授权码模式下无需传(自动使用授权用户);客户端凭据模式下可选,不填时使用系统用户 ID。
Idempotency-Key选填string
幂等键(与请求体 IdempotencyKey 二选一,本 header 优先)
application/json
SignatureId选填string
签名资源(与 SealId 同为控件未显式绑定时的默认资产,二选一可用)
SealId选填string
印章资源(与 SignatureId 同为控件未显式绑定时的默认资产)
Tabs选填array<object>
控件级资产绑定(可选)。未在 Tabs 中出现的签署控件按 SignatureId / SealId 默认资产处理。
TabId必填string
控件 ID(必填)
SignatureId选填string
该控件使用的签名资源 ID(可选)
SealId选填string
该控件使用的印章 ID(可选)
IdempotencyKey选填string
幂等键(可选)。与 Idempotency-Key 请求头二选一,header 优先;两者都未传报错。 幂等键可复用,但每次重试必须携带新签发的 Credential(凭据为一次性票据,不随幂等键重放)。
Credential选填string
JWE 加密凭据(RSA-OAEP-256+A256GCM,typ=sign_pin,context 含 userId/envelopeId/recipientId),与 SigningPin 二选一。凭据有效期 60 秒且一次性使用。
SigningPin选填string
签署 PIN(默认不接受明文,需联系我们开通)

响应参数

EnvelopeStatus选填string
信封当前状态
RecipientStatus选填string
本次签署的接收人状态
SignedAt选填string
签署完成时间(RFC3339)
EnvelopeCompleted选填boolean
信封是否已完成(全部签署人完成签署)
IdempotentReplay选填boolean
是否为幂等重放(命中此前成功请求的原样返回)

错误码

错误码说明
INVALID_REQUEST参数错误(缺幂等键 / 路径参数为空等)
NOT_FOUND信封不存在
RECIPIENT.NOT_RECIPIENT指定的 recipientId 不是该信封的签署人(或为抄送人)
ENVELOPE.INVALID_STATUS信封状态不允许签署(已完成、已作废、草稿等)
SIGNING.RECIPIENT_ALREADY_SIGNED该签署人已完成签署
SIGNING.RECIPIENT_DECLINED该签署人已拒签
SIGNING.CONSENT_REQUIRED该签署人尚未确认 ERSD 授权书,需先完成同意
AUTH.PIN_NOT_CONFIGURED该签署人未配置 Signing PIN
AUTH.PIN_INVALIDSigning PIN 不正确
AUTH.PIN_LOCKED连续输错 PIN 次数过多,已临时锁定
AUTH.CREDENTIAL_REQUIRED该 app 未开启明文豁免,须使用 JWE Credential
AUTH.CREDENTIAL_INVALID凭据无效(解密/绑定失败、已重放等)
AUTH.CREDENTIAL_EXPIRED凭据已过期(请校准客户端时钟后重试)
SIGNING.ENVELOPE_NOT_SIGNABLE信封当前不可签
SIGNING.RECIPIENT_NOT_SIGNABLE签署人当前不可签
INTERNAL_ERROR服务内部错误