This commit is contained in:
2026-07-26 23:14:52 +08:00
parent 750be2a305
commit 7244df5ae1
40 changed files with 4774 additions and 260 deletions

View File

@@ -0,0 +1,252 @@
# 法大大(天远)接入待办清单
> 代码已从 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
```