苏心签开放接口文档

v1.0.15 | 专业的电子合同服务接口

1. 概述

1.1 文档说明

本文档描述了苏心签开放接口的使用方法和接口规范,帮助开发者快速集成苏心签的电子合同服务。

1.2 接口基础信息

  • 基础路径https://pc.suxin365.com/api/v1
  • 认证方式:Bearer Token 认证
  • 请求方法:GET/POST/DELETE
  • 响应格式:JSON
  • 字符编码:UTF-8

1.3 响应结构

所有接口返回统一的响应结构:

成功响应
JSON
{
  "success": true,
  "data": { /* 业务数据 */ }
}
失败响应
JSON
{
  "success": false,
  "code": "5001",
  "msg": "错误信息"
}

1.4 分页参数

涉及分页的接口支持以下参数:

  • page:页码,默认值 1
  • pageSize:每页数量,默认值 10
分页响应结构
JSON
{
  "success": true,
  "data": {
    "totalSize": 100,
    "results": [ /* 数据列表 */ ]
  }
}

2. 认证接口

2.1 获取访问令牌

  • 接口路径POST /auth/token
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:使用 API Key 获取访问令牌,用于后续接口调用
参数名 类型 必填 描述
appId String 应用ID
apiKey String API密钥
请求示例
JSON
{
  "appId": "app_test_1234567890",
  "apiKey": "sk_test_1234567890"
}

响应参数

参数名 类型 描述
accessToken String 访问令牌
expire Integer 令牌有效期(秒)
响应示例
JSON
{
  "success": true,
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expire": 3600
  }
}

2.2 使用令牌

  • 认证方式:在请求头中添加 Authorization: Bearer <token>
  • 令牌有效期:默认 3600 秒(1小时)
  • 错误示例
    • 缺少认证信息 - 缺少认证头
    • 认证方案无效 - 认证方案错误
    • 令牌无效或已过期 - 令牌无效或已过期

3. 合同管理

合同发起支持两种路径:

3.1 上传合同 PDF

  • 接口路径POST /contract/upload-template
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:上传合同 PDF 文件,返回 fileId§3.5 创建草稿使用;服务端会异步将 PDF 转为预览图片
  • 租户校验:租户 ID 取自 API Key 认证上下文;userId 须属于该租户

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求参数

参数名 类型 必填 描述
fileName String 文件名
fileContent String 文件内容(Base64编码)
fileType String 文件类型(预留字段)
userId String 用户ID
请求示例
JSON
{
  "fileName": "template.pdf",
  "fileContent": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+PgplbmRvYmoKNCAwIG9iago8PC9MZW5ndGggNTM1L0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nGNgYNgh4A/EYGVhZABkYAQwgWgDcIgDcQAZgYGPgBYH5AYGPoB2EAAKcAg==",
  "userId": "123456"
}

响应参数

参数名 类型 描述
fileId Long 文件ID
fileName String 文件名
fileType String 文件类型
fileUrl String 文件访问URL
响应示例
JSON
{
  "success": true,
  "data": {
    "fileId": 1,
    "fileName": "contract.pdf",
    "fileType": "application/pdf",
    "fileUrl": "https://example.com/...(服务端返回的模板文件下载完整 URL)"
  }
}

3.2 查询模板列表

  • 接口路径GET /contract/templates
  • 请求类型:无 JSON/表单请求体
  • 功能说明:查询当前租户下已启用(ACTIVE)的合同模板列表,用于展示可选模板及字段信息

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

响应参数

参数名 类型 描述
data Array 模板列表
data[].templateId Long 模板 ID
data[].name String 模板名称
data[].description String 模板描述
data[].category String 模板分类
data[].status String 模板状态
data[].fileObjectId Long 模板源文件 ID
data[].fileName String 模板源文件名
data[].fields String 模板字段 JSON,如 [{"key":"甲方名称","label":"甲方名称","required":true}]
data[].pageCount Integer 页数
data[].approvalFlowId Long 关联审批流 ID
data[].approvalFlowName String 关联审批流名称
data[].createdAt String 创建时间
响应示例
JSON
{
  "success": true,
  "data": [
    {
      "templateId": 1,
      "name": "劳动合同",
      "description": "标准劳动合同模板",
      "category": "人事",
      "status": "ACTIVE",
      "fileObjectId": 100,
      "fileName": "labor.docx",
      "fields": "[{\"key\":\"甲方名称\",\"label\":\"甲方名称\",\"required\":true}]",
      "pageCount": 3,
      "approvalFlowId": null,
      "approvalFlowName": null,
      "createdAt": "2026-05-01 10:00:00"
    }
  ]
}

3.3 查询模板详情

  • 接口路径GET /contract/templates/{templateId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:根据模板 ID 获取模板详情,含字段定义等信息

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
templateId Long 模板 ID

响应参数

§3.2 列表项结构相同,data 为单个模板对象。

响应示例
JSON
{
  "success": true,
  "data": {
    "templateId": 1,
    "name": "劳动合同",
    "description": "标准劳动合同模板",
    "category": "人事",
    "status": "ACTIVE",
    "fileObjectId": 100,
    "fileName": "labor.docx",
    "fields": "[{\"key\":\"甲方名称\",\"label\":\"甲方名称\",\"required\":true}]",
    "pageCount": 3,
    "createdAt": "2026-05-01 10:00:00"
  }
}

3.4 根据模板发起合同

  • 接口路径POST /contract/create-from-template
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:根据模板填充字段、生成 PDF,创建合同并自动发起签署(等价于创建合同 + 发起签署),合同状态为 PENDING(待签署)

典型流程:先调用 §3.2 / §3.3 获取模板及字段定义 → 填写 fieldValues 与签署方 → 调用本接口 → 使用 §3.8 获取签署链接引导用户签署。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求参数

参数名 类型 必填 描述
templateId Long 模板 ID
title String 合同标题,为空时使用模板名称
fieldValues Object 模板字段值,key 为字段标识(与模板 fieldskey 对应)
userId String 发起人用户 ID(须属于当前租户)
orgId Long 发起组织 ID
signers Array 签署方信息列表,结构同 §3.5 创建草稿
signOrderMode Integer 签署顺序模式:1-顺序签署,2-并行签署
expireTime Long 签署截止日期(毫秒时间戳)
请求示例
JSON
{
  "templateId": 1,
  "title": "张三劳动合同",
  "fieldValues": {
    "甲方名称": "某某科技有限公司",
    "乙方姓名": "张三",
    "入职日期": "2026-06-01"
  },
  "userId": "123456",
  "orgId": 1,
  "signOrderMode": 1,
  "signers": [
    {
      "type": "ENTERPRISE",
      "order": 1,
      "orgId": "1"
    },
    {
      "type": "PERSON",
      "order": 2,
      "userId": "789012"
    }
  ],
  "expireTime": 1793568000000
}

响应参数

参数名 类型 描述
contractId Long 合同 ID
status String 合同状态,发起成功后为 PENDING
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 123456,
    "status": "PENDING"
  }
}

3.5 创建合同草稿

  • 接口路径POST /contract/create
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:基于 §3.1 返回的 fileId 创建草稿合同(状态 DRAFT),保存签署方信息;后续须通过 §3.6 设计签署控件,再调用 §3.7 发起签署
  • 租户校验:租户 ID 取自 API Key;userIdfileId、签署方用户/组织均须属于该租户

若使用平台 Word 模板且无需设计页,请直接使用 §3.4 根据模板发起合同,一步进入 PENDING 状态。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求参数

参数名 类型 必填 描述
title String 合同标题
fileId Long 合同 PDF 文件 ID(§3.1 上传返回)
userId String 发起人用户 ID
orgId Long 发起组织 ID
signOrderMode Integer 签署顺序模式:1-顺序签署,2-并行签署
signers Array 签署方列表,见下表
expireTime Long 签署截止日期(毫秒时间戳)

signers[] 元素

参数名 类型 必填 描述
type String PERSON 个人;ENTERPRISECOMPANY 企业/个体户
order Integer 签署顺序,默认按数组顺序从 1 递增
userId String 个人必填 平台用户 ID
orgId String 企业必填 平台组织 ID
请求示例
JSON
{
  "title": "服务协议",
  "fileId": 1,
  "signOrderMode": 1,
  "signers": [
    {
      "type": "PERSON",
      "order": 1,
      "userId": "123456"
    },
    {
      "type": "ENTERPRISE",
      "order": 2,
      "orgId": "789012"
    }
  ],
  "expireTime": 1793568000000,
  "orgId": 1,
  "userId": "123456"
}

响应参数

参数名 类型 描述
contractId Long 合同 ID
title String 合同标题
status String 合同状态,创建成功为 DRAFT
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 123456,
    "title": "服务协议",
    "status": "DRAFT"
  }
}

3.6 获取设计合同页面

  • 接口路径GET /contract/design-page/{contractId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path 与 Query
  • 功能说明:获取合同设计页面的URL,用于设计合同

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
contractId Long 合同ID

查询参数

参数名 类型 必填 描述
userId Long 用户ID(userId和orgId必须提供一个)
orgId Long 组织ID(userId和orgId必须提供一个)

响应参数

参数名 类型 描述
contractId Long 合同ID
pcUrl String PC端设计页面URL
h5Url String H5端设计页面URL
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 1,
    "pcUrl": "https://example.com/open-contract/pc/design?token=abc123xyz",
    "h5Url": "https://example.com/open-contract/h5/design?token=abc123xyz"
  }
}

