回调通知服务使用技巧:区分合同状态与事件类型
在集成开放签回调通知服务时,许多用户容易混淆"合同状态(contractStatus)"和"事件类型(callbackType)"这两个概念。本文将通过实际案例详细解释它们的区别,帮助您正确理解和使用这两个参数。
核心概念解析
合同状态 (contractStatus) - 合同的整体状态
合同状态表示整个合同在某个时刻所处的整体状态,它描述的是合同的生命周期阶段。例如:签署中、已拒签、已完成等。
事件类型 (callbackType) - 用户的具体操作
事件类型表示在合同签署流程中发生的具体操作或事件以及触发关联事件,它描述的是某个用户或者程序执行的具体动作。例如:提交签署、拒签、完成签署等。
形象化比喻
可以把合同状态比作一部电影的播放状态(未开始、播放中、已结束),而事件类型则是观众的具体操作(暂停、快进、重新播放)。每次操作都可能影响电影的播放状态,但操作本身和状态是两个不同的概念。
合同状态详解
状态 | 说明 |
---|---|
DRAFT | 草稿 |
DELETED | 已删除 |
WRITING | 填写中 |
REFUSAL_WRITE | 已拒填 |
SIGNING | 签署中 |
REFUSAL_SIGN | 已拒签 |
EXPIRED | 已失效 |
RECALLED | 已撤回 |
COMPLETED | 已完成 |
事件类型详解
事件 | 说明 |
---|---|
SEND_SIGNING | 发起签署 |
SUBMIT_WRITE | 填写 |
REFUSAL_WRITE | 拒填 |
SUBMIT_SIGN | 签署 |
REFUSAL_SIGN | 拒签 |
RECALLED | 合同撤销 |
DELETE | 删除合同 |
COMPLETE | 完成签署 |
EXPIRED | 合同过期 |
SIGN_FAILED | 签署失败 |
DOCUMENT_DELAY | 修改签署截止时间 |
实际应用案例
案例一:企业合作协议签署
某公司需要与合作伙伴签署合作协议,流程如下:
-
发起合同
- 事件类型:
SEND_SIGNING
- 合同状态:
SIGNING
- 说明: 合同被正式发起,进入签署状态
- 事件类型:
-
甲方签署
- 事件类型:
SUBMIT_SIGN
- 合同状态:
SIGNING
- 说明: 甲方完成签署,但合同仍处于签署中(因乙方未签)
- 事件类型:
-
乙方签署
- 事件类型:
SUBMIT_SIGN
- 合同状态:
COMPLETED
- 说明: 乙方完成签署,合同状态变为已完成
- 事件类型:
-
签署完成
- 事件类型:
COMPLETE
- 合同状态:
COMPLETED
- 说明: 所有签署方完成签署,合同状态变为已完成
- 事件类型:
案例二:租房合同拒签场景
-
发起合同
- 事件类型:
SEND_SIGNING
- 合同状态:
SIGNING
- 事件类型:
-
租客拒签
- 事件类型:
REFUSAL_SIGN
- 合同状态:
REFUSAL_SIGN
- 说明: 租客拒绝签署,合同整体状态直接变为已拒签
- 事件类型:
-
合同拒签
- 合同状态:
REFUSAL_SIGN
- 说明: 租客拒绝签署,合同整体状态直接变为已拒签
- 合同状态:
在业务系统中的正确应用
正确做法
展示合同进度(使用合同状态)
// 根据合同状态展示整体进度
switch(contractStatus) {
case 'SIGNING':
showStatus('签署中');
break;
case 'COMPLETED':
showStatus('已完成');
break;
case 'REFUSAL_SIGN':
showStatus('已拒签');
break;
}
记录操作日志(使用事件类型)
// 根据事件类型记录详细操作
switch(callbackType) {
case 'SUBMIT_SIGN':
addLog('某个用户已完成签署');
break;
case 'REFUSAL_SIGN':
addLog('某个用户拒绝签署');
break;
}
常见错误
错误地将事件类型用于判断合同状态:
// 错误示例
if (callbackType === 'SUBMIT_SIGN') {
// 仅因有人签署就认为合同完成,这是错误的
showStatus('已完成');
}
使用建议
- 明确区分用途:合同状态用于展示合同整体进度,事件类型用于记录详细操作日志
- 关注状态转换:理解不同事件如何影响合同状态的转换
- 处理异常情况:特别注意
REFUSAL_SIGN
、SIGN_FAILED
等异常事件类型 - 完整记录信息:既要关注合同状态变化,也要记录具体事件,构建完整的操作轨迹
通过正确理解和使用合同状态与事件类型,您可以构建更准确、更可靠的合同管理系统,为用户提供更好的体验。