Appearance
概述
覆盖 EBAOZU V4 租赁订单合同从生成、签署、回调、归档的完整链路, 以及三类签署通道(e签宝 / 爱签 / 蚂蚁链)的设计差异。
EBAOZU V4 租赁订单的电子合同签署由 第三方签署平台 + 自研调度逻辑 共同完成。本文档聚焦:
- 三类签署通道 的差异(系统配置
contract_sign切换) - 合同状态机(
eb_store_order_lease.contract_status的全量写入点) - 触发链与回调链 的时序与代码位置
- 常见排障与日志关键字
合同类别与系统配置
系统配置 contract_sign
| 值 | 通道 | 人脸时机 | 典型使用方 |
|---|---|---|---|
| 1 | e签宝(默认) | 下单后人脸 | 传统 e签宝 流程, 需 org_esign_sdk3 初始化 |
| 2 | 爱签 | 下单前人脸 | 自研通道, 人脸前可下单 |
读取位置: app/services/other/SystemContractServices.php 与 app/services/order/StoreOrderCreateServices.php。
check_type 字段
| 值 | 通道 | 备注 |
|---|---|---|
| 0 | 无免押 | 老流程, 纯合同签署 |
| 1 | 芝麻免押(已废弃) | 旧存量订单使用 |
| 2 | 蚂蚁链租赁宝 | 含代扣协议, 走 AtoOpenApiServices |
| 3 | 支付宝租赁行业交易组件 | 当前唯一新订单通道 |
关键文件路径
SDK / 服务层
app/services/third/ThirdBaseService.php # 第三方API基类(爱签走自研一号通)
app/services/third/ACsignService.php # 爱签SDK
app/services/user/AsignServices.php # 爱签业务封装
app/services/user/EsignServices.php # e签宝业务封装 + 人脸认证
app/services/other/SystemContractServices.php # 合同模板 + 签署主流程编排
app/services/alipay/AtoOpenApiServices.php # 蚂蚁链租赁宝
触发链
app/jobs/order/OrderCreateAfterJob.php # 补签 + 合同下载
app/jobs/order/OrderWithholdJob.php # 爱签用户创建 + 代扣
app/jobs/order/OrderAutoAuditJob.php # 机审触发
app/listener/order/Create.php # 下单30秒后派发机审
控制器
app/controller/api/v2/user/Asign.php # 爱签回调 (notify)
app/controller/api/v2/user/Esign.php # 人脸认证 (persons_verify_check)
app/controller/api/v1/order/StoreOrder.php # 下单 + 二要素验证状态机 (contract_status)
eb_store_order_lease.contract_status 是合同流转的单一事实源。
枚举值
| 值 | 语义 | 备注 |
|---|---|---|
| -1 | 未生成 | 初始默认值, 合同尚未创建 |
| 0 | 待签约(已生成) | 合同已生成, 等待发起签署 |
| 1 | 已签约(已发起) | 签署流程已发起, 待用户/平台签署 |
| 2 | 已完成 | 合同签署全部完成 (终态) |
| 3 | 已取消 | 拒签/过期/解约 (终态) |
| 4 | 待签代扣 | 蚂蚁链专用, 主合同完成但代扣协议未签 |
状态流转图
初始创建
|
-1 (未生成)
|
审核通过签合同
|
0 (待签约)
|
e签宝发起签署 / 爱签发起
|
1 (已签约)
|
┌────────────┼────────────┐
| | |
e签宝静默 用户签名 蚂蚁链代扣
| | |
2 (已完成) ←─+----------- (终态)
|
| (取消/拒签/过期/解约)
|
3 (已取消) (终态)
蚂蚁链特殊路径:
0 → 4 (合同已签但代扣协议未签)
4 → 2 (代扣签约成功)三条签署路径
爱签路径 (contract_sign=2)
适用: 免押 + 下单前人脸(部分场景) 或 下单后人脸补签。
下单(check_type=3 免押)
↓
机审 30 秒后触发 (Create.php → OrderAutoAuditJob)
↓
leaseAudit 通过 → handleLeaseAuditContract (StoreOrderServices.php)
├─ 爱签 fast path: isAsignReady (face=2 && asign_seal_no 不空) → asignFlow + uploadAsignContract
└─ 爱签 slow path: face 未完成 → 条件派发 asignSignAfterFaceVerify (仅 face=2 时)
↓
用户人脸认证 (Esign.php → persons_verify_check)
├─ addAsignUser 异步创建爱签用户 (OrderWithholdJob.php)
└─ dispatchSece(1, 'asignSignAfterFaceVerify') 派发补签
↓
asignSignAfterFaceVerify (OrderCreateAfterJob.php)
├─ 防并发锁: CacheService::redisHandler()->get/set('asign_sign_running_'.$oid, 30s)
├─ 4 个守卫 (audit_status / contract_status / contract_sign / face_auth_status)
├─ 爱签用户未创建 → addAsignUser + 5 秒重试自己
└─ 爱签用户已创建 → asignFlow + uploadAsignContract
↓
asignFlow (SystemContractServices.php)
├─ 1. uploadTemplate (uploadTemplate)
├─ 2. createContract (createContract)
├─ 3. addSigner (静默签署)
└─ 4. contract_status = 2 (leaseServices->update)
↓
uploadAsignContract (OrderCreateAfterJob.php)
└─ 下载爱签合同 PDF, 上传 OSSe签宝路径 (contract_sign=1)
适用: 免押 + 下单后人脸(传统流程)。
leaseAudit 通过 → handleLeaseAuditContract
└─ e签宝分支 (!empty(template['dstPdfFile']) && contract_status != 2)
├─ org_esign_sdk3 初始化 (平台 + 企业签章)
├─ person_esign_sdk3 初始化 (个人)
├─ personSign (个人静默签署)
├─ platformSign (平台签署)
├─ orgSign (企业签署)
├─ verifyPdf (验签)
└─ uploadEsign3Contract (上传 OSS)蚂蚁链租赁宝路径 (check_type=2)
适用: 旧存量订单, 含代扣协议, 走支付宝开放平台。
调试与排障
关键 dev_log 关键字
| 关键字 | 触发位置 | 级别 |
|---|---|---|
asignSignAfterFaceVerify-正在执行, 跳过重复入队 | 锁 get 命中 | info |
asignSignAfterFaceVerify-爱签用户未创建, 触发 addAsignUser + 5秒重试 | 爱签用户未创建 | info |
asignSignAfterFaceVerify-爱签用户仍未创建, 已重试过, 放弃 | 重试用尽 | error |
asignSignAfterFaceVerify-爱签合同静默签署完成 | 成功 | info |
asignSignAfterFaceVerify-{oid} | 异常 | error |
爱签回调-合同未找到 / 爱签回调-合同状态更新失败 | 回调处理异常 | error |
爱签合同签署完成 | 回调成功 | info |
常见排障对照
| 症状 | 排查方向 |
|---|---|
contract_status 永远 -1 | 查爱签补签链路 dev_log + 订单 face_auth_status |
contract_status 跳到 1 不进 2 | 查 esign3PersonSign 错误日志 + 异步任务 |
| 蚂蚁链代扣失败 | 查 AtoOpenApiServices 回调日志 + AGREEMENT_SIGN_FLOW_FINISH 状态 |
| 爱签用户创建失败 | 查 AsignServices::addPersonalUser 错误 + 爱签 addAsignUser 频次 |