注意:URL中的token有效期为1小时,使用token可以调用/contract/get-contract-id接口获取真实的contractId和userId。

3.7 发起签署

  • 接口路径POST /contract/initiate-sign/{contractId}
  • 请求类型:JSON(Content-Type: application/json);Body 可为空或省略,按业务需要传参与默认一致
  • 功能说明:发起合同签署,会创建原文件的副本作为签署文件,保留原文件

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
contractId Long 合同ID

响应参数

参数名 类型 描述
contractId Long 合同ID
status String 合同状态
message String 操作信息
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 1,
    "status": "PENDING",
    "message": "发起签署成功"
  }
}

3.8 获取签署链接

  • 接口路径GET /contract/sign-url/{contractId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path 与 Query
  • 功能说明:获取合同签署链接,用于引导用户进行签署

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
contractId Long 合同ID

查询参数

参数名 类型 必填 描述
userId Long 用户ID(userId和orgId必须提供一个)
orgId Long 组织ID(userId和orgId必须提供一个)

响应参数

参数名 类型 描述
contractId Long 合同ID
pcUrl String PC端签署链接
h5Url String H5端签署链接
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 1,
    "pcUrl": "https://example.com/open-contract/pc/sign?token=abc123xyz",
    "h5Url": "https://example.com/open-contract/h5/sign?token=abc123xyz"
  }
}

注意:URL中的token有效期为1小时,使用token可以调用/contract/get-contract-id接口获取真实的contractId和userId。

