Files
tyapi-server/docs/法大大天远侧配置待办清单.md
2026-07-26 23:14:52 +08:00

253 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 法大大(天远)接入待办清单
> 代码已从 hyapi海宇移植到 tyapi天远
> **两边是不同公司、不同法大大账号:海宇的密钥 / 模板 / 企业 ID 一律不可复用。**
> 本文只列 **天远侧需要你准备、填写、在法大大后台配置** 的事项。
---
## 一、结论(先看这个)
| 类别 | 是否需要你做 |
|------|----------------|
| 代码移植 | ✅ 已完成(后端 + 前端) |
| 天远法大大开户 / 应用密钥 | ❌ **必须你提供** |
| 天远合同模板 + 控件 fieldId | ❌ **必须你新建并回填配置** |
| 天远企业 openCorpId / 印章 / 免验证签场景码 | ❌ **必须你开通** |
| 回调与回跳域名 | ❌ **必须你在法大大后台登记** |
| 海宇配置抄过来 | ⛔ **禁止** |
配置已按 2026-07-26 提供的天远应用凭证写入(三份 yaml 的 `fadada:`)。
**重要纠偏(已按 hyapi 对照处理):**
| 你提供的值 | 实际写入 | 说明 |
|------------|----------|------|
| `c66587b4a048bba3c1cb032eb7750182` 当作模板 ID | **否** → 写入 `no_auth_scene_code` | hyapi 里这是免签场景码,不是模板 ID |
| 模板 ID | `1784619066713193840` | hyapi 同模板真实 ID请在法大大后台再确认一次 |
| `openCorpId=aca08b5f...`(应用页) | **未**作为盖章身份 | 代码 `open_corp_id` 用于乙方自动盖章 ActorOpenID |
| 乙方=海南海宇大数据有限公司 | `open_corp_id=7118e66dfd9349d998c0395c5d0742ad` | 取自 hyapi 海宇企业 ID请确认是否仍正确 |
---
## 二、密钥与账号(必填)
在法大大开放平台为 **天远数据** 单独创建应用后,提供:
| 项 | 配置键 | 说明 | 从哪拿 |
|----|--------|------|--------|
| 应用 ID | `fadada.app_id` | 天远应用的 AppId | 开放平台 → 应用详情 |
| 应用密钥 | `fadada.app_secret` | AppSecret验签也用它 | 开放平台 → 应用详情 |
| API 环境 | `fadada.server_url` | 测试:`https://uat-api.fadada.com/api/v5/`<br>正式:`https://api.fadada.com/api/v5/` | 按环境选择 |
| 天远企业 ID | `fadada.open_corp_id` | 天远主体在法大大侧的 `openCorpId`(乙方自动盖章身份) | 企业授权完成后在控制台/接口可见 |
| 免验证签场景码 | `fadada.no_auth_scene_code` | 即 `businessId`;乙方免验证签必传 | 法大大后台申请「模板免验证签」场景 |
**不需要**单独提供 `.pem` / 证书文件API 与回调验签均使用 `app_id` + `app_secret`HMAC-SHA256
建议:**测试应用 / 正式应用各一套**,分别写入 development / production。
---
## 三、合同模板与文件(必填)
### 3.1 需要准备的文件
| 文件 | 用途 | 备注 |
|------|------|------|
| 《天远数据API合作协议》Word/PDF 原件 | 上传到法大大做成「签署模板」 | **不能**用海宇模板;法务定稿后再上传 |
| (可选)控件 fieldId 对照表 | Excel/截图,标清每个填写控件编码 | 方便回填 `template_fields` |
### 3.2 模板在法大大后台要配好
1. 创建 **签署模板**(含甲、乙双方角色,角色名建议:`甲方` / `乙方`
2. 甲方:客户企业手动签(验证码等)
3. 乙方:天远,开启 **按模板免验证签**(自动盖章)
4. 放置填写控件:协议编号、签订日期、甲方企业名、统一社会信用代码、联系地址、授权代表等
5. 签署日期用 **签署控件**(不要当填写控件走填单 API
### 3.3 回填到配置的 ID
| 项 | 配置键 | 说明 |
|----|--------|------|
| 模板 ID | `fadada.template_id` | 签署模板 ID |
| 文档 docId | `fadada.template_doc_id` | 可先留空,运行时自动解析;有则更稳 |
| 甲方角色 | `fadada.party_a_actor_id` | 须与模板角色名一致,默认 `"甲方"` |
| 乙方角色 | `fadada.party_b_actor_id` | 默认 `"乙方"` |
### 3.4 控件 fieldId`fadada.template_fields`
**天远自己模板** 控制台导出的编码为准,示例结构:
```yaml
template_fields:
agreement_no: # 协议编号(多处同值可配多个 fieldId
- "xxxxxxxx"
contract_date: "xxxxxxxx" # 签订日期
party_a_name: # 甲方企业名(多处同值可配多个)
- "xxxxxxxx"
party_a_uscc: "xxxxxxxx" # 统一社会信用代码
party_a_address: "xxxxxxxx" # 联系地址
party_a_rep: "xxxxxxxx" # 授权代表/法人
party_a_sign_date: "" # 签署控件,一般留空
party_b_sign_date: "" # 签署控件,一般留空
```
> 海宇配置里的一串数字 fieldId **全部作废**,不可拷贝。
协议编号线上生成规则(已实现,一般不用改):`CON01` + `YYYYMMDD` + 6 位随机数。
---
## 四、企业主体与印章(必填)
| 项 | 说明 |
|----|------|
| 天远企业在法大大完成实名 | 主体名称、统一社会信用代码与营业执照一致 |
| 应用授权 | 天远企业授权给本开放平台应用 |
| 企业公章 / 合同章 | 开通并可用于签署;免验证签场景需绑定可用印章 |
| 免验证签开通 | 与 `no_auth_scene_code` 对应;未开通则乙方自动盖章失败 |
---
## 五、回调与前端回跳(必填)
### 5.1 服务端事件回调(法大大 → 天远 API
在法大大应用里配置回调 URL公网 HTTPS
```text
https://console.tianyuanapi.com/api/v1/certifications/callbacks/fadada
```
(若 API 域名与控制台不同,改成实际 API 网关域名。)
对应配置:
```yaml
fadada:
callback:
enabled: true
```
### 5.2 浏览器回跳(用户 iframe 完成后)
| 场景 | 配置键 | 建议值 |
|------|--------|--------|
| 企业认证完成 | `fadada.auth.redirect_url` | 生产:`https://console.tianyuanapi.com/profile/certification`<br>本地:`http://localhost:5173/profile/certification` |
| 签署完成 | `fadada.sign.redirect_url` | 生产:`https://console.tianyuanapi.com/certification/callback/fadada/sign`<br>本地:`http://localhost:5173/certification/callback/fadada/sign` |
开发/生产 yaml 里已写好占位,确认域名证书与前端路由已上线即可。
---
## 六、文案与其它(建议核对)
| 项 | 当前默认 | 是否要你改 |
|----|----------|------------|
| 合同名称 | `天远数据API合作协议` | 与法务文件名一致即可 |
| `expire_days` / `retry_count` | 7 / 3 | 按业务调整 |
| 协议编号前缀 | `CON01...`(代码已生成) | 一般不用改 |
---
## 七、联调检查清单(按顺序打勾)
### Phase A — 账号与后台
- [ ] 天远法大大账号开户完成
- [ ] 创建开放平台应用,拿到 `app_id` / `app_secret`
- [ ] 企业实名 + 应用授权,拿到 `open_corp_id`
- [ ] 开通免验证签,拿到 `no_auth_scene_code`
- [ ] 上传《天远数据API合作协议》建签署模板
- [ ] 记录 `template_id` 与全部填写控件 `fieldId`
- [ ] 配置印章与免验证签绑定
- [ ] 配置事件回调 URL公网可达
### Phase B — 写入工程配置
- [ ] 填写 `configs/env.development.yaml``fadada:`UAT
- [ ] 填写 `configs/env.production.yaml``fadada:`(正式 URL + 正式密钥)
- [ ] 同步/确认 `config.yaml` 本地联调段
- [ ] 确认 `auth.redirect_url` / `sign.redirect_url` 指向天远域名
### Phase C — 端到端验证
- [ ] 管理员审核通过企业信息(此时**不会**立刻调第三方)
- [ ] 用户侧自动/手动选择法大大 → 出现企业认证 iframe
- [ ] 企业认证成功 → 合同预览(法大大预览页,非 PDF 直链)
- [ ] 申请签署 → 甲方签署 iframe链接约 10 分钟,进入页会刷新)
- [ ] 甲方签完后乙方自动盖章
- [ ] 状态变为完成,已签文件下载归档到系统
- [ ] 回调日志有验签成功记录(或轮询兜底成功)
### Phase D — 存量 e签宝
- [ ] 历史进行中的 e签宝用户可继续走完后端仍保留 e签宝 Provider
- [ ] 新用户前端不可见 e签宝仅法大大
---
## 八、交给法大大/商务时可复制的需求说明
请为「天远数据」开通 FASC OpenAPI v5.1,并提供:
1. 测试环境 & 正式环境各自的 AppId、AppSecret
2. 企业 openCorpId
3. 模板免验证签场景码businessId
4. 签署模板能力:甲乙双方、甲方手签、乙方按模板免验证签自动盖章
5. 事件回调地址登记权限(我方提供 HTTPS URL
6. 控制台导出模板 ID 与控件 fieldId 列表的权限
合同文件由我方法务提供终稿后上传。
---
## 九、代码侧已完成(无需你再开发)
- `internal/shared/fadada`FASC HTTP 客户端
- `SignPlatformProvider` + Registrye签宝 + 法大大)
- 审核通过后选平台 → 认证 → 签署 → 下载全流程
- 回调:`POST /api/v1/certifications/callbacks/fadada`
- 前端:平台选择 / 静默选法大大、签署与预览链接刷新、iframe 顶层回跳
- 配置键与 yaml 占位已就位
**你当前唯一阻塞点:填好天远自己的法大大密钥、模板与回调。**
---
## 十、配置填写模板(可直接贴回 yaml
```yaml
fadada:
app_id: "这里填天远AppId"
app_secret: "这里填天远AppSecret"
server_url: "https://uat-api.fadada.com/api/v5/" # 正式改为 https://api.fadada.com/api/v5/
open_corp_id: "这里填天远openCorpId"
no_auth_scene_code: "这里填免验证签场景码"
template_id: "这里填签署模板ID"
party_a_actor_id: "甲方"
party_b_actor_id: "乙方"
template_doc_id: "" # 可选
template_fields:
agreement_no:
- "控件ID"
contract_date: "控件ID"
party_a_name:
- "控件ID"
party_a_uscc: "控件ID"
party_a_address: "控件ID"
party_a_rep: "控件ID"
party_a_sign_date: ""
party_b_sign_date: ""
contract:
name: "天远数据API合作协议"
expire_days: 7
retry_count: 3
auth:
redirect_url: "https://console.tianyuanapi.com/profile/certification"
sign:
redirect_url: "https://console.tianyuanapi.com/certification/callback/fadada/sign"
callback:
enabled: true
```