Appearance
合同生成
基于模板生成电子合同并支持发起签署,适用于业务公证、合同签署等场景。
所有接口均需在请求头中携带:Authorization: Basic {Base64(appId:密钥)}
1. 创建合同
根据模板和填充数据生成合同并获取合同编号,可用于后续签署或下载。
请求说明
| 项目 | 说明 |
|---|---|
| 请求方式 | POST |
| 请求地址 | /api/contract/create |
| Content-Type | application/json |
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| templateId | string | 是 | 合同模板 ID |
| templateVersion | string | 否 | 模板版本号,不传则用最新版 |
| title | string | 是 | 合同标题 |
| parties | array | 是 | 签署方列表 |
| parties[].name | string | 是 | 签署方名称 |
| parties[].idType | string | 否 | 证件类型:ID_CARD / UNIFIED_SOCIAL_CREDIT |
| parties[].idNo | string | 否 | 证件号 |
| parties[].mobile | string | 否 | 手机号 |
| fillData | object | 否 | 模板占位符填充数据,key 为占位符名,value 为填充值 |
| expireTime | string | 否 | 合同有效期截止时间,格式 yyyy-MM-dd HH:mm:ss |
请求示例
http
POST /api/contract/create HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Basic {Base64(appId:密钥)}
{
"templateId": "TPL_SIGN_001",
"title": "业务合作框架协议",
"parties": [
{
"name": "甲方公司",
"idType": "UNIFIED_SOCIAL_CREDIT",
"idNo": "91110000XXXXXXXX"
},
{
"name": "乙方",
"idType": "ID_CARD",
"idNo": "110101199001011234",
"mobile": "13800138000"
}
],
"fillData": {
"contract_no": "HT202402001",
"amount": "100000.00",
"sign_date": "2024-02-09"
},
"expireTime": "2025-02-09 23:59:59"
}响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 状态码 |
| data.contractId | string | 合同唯一编号 |
| data.downloadUrl | string | 合同文件下载地址(若已生成) |
| data.status | string | 状态:DRAFT / PENDING_SIGN / SIGNED |
| msg | string | 提示信息 |
响应示例
json
{
"code": 0,
"data": {
"contractId": "CT202402090001",
"downloadUrl": "https://cdn.example.com/contracts/CT202402090001.pdf",
"status": "DRAFT"
},
"msg": "success"
}2. 发起签署
对已创建的合同发起签署流程,可指定签署顺序与方式。
请求说明
| 项目 | 说明 |
|---|---|
| 请求方式 | POST |
| 请求地址 | /api/contract/sign/start |
| Content-Type | application/json |
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| contractId | string | 是 | 合同 ID(由创建合同接口返回) |
| signOrder | string | 否 | 签署顺序:PARALLEL(并行)/ SEQUENTIAL(顺序) |
| notifyUrl | string | 否 | 签署结果回调地址 |
请求示例
http
POST /api/contract/sign/start HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Basic {Base64(appId:密钥)}
{
"contractId": "CT202402090001",
"signOrder": "SEQUENTIAL",
"notifyUrl": "https://your-domain.com/callback/contract"
}响应示例
json
{
"code": 0,
"data": {
"contractId": "CT202402090001",
"signTaskId": "ST202402090001",
"signLinks": [
{
"partyIndex": 1,
"signUrl": "https://sign.example.com/entry?task=xxx",
"expireTime": "2024-02-16 23:59:59"
}
]
},
"msg": "success"
}3. 查询合同状态
根据合同 ID 查询当前状态及签署进度。
请求说明
| 项目 | 说明 |
|---|---|
| 请求方式 | GET |
| 请求地址 | /api/contract/query |
请求参数(Query)
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| contractId | string | 是 | 合同 ID |
请求示例
http
GET /api/contract/query?contractId=CT202402090001 HTTP/1.1
Host: api.example.com
Authorization: Basic {Base64(appId:密钥)}响应示例
json
{
"code": 0,
"data": {
"contractId": "CT202402090001",
"title": "业务合作框架协议",
"status": "SIGNED",
"signedTime": "2024-02-09 14:30:00",
"downloadUrl": "https://cdn.example.com/contracts/CT202402090001_signed.pdf"
},
"msg": "success"
}合同状态说明
| status | 说明 |
|---|---|
| DRAFT | 草稿 |
| PENDING_SIGN | 待签署 |
| SIGNED | 已签署完成 |
| EXPIRED | 已过期 |
| CANCELLED | 已作废 |