3.9 获取合同预览地址

  • 接口路径GET /contract/preview-url/{contractId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path 与 Query
  • 功能说明:获取合同预览地址,用于查看合同内容

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
contractId Long 合同ID

查询参数

参数名 类型 必填 描述
userId Long 用户ID(userId和orgId必须提供一个)
orgId Long 组织ID(userId和orgId必须提供一个)

响应参数

参数名 类型 描述
contractId Long 合同ID
pcUrl String PC端预览链接
h5Url String H5端预览链接
响应示例
JSON
{
  "success": true,
  "data": {
    "contractId": 1,
    "pcUrl": "https://example.com/open-contract/pc/detail?token=abc123xyz",
    "h5Url": "https://example.com/open-contract/h5/detail?token=abc123xyz"
  }
}

注意:URL中的token有效期为1小时

3.10 查询组织合同列表

  • 接口路径GET /contract/list
  • 请求类型:无 JSON/表单请求体;参数见 URL Query
  • 功能说明:按组织 ID 分页查询合同列表(orgId 必填)

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
orgId Long 组织ID
page Integer 页码,默认1
pageSize Integer 每页数量,默认10
status String 合同状态

响应参数

参数名 类型 描述
totalSize Integer 总记录数
results Array 合同列表
results[].contractId Long 合同ID
results[].title String 合同标题
results[].status String 合同状态
results[].createdAt String 创建时间
响应示例
JSON
{
  "success": true,
  "data": {
    "totalSize": 100,
    "results": [
      {
        "contractId": 1,
        "title": "服务协议",
        "status": "DRAFT",
        "createdAt": "2026-04-19 10:00:00"
      }
    ]
  }
}

3.11 查询租户合同列表

  • 接口路径GET /contract/tenant-list
  • 请求类型:无 JSON/表单请求体;参数见 URL Query
  • 功能说明:分页查询当前租户下合同列表;orgId 可选,不传则返回租户下全部组织的合同

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
orgId Long 组织 ID,不传则查询租户下全部合同
page Integer 页码,默认 1
pageSize Integer 每页数量,默认 10
status String 合同状态,如 DRAFTPENDINGSIGNED

响应参数

参数名 类型 描述
totalSize Integer 总记录数
page Integer 当前页码
pageSize Integer 每页数量
results Array 合同列表,项结构同 §3.10
响应示例
JSON
{
  "success": true,
  "data": {
    "totalSize": 100,
    "page": 1,
    "pageSize": 10,
    "results": [
      {
        "contractId": 1,
        "title": "服务协议",
        "status": "PENDING",
        "createdAt": "2026-04-19 10:00:00"
      }
    ]
  }
}

3.12 发送短信验证码

  • 接口路径POST /contract/send-sms-code
  • 请求类型:表单(application/x-www-form-urlencoded)或 URL Query;参数名 mobile(与下列「查询参数」一致)
  • 功能说明:向指定手机号发送签署场景短信验证码,用于意愿认证(业务类型 SIGN)

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
mobile String 接收验证码的手机号

响应参数

参数名 类型 描述
data String 固定为 OK 表示已触发发送
响应示例
JSON
{
  "success": true,
  "data": "OK"
}

说明:发送频率、有效期等规则与系统内签署验证码策略一致;请勿频繁调用以免触发限流。

3.13 获取活体验证(人脸识别)

  • 接口路径POST /contract/face-recognition
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:根据姓名与身份证号发起 H5 活体认证,返回二维码链接与 token(需 Bearer 令牌,无需传递用户 ID)

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求体(JSON)

参数名 类型 必填 描述
realName String 真实姓名
idCard String 身份证号
isReturnUrl Boolean truedata.qrCodeUrl 直接为认证页 URL;否则为二维码图片地址
returnUrl String 认证完成后的跳转地址(未传时由服务端使用占位默认值)
请求示例
JSON
{
  "realName": "张三",
  "idCard": "320***********1234",
  "isReturnUrl": true,
  "returnUrl": "https://example.com/h5/sign/callback"
}

响应参数(data 对象)

参数名 类型 描述
qrCodeUrl String 二维码图片 URL 或认证页 URL(取决于 isReturnUrl
token String 本次活体会话 token,用于后续查询认证结果
响应示例
JSON
{
  "success": true,
  "data": {
    "qrCodeUrl": "https://...",
    "token": "xxxxxxxx"
  }
}

说明:返回的 token 用于后续签署等流程中的活体验证;服务端会将姓名、证件号与 token 短时关联缓存。开放接口中该 token 有效期为 12 小时(其他场景默认 30 分钟)。需在个人开户/实名前指定平台用户发起活体、并与该用户 ID 绑定时,使用 §5.5 POST /person/face-recognition(userId 可选);查询结果仍可用本节下一小节 §3.14§5.6(路径不同,参数与响应结构一致)。

3.14 根据 token 查询活体是否认证成功

  • 接口路径GET /contract/face-recognition/success
  • 请求类型:无 JSON/表单请求体;参数 token 见 URL Query
  • 功能说明:根据活体 token 查询认证结果,返回是否通过与是否计费等信息

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
token String 活体 token(POST /contract/face-recognition 返回的 data.token

响应参数

参数名 类型 描述
data Object 活体状态对象
data.passed Boolean 是否通过:true 通过;false 未通过/未完成
data.charged Boolean 是否计费:按返回 code 判断(R101、R102、R214、R215、R216、R218、R219、R221、R233、R234、R235 视为计费)
data.code String 认证结果码(用于判断通过与计费)
data.codeDesc String 结果描述
响应示例
JSON
{
  "success": true,
  "data": {
    "passed": true,
    "charged": true,
    "code": "R102",
    "codeDesc": "认证成功"
  }
}

3.15 根据 token 查询活体token是否过期

  • 接口路径GET /contract/face-recognition/check-token
  • 请求类型:无 JSON/表单请求体;参数 token 见 URL Query
  • 功能说明:根据活体 token 查询 token 是否在 Redis 中存在(即是否过期),返回剩余有效期等信息。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
token String 活体 token(POST /contract/face-recognition 返回的 data.token

响应参数

参数名 类型 描述
data Object Token 有效性信息对象
data.valid Boolean token 是否有效:true 未过期;false 已过期或不存在
data.remainingSeconds Long 剩余有效期(秒)。-2 表示 token 不存在;>0 为剩余秒数;null 表示查询失败
data.message String 描述信息,如“活体token有效,剩余43185秒”或“活体token已过期或不存在”
响应示例(token 有效)
JSON
{
  "success": true,
  "message": "token有效",
  "data": {
    "valid": true,
    "remainingSeconds": 43185,
    "message": "活体token有效,剩余43185秒"
  }
}
响应示例(token 已过期)
JSON
{
  "success": true,
  "message": "token已过期或不存在",
  "data": {
    "valid": false,
    "remainingSeconds": -2,
    "message": "活体token已过期或不存在"
  }
}

使用场景:在调用 §3.16 开放签署 PDF 之前,可先通过本接口检查 token 是否仍然有效,避免使用过期 token 发起签署请求。注意:本接口仅检查 token 是否存在,不验证活体认证是否通过(请使用 §3.14 查询认证结果)。

3.16 开放签署 PDF(关键词落章)

  • 接口路径POST /contract/sign-pdf
  • 请求类型:JSON(Content-Type: application/json
  • 能力:上传待签 PDF(fileContentBase64),在文档内用 keyword 定位落章点,经意愿校验后在该位置落章,返回已签 PDF 的 Base64。本接口不持久化合同主数据。须传 contractNo 作业务与存证编号;已配链时可回 openSignEvidenceIdtransactionHash。签章区域固定 126×126verifyType 未传时默认 1,2(需按实参传 faceTokensmsCode)。

联调前

  • 意愿含短信verifyType2)时:先调 POST /contract/send-sms-code,业务类型 SIGN,再向本接口传 smsCode
  • 意愿含活体(含 1)时:先调 POST /contract/face-recognitionfaceToken,再向本接口传入。
  • 参与人为新个人、或三要素在平台创建新企业时,须按下文「企业新建」对活体、法人三要素的约束准备参数。

印模用名

当次落章在平台上与哪一枚印匹配,由「印模用名」决定:只根据请求体你填的字段推导,不会用库内企业名自动顶替。

签署方 当次印模用名
企业 ENTERPRISE / COMPANY enterpriseName 非空时取其值;否则取 participantName
个人 PERSONAL participantName

仅会选用平台印章「名称」与当次印模用名逐字相同的章(详见「选章与 sealId」)。participantMobile 须为解析到签署人平台账号的绑定手机。通常 participantName 填经办人真名,并与账号登记姓名一致;若将 participantName 填为企业/印模用名(与账号名不同),则须该账号在本企业下或本人名下存在同「名称」的可用章(本企业章、本人章或用印授权,与 §6.5 同源数据),否则不通过。

按参与方准备参数

个人participantType=PERSONAL):以 participantMobile 定位用户;participantName 与实名、章面一致。含 1 时传 faceToken,含 2 时传 smsCode。无个人账号时可由当次活体会话在平台完成开户。

企业:目标已存在且可唯一定位:企业名/统一社会信用代码在平台能唯一条命中已认证企业,或你直接传 participantOrgId(须已认证)。participantUserId 一般可省略,以 participantMobile该目标企业下已加入用户中找经办。若多人在同机号,请补充 enterpriseNameparticipantName 等由服务端消歧,仍不唯一时可再传 participantUserId。仅按名命中多家已认证企业时,须传 participantOrgId 指定其一。

多数场景只传 participantMobile 与企业相关字段即可不必在本地存 sealIdparticipantUserId。确需多枚章中强指定时 sealId 可选,且该章「名称」须与当次印模用名一致(见下表 sealId 行)。用印授权由服务端在 §6.5 同数据上匹配,一般不需要为签署先调授权查询接口(§6.5.4 为运营/对账可选)。

企业:三要素在平台新建:当名称/码尚不能唯一定位已认证企业时,verifyType 须含 1 并传 faceToken。请求带 unifiedSocialCreditCodelegalPersonNamelegalPersonIdCard 等,以 enterpriseName / participantName 声明拟盖的企业章/印模用名(企业盖章时 participantName 可填企业名,不必同法人体检名)。首次在平台创建该企业时,法人姓名/证件号须与当前 faceToken 活体会话中实名、证件号一致。

各参与方通用:若 verifyType1,且已存在与活体同证件的个人档案且其预留手机已填写,该号码须与 participantMobile 一致,否则拒签。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求体(JSON)主要字段

参数名 类型 必填 描述
contractNo String 业务合同编号;用于存证与蚂蚁链摘要,建议接入方保证在自身业务域内唯一
fileContentBase64 String PDF 文件 Base64(可含 data: 前缀)
fileType String 目前仅支持 pdf
keyword String 用于定位签章位置的关键词
keywordOccurrenceIndex Integer 第几次出现(从 0 开始);默认 0
sealId Long 一般可不传。不传时,仅在 「名称」与当次印模用名逐字相同 的候选项中落章;同一名称多枚时优先选默认章isDefault=true,详见「印章自动选用与用印授权」)。须指定某一枚时sealId:该章的「名称」须与当次印模用名一致,否则报错;若名称一致但非本企业组织下章、且对签署人尚无用印授权,将不采用该 id,改在同印模用名候选项中按自动选章(仍优先默认章)。章属本企业组织、或已获用印授权时,使用所传 sealId 落章。
verifyType String 1 仅活体,2 仅短信,1,2 两者;不传默认 1,2
faceToken String 条件 验证类型含 1 或(个人且用户不存在,或企业三要素新建需开户)时必传;活体流程返回的 token。含 1 时,若已有个人实名档案与活体姓名、证件号一致,其预留手机号须与 participantMobile 一致
smsCode String 条件 验证类型含 2 时必传;与 participantMobile 对应,业务类型 SIGN
participantName String 参与人相关姓名:个人须与实名人名、个人章印模、活体姓名等一致;企业可填经办人姓名,与解析账号登记姓名须一致,或与同机号/账号在当次可用人名/同名企业章的核对规则见上文「印模用名与参与人关联」;亦可将本字段填为企业/印模用名(与 enterpriseName 二选一/并存关系见 enterpriseName 说明),此时以印模、授权为准
participantMobile String 参与人手机号,须为本次签署在平台中解析到账号所绑定的手机,并与短信/活体核对目标一致
participantType String PERSONAL 个人;ENTERPRISECOMPANY 企业
participantUserId Long 条件 企业已存在且已认证时可省略:用 participantMobile 在目标企业组织下解析经办用户;解析失败或多解时再传本字段。企业将按名称新建(三要素)时可省略,须 verifyType1 且传 faceToken。个人可选,用于多账号时指定
participantOrgId Long 企业组织实体 ID;须为平台内已认证企业。不传则按企业名称(及可选统一社会信用代码)全局匹配;多条命中时必填本字段
enterpriseName String 条件 企业参与时建议填写:公章/印模上主体名称,亦作为印模用名优先来源。无 participantOrgId 时用于匹配/创建企业。未传时印模用名退化为 participantName,由接入方保证与拟盖印章「名称」一致;二者语义区分:本字段偏企业全称/公章名participantName 常填经办人,也可在对接上改填企业名(与上文「印模用名与参与人关联」一起读)
unifiedSocialCreditCode String 条件 统一社会信用代码;企业不在系统中与三要素一并必填
legalPersonName String 条件 法人姓名;企业新建时必填。首次建企verifyType 含活体时,须与 faceToken 对应活体会话中的姓名一致
legalPersonIdCard String 条件 法人身份证号;企业新建时必填。首次建企且含活体时,须与 faceToken 对应活体会话中的证件号一致
offsetX / offsetY Float 相对关键词命中点的偏移(单位:像素)
sealWidth / sealHeight Float 印章宽度/高度(单位:点,pt)。默认值:126pt(约 44.4mm);最小值:28.4pt(约 10mm)。不传时使用默认值,保持原有尺寸不变。适用于需要自定义印章大小的场景
destroyFaceTokenAfterUse Boolean 活体token是否用完即销毁(默认 false)。true: 签署完成后立即销毁活体token;false: 活体token保留至自然过期(12小时或30分钟)。适用于一次性签署场景,提升安全性

选章与用印授权

在已得到当次印模用名(见上表)且已解析出签署人(通常由 participantMobile 在企业内定位)的前提下,只在平台印章「名称」与印模用名逐字相同的集合中选章;不要求必传 sealId。显式传 sealId 时,该章「名称」须仍与印模用名一致。无可用同名章或未获授权时签署失败。

① 本企业组织下:名称与印模用名相同的多枚中优先默认章isDefault=true),否则按服务端规则取定。个人组织同。

② 本人制章(制章人为当前签署人):同名多枚时优先默认章

③ 用印授权(§6.5 同源、未撤销):仍须名与印模用名一致,多枚时优先默认。§6.5.4 列表为运营/对账用,非签署必调。

响应参数(data)

参数名 类型 描述
contractNo String 回显请求中的业务合同编号
signedFileBase64 String 签署后的 PDF Base64
signerUserId Long 签署人用户 ID
sealId Long 实际落章使用的印章 ID
orgEntityId Long 仅当签署方为企业ENTERPRISE/COMPANY)时返回:落章所属企业组织实体 ID;个人签署不返回该字段(值为空)
openSignEvidenceId Long 本笔开放签署的存证业务标识;蚂蚁链未配置或上链失败时可能为空
transactionHash String 蚂蚁链交易哈希;未上链时为空

补充:三要素新建企业通过后,由服务端创建企业及默认章;首次建企时法人姓名、证件号须与当次 faceToken 活体会话一致。个人新用户须先完成 POST /contract/face-recognition。含短信意愿时须先 POST /contract/send-sms-code 再传 smsCode(同「联调前」)。

4. 企业账号管理

含企业创建、单条查询、按三要素查企业与制章人信息,以及 4.4 用户加入企业POST /org/join,将已有平台用户拉入已存在的企业/个体户;可用于变更企业章所有人前先完成入企,见 6.6)。

4.1 添加企业账号

  • 接口路径POST /org/add
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:添加企业账号,用于合同签署

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求参数

参数名 类型 必填 描述
userId Long 用户ID
name String 企业名称
unifiedCode String 统一社会信用代码
legalName String 法定代表人姓名
legalIdCard String 法定代表人身份证号
请求示例
JSON
{
  "userId": 1,
  "name": "测试公司",
  "unifiedCode": "91110000MA12345678",
  "legalName": "张三",
  "legalIdCard": "110101199001011234"
}

响应参数

参数名 类型 描述
orgId Long 组织ID
name String 企业名称
unifiedCode String 统一社会信用代码
certifyStatus String 认证状态
legalName String 法人姓名
响应示例
JSON
{
  "success": true,
  "data": {
    "orgId": 1,
    "name": "测试公司",
    "unifiedCode": "91110000MA12345678",
    "certifyStatus": "UNVERIFIED",
    "legalName": "张三"
  }
}

