1. 订阅流程
智书合同API
  • 智书开放平台概述
  • 开发对接流程
  • 基本概念
    • 应用鉴权
    • 用户身份体系
  • 对接方式
    • 选择对接方式
    • 【识别用户身份】选择自建应用的方式快速对接
    • 智书开平与飞书开平对接差异
      • 智书合同新用户流程差异
      • 从飞书合同迁移到智书合同流程差异
  • API调用指南
    • API列表
    • 频控策略
    • 调用流程
      • 流程概述
      • 获取访问凭证
      • 调用API
  • 事件订阅
    • 事件概述
    • 事件列表
    • 订阅流程
      • 获取 Encrypt Key
      • 获取 Verification Token
      • 添加事件
      • 接收并处理事件
      • 配置订阅方式
  • 认证及授权
    • 获取访问凭证
      • 获取 tenant_access_token
  • 智书合同
    • 合同类型
      • 查询合同类型目录
    • 模版管理
      • 查看模板列表
      • 创建模版实例
      • 查看模版详情
    • 文件管理
      • 上传合同相关文件
      • 下载合同相关文件
    • 合同管理
      • 事件
        • 协商事件
        • 合同信息变更
        • 合同状态变更
        • 合同分享事件
        • 取消合同分享事件
      • form表单、币种、国家说明
        • 合同创建Form组件说明
        • 币种说明
        • 国家地区编码
      • 创建合同
      • 删除草稿合同
      • 提交合同
      • 重新提交合同
      • 更新合同
      • 更新合同字段信息
      • 查看合同详情
      • 搜索合同
      • 根据合同编号查询
      • 合同协商操作记录信息查询
      • 合同电子签转纸质签
      • 查询合同分享记录
    • 付款
      • 事件
        • 合同新建付款
      • 创建付款申请
      • 更新付款信息
      • 查看付款信息
      • 查询付款申请列表
    • 付款计划
      • 同步付款记录
      • 搜索付款计划
    • 付款记录
      • 创建付款记录
      • 更新付款记录
      • 查询付款记录详情
      • 根据付款计划id查询付款记录
    • 审批管理
      • 发起流程审批
      • 查询审批实例详情
    • 合同权限管理
      • 授予合同权限
      • 合同分享
    • 文件
      • 生成合同打印文件
    • 合同协商
      • 查询合同协商邀请链接
    • 电子签
      • 获取个人认证&授权页面链接
      • 获取机构认证&授权页面链接
    • 审批事件
      • 审批-待办任务变更
      • 审批-抄送、知会状态变更
    • 事件ip
      • 获取事件出口IP
    • 审批矩阵
      • 矩阵-预发布规则表配置
      • 矩阵-发布规则表配置
      • 矩阵-查询规则表列表
      • 矩阵-查询规则表列头信息
      • 矩阵-创建规则表行
      • 矩阵-删除规则表行
      • 矩阵-修改规则表行
      • 矩阵-根据行ID查询规则表单行信息
      • 矩阵-根据筛选条件查询规则表行信息列表
      • 矩阵-查询规则表行信息列表
  • 智书主数据
    • 固定汇率
      • 更新固定汇率
      • 查询固定汇率
    • 交易方
      • 事件
        • 交易方-基础信息变更
        • 交易方-公司视图变更
        • 交易方-联系人变更
        • 交易方-经营地址变更
        • 交易方-银行账户变更
      • 创建交易方
      • 更新交易方
      • 获取交易方
      • 获取单个交易方信息
      • 获取交易方全量数据
      • 根据证件id精确查询交易方
      • 字段配置查询
    • 法人实体
      • 创建法人实体
      • 更新法人实体信息
      • 获取法人实体
      • 获取单个法人实体信息
      • 获取法人实体全量数据
    • 文件
      • 下载主数据附件
  • 第三方系统相关配置
    • 关联单据
      • 关联前置单据
    • 外部数据回填
      • 表单字段回填
      • 审批人回填
    • 外部校验
      • 外部校验
  1. 订阅流程

接收并处理事件

接收并处理事件#

为了提升事件订阅的安全性,接收到开放平台推送的事件后,可以进行安全校验。如果是加密事件,需要先解密事件,再解析事件详情。

安全校验#

业务方收到开放平台推送的事件时(不包括请求网址校验),如果需要确保这个请求的来源是开放平台而非伪造,有两种方式进行安全校验:Verification Token 校验和签名校验。

Verification Token 校验#

这种校验方式简单,但是安全性较低:
如果是加密事件,需要解密和解析事件,获取 Verification Token 进行校验。
请参考本文下方的事件解密,了解如何解密事件;可以向智书客服询问并且索要 Verification Token,并且与事件中解析出的 Verification Token 进行对比。
如果是未加密事件,需要解析事件,获取 Verification Token 进行校验。明文传输会有 Verification Token 泄露风险。

签名校验#

这种校验方式相对复杂,但是安全性高,不需要解密和解析事件。校验方式如下:
向智书客服询问并且索要 encrypt_key。
1.
校验请求来源:
将请求头 X-Lark-Request-Timestamp、X-Lark-Request-Nonce 与 encrypt_key 拼接后 按照 encode('utf-8') 编码得到 byte[] b1,再拼接上请求的原始 body, 得到一个 byte[] b。
将 b 用 sha256 算法得到字符串 s, 校验 s 是否和请求头 X-Lark-Signature 一致。

示例代码#

下面的示例代码,包括如下参数:
timestamp:对应请求头中的 X-Lark-Request-Timestamp。
nonce:对应请求头中的 X-Lark-Request-Nonce。
encrypt_key:从开发者后台获取的 Encrypt Key。有关 Encrypt Key 的详细介绍,可以参考获取 Encrypt Key。

Python 3#

Java#

Golang#

Node.js#

C##

PHP#

事件解密#

加密原理#

事件内容采用 AES-256-CBC 加密,加密原理如下:
1.
使用 SHA256 对 Encrypt Key进行哈希得到密钥key。
2.
使用 PKCS7Padding 方式将事件内容进行填充。
3.
生成 16 字节的随机数作为初始向量 iv。
4.
使用 iv 和 key 对事件内容加密得到 encrypted_event。
5.
应用收到的密文为 base64(iv+encrypted_event)。

示例代码#

当订阅的消息事件发生时,就会触发回调,应用将收到加密的事件内容,请参考下面的示例代码进行事件解密,获取事件内容。

Python 3#

请先执行 pip install pycryptodome 以支持引入 AES 方法

Java#

Golang#

Node.js#

C##

PHP#

事件解密#

加密原理#

事件内容采用 AES-256-CBC 加密,加密原理如下:
1.
使用 SHA256 对 Encrypt Key进行哈希得到密钥key。
2.
使用 PKCS7Padding 方式将事件内容进行填充。
3.
生成 16 字节的随机数作为初始向量 iv。
4.
使用 iv 和 key 对事件内容加密得到 encrypted_event。
5.
应用收到的密文为 base64(iv+encrypted_event)。

示例代码#

当订阅的消息事件发生时,就会触发回调,应用将收到加密的事件内容,请参考下面的示例代码进行事件解密,获取事件内容。

Python 3#

请先执行 pip install pycryptodome 以支持引入 AES 方法

Java#

Golang#

Node.js#

C##

PHP#

修改于 2025-11-11 07:30:41
上一页
添加事件
下一页
配置订阅方式
Built with