4.2 查询企业账号

  • 接口路径GET /org/get/{orgId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:查询企业账号详情

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
orgId Long 组织ID

响应参数

参数名 类型 描述
orgId Long 组织ID
name String 企业名称
unifiedCode String 统一社会信用代码
certifyStatus String 认证状态
legalName String 法人姓名
响应示例
JSON
{
  "success": true,
  "data": {
    "orgId": 1,
    "name": "测试公司",
    "unifiedCode": "91110000MA12345678",
    "certifyStatus": "UNVERIFIED",
    "legalName": "张三"
  }
}

4.3 按企业三要素查询企业与印章

  • 接口路径POST /org/lookup-identity
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明调用与控制台「企业法人认证」POST /auth/enterprise/legal-person 同源的创瑞企业三要素核验(企名+统一社会信用代码+法人姓名),通过后再在平台内查组织与印章。在全部未删除的 COMPANY / SELF_EMPLOYED 中按企名+统一社会信用代码匹配;每条印章含制章人用户 ID制章人手机号。多命中时取组织 id 最大的一条。响应中 legalName 为经核验的法人姓名;若与平台主账号登记略有不一致,仅记日志不拦截。

请求体(JSON)

参数名 类型 必填 描述
name String 企业名称
unifiedCode String 统一社会信用代码
legalName String 法人姓名

响应 data 主要字段

参数名 类型 描述
orgId / name / unifiedCode / certifyStatus 企业组织标识、名称、统一码、认证状态(如 VERIFIED / UNVERIFIED
legalName String 与三要素通过校验的登记用户姓名
seals Array 该组织下印章列表。元素含 sealIdnameisDefaultsealCreatedByUserIdsealCreatedByUserMobile
请求示例
JSON
{
  "name": "某科技公司",
  "unifiedCode": "91110000MA12345678",
  "legalName": "张三"
}
响应示例
JSON
{
  "success": true,
  "data": {
    "orgId": 1001,
    "name": "某科技公司",
    "unifiedCode": "91110000MA12345678",
    "certifyStatus": "VERIFIED",
    "legalName": "张三",
    "seals": [
      {
        "sealId": 1,
        "name": "某科技公司",
        "isDefault": true,
        "sealCreatedByUserId": 2,
        "sealCreatedByUserMobile": "13800138000"
      }
    ]
  }
}

4.4 用户加入企业

  • 接口路径POST /org/join
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:将指定平台用户加入指定企业/个体户组织。组织类型须为 COMPANYSELF_EMPLOYED;开放接口直接加入,关系状态为 ACTIVE(控制台「加入企业」需企业审核,见控制台说明)。若用户已在该组织中则报错。常用于变更企业章持有人前先将新所有人加入目标企业(见 6.6)。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求体(JSON)

参数名 类型 必填 描述
userId Long 要加入组织的平台用户 ID
orgId Long 企业/个体户组织实体 ID(OrgEntity.id

响应

成功时 data入企/成员关系对象(含 idorgEntityIduserIdstatus(开放接口为 ACTIVE)、joinTime 及可能带 orgName 等扩展字段)。

请求示例
JSON
{
  "userId": 100,
  "orgId": 2001
}
响应示例
JSON
{
  "success": true,
  "data": {
    "id": 3001,
    "orgEntityId": 2001,
    "userId": 100,
    "status": "ACTIVE",
    "joinTime": "2026-04-26T10:00:00"
  }
}
  • 接口路径POST /contract/change-legal-person
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:通过企业名称和统一社会信用代码定位企业,将企业的法人变更为新指定的用户。若新法人不存在,则自动创建新租户和用户。注意:变更后企业将归属到新法人的账号下,企业下所有印章也会同步迁移。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求体(JSON)

参数名 类型 必填 描述
enterpriseName String 企业名称,用于定位企业
unifiedSocialCreditCode String 统一社会信用代码,用于精确定位企业(必传)
newLegalName String 新法人姓名
newLegalIdCard String 新法人身份证号
faceToken String 活体认证 token,用于验证新法人身份。需先调用 §3.13 获取
contactPhone String 联系电话,用于创建新用户和更新企业联系方式(必传)
请求示例
JSON
{
  "enterpriseName": "测试有限公司",
  "unifiedSocialCreditCode": "91110000MA12345678",
  "newLegalName": "李四",
  "newLegalIdCard": "320***********5678",
  "faceToken": "xyz789abc",
  "contactPhone": "13800138000"
}

响应参数

参数名 类型 描述
data Object 变更结果对象
data.orgId Long 企业组织ID
data.newLegalUserId Long 新法人用户ID
data.sealCount Integer 已迁移的印章数量
响应示例
JSON
{
  "success": true,
  "message": "法人变更成功",
  "data": {
    "orgId": 123456,
    "newLegalUserId": 987654321,
    "sealCount": 2
  }
}

业务规则

  • 企业查询:使用企业名称 + 统一社会信用代码进行精确匹配,确保定位到唯一的企业
  • 新法人处理
    • 若新法人已存在:直接使用该用户作为企业新法人
    • 若新法人不存在:自动创建新用户并关联为企业法人
  • 企业归属迁移
    • 企业将迁移到新法人的账号下
    • 企业下所有印章也会跟随企业同步迁移
  • 活体验证:必须提供有效的活体 token,用于验证新法人身份真实性
  • 审计记录:系统会自动记录法人变更信息,包括变更时间等

注意事项

  • 变更后企业归属到新法人的账号下,原法人不再拥有该企业
  • 企业下的所有印章也会跟随企业迁移到新法人账号
  • 建议变更前确认新法人已完成实名认证
  • 联系电话将用于创建新用户(如需要)和更新企业联系方式

5. 个人账号管理

5.1 添加个人账号

  • 接口路径POST /person/add
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:添加个人账号,用于合同签署

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求参数

参数名 类型 必填 描述
name String 姓名
mobile String 手机号
请求示例
JSON
{
  "name": "张三",
  "mobile": "13800138000"
}

响应参数

参数名 类型 描述
userId Long 用户ID
name String 姓名
mobile String 手机号
realNameStatus String 实名状态
响应示例
JSON
{
  "success": true,
  "data": {
    "userId": 1,
    "name": "张三",
    "mobile": "13800138000",
    "realNameStatus": "UNVERIFIED"
  }
}

5.2 查询个人账号

  • 接口路径GET /person/get/{userId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:查询个人账号详情

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
userId Long 用户ID

响应参数

参数名 类型 描述
userId Long 用户ID
name String 姓名
mobile String 手机号
realNameStatus String 实名状态
响应示例
JSON
{
  "success": true,
  "data": {
    "userId": 1,
    "name": "张三",
    "mobile": "13800138000",
    "realNameStatus": "UNVERIFIED"
  }
}

5.3 按手机号查询姓名与身份证

  • 接口路径POST /person/lookup-by-mobile
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:根据手机号查询平台用户姓名与身份证号。与 §5.9 按实名查用户与章 互为反向查询:本接口由手机查实名,§5.9 由姓名+身份证查用户与印章。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求参数

参数名 类型 必填 描述
mobile String 手机号

响应参数

参数名 类型 描述
userId Long 用户 ID
mobile String 手机号
realName String 姓名;已完成个人实名时取个人组织姓名,否则取用户表姓名
idNumber String 身份证号;用户已完成个人实名/制章时返回,未实名时为空
请求示例
JSON
{
  "mobile": "13800138000"
}
响应示例
JSON
{
  "success": true,
  "data": {
    "userId": 123456,
    "mobile": "13800138000",
    "realName": "张三",
    "idNumber": "110101199001011234"
  }
}
业务说明
  • 手机号在平台内唯一匹配到一名用户时返回结果
  • 若该手机号对应多个用户,接口报错,请改用 userId§5.9 按姓名+身份证查询
  • 若手机号未注册,返回「未找到该手机号对应的用户」

5.4 账号注销

  • 接口路径DELETE /person/delete/{userId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:注销个人账号

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
userId String 用户ID

响应参数

参数名 类型 描述
deleted Boolean 是否注销成功
响应示例
JSON
{
  "success": true,
  "data": {
    "deleted": true
  }
}

5.5 获取个人活体验证(人脸识别)

  • 接口路径POST /person/face-recognition
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:与 §3.13 POST /contract/face-recognition 同源(姓名、身份证号发起 H5 活体,返回二维码或认证页 URL 与 token)。userId 为可选参数:传递 userId 时进行系统用户实名认证;不传 userId 时仅进行活体验证。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求体(JSON)

参数名 类型 必填 描述
userId Long 平台个人用户 ID(传递时进行系统用户实名认证,不传时仅活体验证)
realName String 真实姓名
idCard String 身份证号
isReturnUrl Boolean truedata.qrCodeUrl 直接为认证页 URL;否则为二维码图片地址
returnUrl String 认证完成后的跳转地址(未传时由服务端使用占位默认值)
请求示例(不传 userId)
HTTP
POST /person/face-recognition
Content-Type: application/json

{
  "realName": "张三",
  "idCard": "320***********1234"
}
请求示例(传递 userId)
HTTP
POST /person/face-recognition
Content-Type: application/json

{
  "userId": 123,
  "realName": "张三",
  "idCard": "320***********1234",
  "isReturnUrl": true,
  "returnUrl": "https://example.com/h5/callback"
}

响应参数(data 对象)

§3.13 相同:qrCodeUrltoken

参数名 类型 描述
qrCodeUrl String 二维码图片 URL 或认证页 URL(取决于 isReturnUrl
token String 本次活体会话 token,用于 §5.6§3.14 查询结果
响应示例
JSON
{
  "success": true,
  "data": {
    "qrCodeUrl": "https://...",
    "token": "xxxxxxxx"
  }
}
业务说明
  • userId 为可选参数:不传 userId 时,系统会自动将 requestNotice 设为 false(不发送通知)
  • 传递 userId 时:进行系统用户实名认证,requestNotice 默认为 true,会发送活体验证结果通知
  • 不传 userId 时:仅进行活体验证,不与系统用户绑定
  • 返回的 token 有效期为 12 小时,用于后续签署等流程中的活体验证

5.6 根据 token 查询个人侧活体是否认证成功

  • 接口路径GET /person/face-recognition/success
  • 请求类型:无 JSON/表单请求体;参数 token 见 URL Query
  • 功能说明:与 §3.14 GET /contract/face-recognition/success 一致,仅路径前缀为 /person;根据活体 token 返回是否通过、是否计费及结果码等。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
token String 活体 token(POST /person/face-recognition/{userId} 或合同侧活体接口返回的 data.token

响应参数

§3.14 相同:data.passeddata.chargeddata.codedata.codeDesc

参数名 类型 描述
data Object 活体状态对象
data.passed Boolean 是否通过:true 通过;false 未通过/未完成
data.charged Boolean 是否计费:按返回 code 判断(与 §3.14 所列计费码一致)
data.code String 认证结果码(用于判断通过与计费)
data.codeDesc String 结果描述
响应示例
JSON
{
  "success": true,
  "data": {
    "passed": true,
    "charged": true,
    "code": "R102",
    "codeDesc": "认证成功"
  }
}

5.7 运营商三要素验证

  • 接口路径POST /person/three-factor-verification
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:验证姓名、身份证号、手机号三要素是否匹配。仅返回验证结果,不进行用户创建、组织创建等额外操作。适用于外部系统身份预验证。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>
Content-Type String application/json

请求体(JSON)

参数名 类型 必填 描述
realName String 真实姓名
idCard String 身份证号
phone String 手机号
请求示例
JSON
{
  "realName": "张三",
  "idCard": "320***********1234",
  "phone": "13800138000"
}

响应参数

参数名 类型 描述
data Object 验证结果对象
data.verified Boolean 是否验证通过:true 三要素一致;false 不一致或验证失败
data.charged Boolean 是否计费:true 计费;false 不计费
data.code String 状态码(详见下方状态码说明)
data.message String 验证结果描述或错误原因

状态码说明

状态码 含义 是否计费
1 手机三要素一致 ✅ 是
2 手机三要素不一致 ✅ 是
3 请求参数错误 ❌ 否
10001 查询无结果 ❌ 否
10002 授权不通过 ❌ 否
10003 白名单不通过 ❌ 否
10004 余额不足 ❌ 否
10005 无效的证件号 ❌ 否
20000 系统异常 ❌ 否
20001 参数错误 ❌ 否
20002 参数映射异常 ❌ 否
20003 运营商无可用供应商 ❌ 否
20004 无效的签名算法 ❌ 否
20005 模板未找到 ❌ 否
响应示例(验证通过)
JSON
{
  "success": true,
  "message": "三要素验证通过",
  "data": {
    "verified": true,
    "charged": true,
    "code": "1",
    "message": "手机三要素一致"
  }
}
响应示例(验证失败但计费)
JSON
{
  "success": true,
  "message": "三要素验证失败",
  "data": {
    "verified": false,
    "charged": true,
    "code": "2",
    "message": "手机三要素不一致"
  }
}
响应示例(不计费错误)
JSON
{
  "success": true,
  "message": "三要素验证失败",
  "data": {
    "verified": false,
    "charged": false,
    "code": "10004",
    "message": "余额不足"
  }
}

注意:本接口仅进行验证,不会创建用户、组织或印章,也不会发送通知。如需完成实名认证并创建个人账号,请使用其他接口。

5.8 获取独立认证页面

  • 接口路径POST /person/certify-page
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:获取个人账号的独立认证页面链接

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求参数

参数名 类型 必填 描述
userId Long 用户ID
notifyUrl String 实名认证完成回调推送地址
redirectUrl String 实名认证完成后跳转地址

响应参数

参数名 类型 描述
h5Url String 实名链接(H5)
pcUrl String 实名链接(PC)
userId Long 用户ID
响应示例
JSON
{
  "success": true,
  "data": {
    "h5Url": "https://example.com/certify/h5/123?token=abcdef123456¬ifyUrl=xxx&redirectUrl=yyy",
    "pcUrl": "https://example.com/certify/pc/123?token=abcdef123456¬ifyUrl=xxx&redirectUrl=yyy",
    "userId": 123
  }
}

5.9 按姓名、身份证号查询用户与可用印章

  • 接口路径POST /person/lookup-identity
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:在平台内、访问令牌可访问范围下,按个人实名(姓名+身份证号)匹配个人组织,返回解析到的用户 userIdmobile,以及该用户下全部可用印章(含自有与经用印授权、去重后按 sealId 排序)。sealsrelationType 区分 OWN(本人/自有)与 AUTHORIZED(授权使用)。每条印章补充所属组织(个人章/企业章)及制章人绑定手机、身份证号;另返回该用户已加入的绑定企业列表(boundEnterprises,ACTIVE 关系,含 COMPANY / SELF_EMPLOYED)。

请求体(JSON)

参数名 类型 必填 描述
realName String 真实姓名
idNumber String 身份证号

响应 data 主要字段

参数名 类型 描述
userId / mobile Long / String 匹配到的平台用户与绑定手机
boundEnterprises Array 用户已加入/绑定的企业组织(ACTIVE)。元素含 orgIdnameunifiedCodeentityTypeCOMPANY / SELF_EMPLOYED
seals Array 可用印章列表。元素含 sealIdnameisDefaultrelationTypesealOrgIdsealOrgTypesealOrgNamesealOrgIdNumber(个人组织为身份证号,企业组织为统一社会信用代码)、sealCreatedByUserIdsealCreatedByUserMobilesealCreatedByUserIdNumber(制章人身份证号,取自其个人实名组织)
请求示例
JSON
{
  "realName": "张三",
  "idNumber": "110101199001011234"
}
响应示例
JSON
{
  "success": true,
  "data": {
    "userId": 1,
    "mobile": "13800138000",
    "boundEnterprises": [
      {
        "orgId": 100,
        "name": "某科技公司",
        "unifiedCode": "91110000MA12345678",
        "entityType": "COMPANY"
      }
    ],
    "seals": [
      {
        "sealId": 10,
        "name": "张三",
        "isDefault": true,
        "relationType": "OWN",
        "sealOrgId": 50,
        "sealOrgType": "PERSONAL",
        "sealOrgName": "张三",
        "sealOrgIdNumber": "110101199001011234",
        "sealCreatedByUserId": 1,
        "sealCreatedByUserMobile": "13800138000",
        "sealCreatedByUserIdNumber": "110101199001011234"
      }
    ]
  }
}

5.10 通过验证码修改手机号

  • 接口路径POST /person/change-mobile-by-sms
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:通过原手机号和新手机号的验证码修改手机号。需要分别发送原手机号和新手机号的验证码。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求体(JSON)

参数名 类型 必填 描述
oldMobile String 原手机号(通过原手机号自动定位用户)
oldCode String 原手机号验证码(场景码:CHANGE_MOBILE_OLD)
newMobile String 新手机号
newCode String 新手机号验证码(场景码:CHANGE_MOBILE_NEW)
请求示例
JSON
{
  "oldMobile": "13800138000",
  "oldCode": "123456",
  "newMobile": "13900139000",
  "newCode": "654321"
}
响应示例
JSON
{
  "success": true,
  "data": "手机号修改成功"
}
业务说明
  • 需要先调用短信接口发送原手机号验证码(场景码:CHANGE_MOBILE_OLD
  • 需要先调用短信接口发送新手机号验证码(场景码:CHANGE_MOBILE_NEW
  • 修改成功后会自动同步更新 tenant 表和 orgEntity 表的联系电话
  • 新手机号不能已被其他用户使用

5.11 通过活体认证修改手机号

  • 接口路径POST /person/change-mobile-by-face
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:通过姓名、身份证号匹配并验证活体认证后修改手机号。适用于原手机号不可用的场景。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求体(JSON)

参数名 类型 必填 描述
userId Long 用户ID(当姓名+身份证号匹配到多个用户时必填)
realName String 真实姓名
idCard String 身份证号
faceToken String 活体认证token(通过活体验证接口获取)
newMobile String 新手机号
请求示例(单个用户匹配)
JSON
{
  "realName": "张三",
  "idCard": "110101199001011234",
  "faceToken": "face_token_xxx",
  "newMobile": "13900139000"
}
请求示例(多个用户匹配)
JSON
{
  "userId": 123456,
  "realName": "张三",
  "idCard": "110101199001011234",
  "faceToken": "face_token_xxx",
  "newMobile": "13900139000"
}
响应示例
JSON
{
  "success": true,
  "data": "手机号修改成功"
}
业务说明
  • 需要先调用活体验证接口(/person/face-recognition)获取 faceToken
  • 系统会根据姓名和身份证号自动匹配用户
  • 当姓名+身份证号匹配到多个用户时,必须传递 userId 参数指定具体用户
  • 验证活体认证状态必须为通过(passed = true)
  • 新手机号不能已被其他用户使用
  • 活体 token 有效期通常为 1 小时,请及时使用

6. 印章管理

6.1 添加印章

  • 接口路径POST /seal/add
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:添加印章,用于合同签署。无需上传印章图片,系统会自动生成。

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

请求参数

参数名 类型 必填 描述
name String 印章名称
type Integer 印章类型(1-个人章,2-企业章)
orgId Long 所属组织ID(企业章时必填)
userId Long 制章操作人/持有人用户ID;用于确定 §6.5 印章授权短信的接收人(该用户绑定手机)。是否必填以接口校验为准
sealShape Integer 签章形状(0-圆形,1-椭圆,默认0,仅企业章有效)
isDefault Integer 是否设置为默认印章(0-否,1-是,默认0)
请求示例(个人章)
JSON
{
  "name": "张三印章",
  "type": 1,
  "userId": 1,
  "isDefault": 1
}
请求示例(企业章-圆形)
JSON
{
  "name": "测试公司公章",
  "type": 2,
  "orgId": 1,
  "sealShape": 0,
  "isDefault": 1
}
请求示例(企业章-椭圆)
JSON
{
  "name": "测试公司合同章",
  "type": 2,
  "orgId": 1,
  "sealShape": 1,
  "isDefault": 0
}

响应参数

参数名 类型 描述
sealId Long 印章ID
name String 印章名称
type Integer 印章类型(1-个人章,2-企业章)
userId Long 用户ID(个人章)
orgId Long 组织ID(企业章)
sealShape Integer 签章形状(0-圆形,1-椭圆)
isDefault Boolean 是否默认印章
status String 印章状态
响应示例
JSON
{
  "success": true,
  "data": {
    "sealId": 1,
    "name": "张三印章",
    "type": 1,
    "userId": 1,
    "orgId": null,
    "sealShape": 0,
    "isDefault": true,
    "status": "ACTIVE"
  }
}

6.2 上传印章图片

  • 接口路径POST /v1/seal/upload-image
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:上传图片生成印章。支持个人章和企业章,系统使用固定尺寸(个人章 300×150px,企业章 210×210px),无需传递印章大小参数。

请求头

请求头 类型 必填 描述
Authorization String Bearer <accessToken>

请求参数

参数名 类型 必填 描述
userId Long 用户ID(印章所属用户)
imageBase64 String 图片 Base64 格式(可包含 data:image/xxx;base64, 前缀)。图片大小不能超过 2MB
name String 印章名称
type Integer 印章类型:1=个人章,2=企业章
orgId Long 条件 组织ID(企业章时必填)
isDefault Integer 是否设置为默认印章:0=否,1=是,默认 0
请求示例(个人章)
JSON
{
  "userId": 123456,
  "imageBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "name": "张三的个人章",
  "type": 1,
  "isDefault": 0
}
请求示例(企业章-设为默认)
JSON
{
  "userId": 123456,
  "imageBase64": "iVBORw0KGgoAAAANSUhEUgAA...",
  "name": "某某科技有限公司",
  "type": 2,
  "orgId": 789012,
  "isDefault": 1
}

响应参数

参数名 类型 描述
sealId Long 印章ID
name String 印章名称
type Integer 印章类型(1-个人章,2-企业章)
userId Long 用户ID
orgId Long 组织ID(企业章)
isDefault Boolean 是否默认印章
响应示例
JSON
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "sealId": 345678,
    "name": "某某科技有限公司",
    "type": 2,
    "userId": 123456,
    "orgId": 789012,
    "isDefault": true
  }
}
注意事项
  • 图片大小限制:图片不能超过 2MB
  • 印章类型校验:type 必须为 1(个人章)或 2(企业章)
  • 组织ID要求:企业章(type=2)时必须传递 orgId
  • 企业章权限校验:只有企业的创建者才能为企业创建印章。如果用户不是企业创建者,将返回错误:“只有企业创建者才能为企业创建印章”
  • 默认印章互斥:同一租户、同一组织下只能有一个默认印章。设置新默认印章时,会自动取消其他印章的默认状态
  • 印章样式:个人章使用矩形样式(rectangle),企业章使用圆形样式(circle-enterprise)

6.3 设置默认印章

  • 接口路径POST /seal/set-default/{sealId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:设置默认印章,用于自动签署

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
sealId String 印章ID

响应参数

参数名 类型 描述
set Boolean 是否设置成功
响应示例
JSON
{
  "success": true,
  "data": {
    "set": true
  }
}

6.3 查询印章详情

  • 接口路径GET /seal/get/{sealId}
  • 请求类型:无 JSON/表单请求体;参数见 URL Path
  • 功能说明:查询印章详情

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

路径参数

参数名 类型 必填 描述
sealId Long 印章ID

响应参数

参数名 类型 描述
sealId Long 印章ID
name String 印章名称
type Integer 印章类型(1-个人章,2-企业章)
userId Long 用户ID(个人章)
orgId Long 组织ID(企业章)
sealShape Integer 签章形状(0-圆形,1-椭圆)
isDefault Boolean 是否默认印章
status String 印章状态
createdAt String 创建时间
响应示例
JSON
{
  "success": true,
  "data": {
    "sealId": 1,
    "name": "个人印章",
    "type": 1,
    "userId": 1,
    "orgId": null,
    "sealShape": 0,
    "isDefault": true,
    "status": "ACTIVE",
    "createdAt": "2026-04-19T10:00:00"
  }
}

6.4 查询印章列表

  • 接口路径GET /seal/list
  • 请求类型:无 JSON/表单请求体;参数 orgId 见 URL Query
  • 功能说明:查询印章列表

请求头

请求头 类型 必填 描述
Authorization String Bearer <token>

查询参数

参数名 类型 必填 描述
orgId Long 组织ID

响应参数

参数名 类型 描述
totalSize Integer 总记录数
results Array 印章列表
results[].sealId Long 印章ID
results[].name String 印章名称
results[].type Integer 印章类型(1-个人章,2-企业章)
results[].userId Long 用户ID(个人章)
results[].orgId Long 组织ID(企业章)
results[].sealShape Integer 签章形状(0-圆形,1-椭圆)
results[].isDefault Boolean 是否默认印章
results[].status String 印章状态
results[].createdAt String 创建时间
响应示例
JSON
{
  "success": true,
  "data": {
    "totalSize": 3,
    "results": [
      {
        "sealId": 1,
        "name": "个人印章",
        "type": 1,
        "userId": 1,
        "orgId": null,
        "sealShape": 0,
        "isDefault": true,
        "status": "ACTIVE",
        "createdAt": "2026-04-19T10:00:00"
      },
      {
        "sealId": 2,
        "name": "公司公章",
        "type": 2,
        "userId": null,
        "orgId": 1,
        "sealShape": 0,
        "isDefault": true,
        "status": "ACTIVE",
        "createdAt": "2026-04-19T10:00:00"
      },
      {
        "sealId": 3,
        "name": "公司合同章",
        "type": 2,
        "userId": null,
        "orgId": 1,
        "sealShape": 1,
        "isDefault": false,
        "status": "ACTIVE",
        "createdAt": "2026-04-19T10:00:00"
      }
    ]
  }
}

6.5 印章授权

在平台内为某枚印章管理用印权限(授权、撤销、按章查询列表)。被授权人可与印章、印章持有人不属同一企业。发码与校验时,持有人手机须有效。

建议流程:① 先调用「发码」接口,将短信发至该印章持有人在平台绑定的手机(与制章时可选传的 userId 为同一用户,用于接码)。② 持有人将短信验证码交予您方业务系统,由业务系统调用「确认授权」完成授权关系。

授权成功后,若已配置蚂蚁链,服务端将自动把本次授权摘要上链存证,含印章名称、持有人/授权人及被授权人姓名与手机号、业务 ID 等,无需单独再传存证材料。

下述 6.5.1~6.5.44 个接口均须在请求头携带 Authorization: Bearer <token>。完整请求 URL 为文档中的基础路径,与本节各条「接口路径」所列相对路径拼接。变更印章刻制/持有人(所有人)见本节 6.6,短信类型与 6.5.1 同为 SEAL_AUTH

§3.16 开放签署 PDF 联用:对一线业务只传参与人手机及参与人/企业等资料、可不传 sealId 的对接,§3.16 在服务端用印授权与这里同数据,且仅在 与当次印模用名(见 §3.16)一致的印章上落章。无需为签署先调 6.5.4。6.5.4 等授权查询接口适用于运营、排查或事后核对,非接 §3.16 前必须步骤。

6.5.1 发送授权短信

  • 接口路径POST /seal/authorization/send-sms-code
  • 请求类型:无请求体;参数通过 URL Query 传递
  • 功能说明:向该印章持有人在平台绑定的手机号发送本次授权用短信验证码,用于稍后在「确认授权」中校验(与签署意愿类短信区分)。

请求头

请求头 类型 必填 描述
Authorization String Bearer <accessToken>

请求参数

参数名 位置 类型 必填 描述
sealId Query Long 目标印章 ID,须为平台内未删除的印章,且能解析出持有人与手机号

响应参数

顶层为统一结构:codesuccessdatamsg。本接口成功时仅通过 msg 返回提示,data 一般为 null

参数名 类型 说明
msg String 成功时如「验证码已发送」;失败时见错误信息
data null 本接口不返回业务数据时为空
请求示例
HTTP
POST /seal/authorization/send-sms-code?sealId=1001
Authorization: Bearer <accessToken>
响应示例
JSON
{
  "code": 200,
  "success": true,
  "msg": "验证码已发送",
  "data": null
}

6.5.2 确认授权

  • 接口路径POST /seal/authorization/grant
  • 请求类型:JSON(Content-Type: application/json
  • 功能说明:用持有人手机收到的验证码完成授权。通过后写入或恢复一条 sealId + 被授权 userId 的授权关系;并尝试上蚂蚁链存证。验证码须与 6.5.1 为同一批、发至同一手机号。

请求头

请求头 类型 必填 描述
Authorization String Bearer <accessToken>
Content-Type String application/json

请求体参数

参数名 类型 必填 描述
sealId Long 印章 ID,须为平台内未删除的印章
userId Long 被授权方在平台上的用户 ID,可与印章/持有人在不同企业或不同归属侧
smsCode String 6.5.1 发至印章持有人手机上的短信验证码

响应参数

顶层为 codesuccessmsgdata;成功时 data 为下表对象,msg 多为 null

data 对象字段
参数名 类型 说明
authId Long 本笔授权在平台侧的业务标识,撤销接口 6.5.3 使用
sealId Long 印章 ID
userId Long 被授权用户 ID
sealAuthEvidenceId Long 本笔授权对应的蚂蚁链存证业务标识;未配链或上链失败时可为 null
transactionHash String 蚂蚁链交易哈希;未上链时可为 null
请求体示例
JSON
{
  "sealId": 1001,
  "userId": 2002,
  "smsCode": "123456"
}
响应示例
JSON
{
  "code": 200,
  "success": true,
  "msg": null,
  "data": {
    "authId": 5001,
    "sealId": 1001,
    "userId": 2002,
    "sealAuthEvidenceId": 90001,
    "transactionHash": "0xabc123..."
  }
}

6.5.3 撤销授权

  • 接口路径POST /seal/authorization/revoke/{authId}
  • 请求类型:无请求体;authIdPath
  • 功能说明:将指定授权记录置为已撤销(软删),被授权人不再具备该章用印权限。

请求头

请求头 类型 必填 描述
Authorization String Bearer <accessToken>

请求参数

参数名 位置 类型 必填 描述
authId Path Long 6.5.2 返回的、平台内未撤销的 authId

响应参数

本接口与 6.5.1 相同,成功时以 msg 返回「撤销成功」等提示,data 一般为 null

参数名 类型 说明
msg String 成功时如「撤销成功」
data null 无业务数据时为空
请求示例
HTTP
POST /seal/authorization/revoke/5001
Authorization: Bearer <accessToken>
响应示例
JSON
{
  "code": 200,
  "success": true,
  "msg": "撤销成功",
  "data": null
}

6.5.4 查询某印章的授权列表

  • 接口路径GET /seal/authorization/list
  • 请求类型:无请求体;sealId 在 URL Query
  • 功能说明:查询指定印章在当前的、未撤销的授权关系列表(每条结构同 6.5.2 的 data 对象,含可返回的存证与交易哈希)。用于运营/对账、核对某章已授权人;不是调 §3.16 的前置必调接口——仅传参与人手机时 §3.16 在服务端会自行按授权与组织选章,与上表数据一致。须已知 sealId 才能查本接口;日常签署对接可不依赖本接口。

请求头

请求头 类型 必填 描述
Authorization String Bearer <accessToken>

请求参数

参数名 位置 类型 必填 描述
sealId Query Long 要查询的印章 ID,须为平台内未删除的印章

响应参数

参数名 类型 说明
data Array 无授权时可能为空数组 []。元素为对象,字段同 6.5.2「响应参数(data 对象)」表
请求示例
HTTP
GET /seal/authorization/list?sealId=1001
Authorization: Bearer <accessToken>
响应示例
JSON
{
  "code": 200,
  "success": true,
  "msg": null,
  "data": [
    {
      "authId": 5001,
      "sealId": 1001,
      "userId": 2002,
      "sealAuthEvidenceId": 90001,
      "transactionHash": "0xabc123..."
    }
  ]
}

6.6 变更印章所有人

将印章的刻制/持有人从当前平台用户变更为另一用户。仍须通过原持有人手机接收的 SEAL_AUTH 短信完成意愿校验(与 6.5.1 同一发码通道)。

企业章(印章带 orgId):新所有人须已是该组织成员、且入企/成员关系状态为 ACTIVE;可先调 4.4 加入企业。无 orgId 的个人章类印章不额外限制新所有人侧账户。

若已配置蚂蚁链,变更成功后会将摘要上链并生成存证;响应中可返回 sealOwnerTransferEvidenceIdownerTransferTransactionHash;未配链或上链失败时二者可为空,不影响持有人已变更。

  • 接口路径POST /seal/transfer-owner
  • 请求类型:JSON
  • 功能说明:见上。须先 POST /seal/authorization/send-sms-code?sealId=…原持有人发码,再提交本接口中的 smsCode

请求体(JSON)

参数名 类型 必填 描述
sealId Long 印章 ID
newOwnerUserId Long 变更后的所有人用户 ID
smsCode String 发至原持有人手机的 SEAL_AUTH 验证码

响应 data 主要字段

参数名 类型 说明
sealId / name / orgId / userId / type / sealShape / isDefault 与 6.3 印章详情一致;userId 为变更后的新持有人
sealOwnerTransferEvidenceId Long 本笔变更对应的蚂蚁链存证业务标识;未上链时为 null
ownerTransferTransactionHash String 蚂蚁链交易哈希;未上链时为 null
请求示例
JSON
{
  "sealId": 1001,
  "newOwnerUserId": 2002,
  "smsCode": "123456"
}
响应示例
JSON
{
  "success": true,
  "data": {
    "sealId": 1001,
    "name": "某某公司",
    "orgId": 500,
    "userId": 2002,
    "isDefault": true,
    "sealOwnerTransferEvidenceId": 90002,
    "ownerTransferTransactionHash": "0xdef456..."
  }
}

7. 错误码说明

错误码 描述
4001 参数校验失败
4002 业务操作失败
4003 资源不存在
4010 未授权
5000 系统内部错误

8. 调用示例

8.1 获取令牌

BASH
curl -X POST \
  https://your.domain/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"appId": "app_test_1234567890", "apiKey": "sk_test_1234567890"}'

8.2 创建合同草稿

须先通过 §3.1 上传 PDF 取得 fileId

BASH
curl -X POST \
  https://your.domain/api/v1/contract/create \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{"title": "服务协议", "fileId": 1, "userId": "123456", "signers": [{"type": "PERSON", "order": 1, "userId": "123456"}]}'

8.3 用户加入企业

将平台已有用户加入指定企业/个体户(与 §4.4 一致)。须先 8.1 取令牌,请求中携带平台内有效 userIdorgId

BASH
curl -X POST \
  https://your.domain/api/v1/org/join \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{"userId": 100, "orgId": 2001}'

9. 常见问题

9.1 令牌过期怎么办?

当令牌过期时,需要重新调用 /api/v1/auth/token 接口获取新的令牌。建议在令牌过期前提前刷新。

9.2 如何处理签名失败?

签名失败通常是由于签名人信息不匹配或印章不存在导致的。请检查签名人信息和印章是否正确。

9.3 接口调用频率限制

为保证系统稳定性,每个应用(按 API Key / 开放凭证)的接口调用频率限制为:

  • 认证接口:100次/分钟
  • 其他接口:500次/分钟

10. 版本说明

版本 发布日期 变更说明
v1.0 2026-04-19 初始版本
v1.0.1 2026-04-23 合同开放接口新增 POST /contract/send-sms-code(发送签署短信验证码)
合同开放接口新增 POST /contract/face-recognition(活体验证,请求体无需 userId)
合同开放接口新增 POST /contract/sign-pdf(关键词落章 + 意愿校验 + 返回签署 PDF Base64)
v1.0.2 2026-04-24 合同开放接口 GET /contract/face-recognition/success 响应升级:返回 passed/charged/code/codeDesc,并按 code(R101、R102、R214、R215、R216、R218、R219、R221、R233、R234、R235)判断是否计费
v1.0.3 2026-04-25 POST /contract/sign-pdf:企业已认证且可唯一解析目标企业组织时,participantUserId 改为可选,默认按 participantMobile 在该组织下匹配经办用户;verifyType 含活体时,若已存在与活体姓名、身份证一致的个人组织档案且预留手机号已填,须与 participantMobile 一致。开放接口 印章授权POST /seal/authorization/send-sms-codePOST /seal/authorization/grant(成功后摘要上蚂蚁链)、POST /seal/authorization/revoke/{authId}GET /seal/authorization/list;授权短信发往印章持有人手机
v1.0.4 2026-04-25 POST /contract/sign-pdf 文档:补充印模用名与参与人关联enterpriseName/participantName 来源、与账号手机/姓名及同名企业章/授权的关系)、只选用与当次印模用名完全一致的 Seal 名称的选章规则,以及 sealIdparticipantName 等参数说明
v1.0.5 2026-04-26 新增 POST /org/lookup-identityPOST /person/lookup-identity。其中 POST /org/lookup-identity 先经与 POST /auth/enterprise/legal-person 同源创瑞企业三要素核验、再于平台内查组织与章,在 COMPANY / SELF_EMPLOYED 中按企名+统一社会信用代码匹配。
新增 POST /org/joinPOST /seal/transfer-owner。企业章变更所有人时,新所有人须已在目标 orgId 下为 ACTIVE 成员,成功后可上链 sealOwnerTransferEvidenceId 等。
POST /contract/sign-pdf 补充:首次在平台建企时 legalPersonNamelegalPersonIdCard 须与 faceToken 活体会话中实名、证件号一致等说明
v1.0.6 2026-04-27 个人开放接口补充文档:POST /person/face-recognition(发起 H5 活体,userId 为可选参数)、GET /person/face-recognition/success(查询活体结果,与合同侧 GET /contract/face-recognition/success 响应结构一致)。原 §5.4/§5.5 独立认证页与按实名查询顺延为 §5.6/§5.7。
v1.0.7 2026-05-07 活体 Token 管理增强
• 新增 GET /contract/face-recognition/check-token(查询活体 token 是否过期,返回剩余有效期)
• 开放接口活体 token 有效期延长至 12 小时(其他场景默认 30 分钟)
POST /contract/sign-pdf 新增 destroyFaceTokenAfterUse 参数(默认 false,签署后立即销毁 token,提升安全性)

企业变更法人功能
• 新增 POST /contract/change-legal-person(通过企业名称和信用代码定位企业,变更法人)
• 支持自动创建新法人用户和企业归属迁移
• 企业下所有印章跟随企业同步迁移到新法人账号
• 入参调整:使用 enterpriseName + unifiedSocialCreditCode 替代 orgId,降低接入门槛
v1.0.8 2026-05-07 运营商三要素验证功能
• 新增 POST /person/three-factor-verification(验证姓名、身份证号、手机号三要素)
纯验证接口:仅返回验证结果,不创建用户、组织或印章
• 支持详细的计费判断:status=1/2 计费,错误码不计费
• 完整的状态码体系:1(一致)、2(不一致)、3(参数错误)、10001-10005(业务错误)、20000-20005(系统错误)
v1.0.9 2026-05-07 开放签署 PDF 增强
POST /contract/sign-pdf 新增 sealWidthsealHeight 参数(单位:pt)
• 默认值:126pt(约 44.4mm),保持原有尺寸不变
• 最小值:28.4pt(约 10mm),防止印章过小
• 可选参数,不传时使用默认值,向后兼容

上传印章图片功能
• 新增 POST /v1/seal/upload-image(上传图片生成印章)
• 支持个人章和企业章,使用固定尺寸(个人章 300×150px,企业章 210×210px)
• 企业章权限校验:只有企业创建者才能为企业创建印章
• 图片大小限制:不超过 2MB
• 支持设置默认印章,自动处理互斥逻辑
v1.0.10 2026-05-23 个人账号手机号修改功能
• 新增 POST /person/change-mobile-by-sms(通过验证码修改手机号,无需 userId)
• 新增 POST /person/change-mobile-by-face(通过活体认证修改手机号,多用户匹配时需 userId)
• 支持两种验证方式:原手机号验证码、活体人脸识别
• 短信验证码场景码:CHANGE_MOBILE_OLD(原手机号)、CHANGE_MOBILE_NEW(新手机号)
• 活体认证需先调用 POST /person/face-recognition 获取 faceToken(userId 可选)

域名变更
• 基础路径从 https://sign.fenxi365.com/api/v1 变更为 https://pc.suxin365.com/api/v1
v1.0.11 2026-05-27 按实名查询用户与印章增强
POST /person/lookup-identity 响应 seals[] 补充印章所属组织(sealOrgIdsealOrgTypesealOrgNamesealOrgIdNumber)及制章人信息(sealCreatedByUserIdsealCreatedByUserMobilesealCreatedByUserIdNumber
• 新增 boundEnterprises:返回用户已加入的企业组织列表(ACTIVE,含 COMPANY / SELF_EMPLOYED
v1.0.12 2026-05-27 加入企业审核(控制台)
• 控制台「加入企业」提交后成员关系状态为 PENDING,须企业管理员审核通过后变为 ACTIVE
• 开放接口 POST /org/join 仍为直接加入(ACTIVE),与控制台行为区分
v1.0.13 2026-05-30 合同模板开放接口
• 新增 GET /contract/templates(查询租户启用的模板列表)
• 新增 GET /contract/templates/{templateId}(查询模板详情,含字段定义)
• 新增 POST /contract/create-from-template(按模板填充字段、生成 PDF 并发起合同,状态为 PENDING
• 新增 GET /contract/tenant-list(租户合同列表,orgId 可选)
• 原 §3.2–§3.12 合同管理小节顺延为 §3.5–§3.16
v1.0.14 2026-05-30 PDF 上传创建合同流程重构
POST /contract/upload-templatePOST /contract/create 租户 ID 统一取自 API Key,并校验 userId / 文件 / 签署方归属
• 创建合同:签署方类型规范为 PERSON / ENTERPRISE(兼容传 COMPANY);修复签署顺序关联;补全 PDF 预览图转换
• 移除未实现的 callbackUrlwillingnessTyperedirectUrl 请求参数
• 文档 §3 补充 PDF 与模板两条发起路径说明
v1.0.15 2026-05-30 个人账号查询增强
• 新增 POST /person/lookup-by-mobile(按手机号查询用户姓名与身份证号)
• 个人账号 §5.3–§5.10 顺延为 §5.4–§5.11

接口列表

接口路径 方法 请求类型 功能说明
POST /auth/token POST JSON 获取访问令牌
POST /contract/upload-template POST JSON 上传合同 PDF(PDF 发起流程第一步)
GET /contract/templates GET 无 Body 查询租户启用的合同模板列表
GET /contract/templates/{templateId} GET 无 Body(Path) 查询模板详情
POST /contract/create-from-template POST JSON 根据模板生成 PDF 并发起合同(待签署)
GET /contract/design-page/{contractId} GET 无 Body(Path/Query) 获取设计合同页面
POST /contract/create POST JSON 创建合同草稿(DRAFT,PDF 流程)
POST /contract/initiate-sign/{contractId} POST JSON(Body 可空) 发起签署
GET /contract/sign-url/{contractId} GET 无 Body(Path/Query) 获取签署链接
GET /contract/list GET 无 Body(Query) 按组织 ID 查询合同列表
GET /contract/tenant-list GET 无 Body(Query) 查询租户合同列表(组织 ID 可选)
GET /contract/preview-url/{contractId} GET 无 Body(Path/Query) 获取合同预览地址
POST /contract/send-sms-code POST 表单或 Query(mobile 发送短信验证码(签署意愿)
POST /contract/face-recognition POST JSON 获取活体验证(人脸识别)二维码
GET /contract/face-recognition/success GET 无 Body(Query:token 根据 token 查询活体是否认证成功
POST /contract/sign-pdf POST JSON 开放签署 PDF(关键词落章、意愿校验)
POST /org/add POST JSON 添加企业账号
GET /org/get/{orgId} GET 无 Body(Path) 查询企业账号
POST /org/lookup-identity POST JSON 先创瑞企业三要素核验,再查企业与印章(含制章人用户 ID、手机号)
POST /org/join POST JSON 用户加入企业/个体户
POST /person/add POST JSON 添加个人账号
GET /person/get/{userId} GET 无 Body(Path) 查询个人账号
POST /person/lookup-by-mobile POST JSON 按手机号查询用户姓名与身份证号
POST /person/lookup-identity POST JSON 按姓名、身份证号查询用户手机号、可用印章(含制章人/组织信息)及绑定企业
DELETE /person/delete/{userId} DELETE 无 Body(Path) 账号注销
POST /person/face-recognition POST JSON 获取个人活体验证(人脸识别)二维码或认证页 URL
GET /person/face-recognition/success GET 无 Body(Query:token 根据 token 查询个人侧活体是否认证成功
POST /person/certify-page POST JSON 获取独立认证页面
POST /seal/add POST JSON 添加印章
POST /seal/set-default/{sealId} POST 无 Body(Path) 设置默认印章
GET /seal/get/{sealId} GET 无 Body(Path) 查询印章详情
GET /seal/list GET 无 Body(Query:orgId 查询印章列表
POST /seal/authorization/send-sms-code POST 无 Body(Query:sealId 发送印章授权短信(持有人手机)
POST /seal/authorization/grant POST JSON 确认印章授权
POST /seal/authorization/revoke/{authId} POST 无 Body(Path) 撤销印章授权
GET /seal/authorization/list GET 无 Body(Query:sealId 某印章的授权用户列表
POST /seal/transfer-owner POST JSON 变更印章所有人(刻制/持有人),可上链存证