对接企业微信审批流程
NineData 平台支持与企业微信审批系统深度集成,实现任务(权限申请、SQL 变更、数据导出/导入等)在企业微信内完成发起、审批、撤销等全流程操作。
前提条件
- 已创建或加入组织,并且该组织已开通数据库 DevOps 企业版,同时请确保您的包年包月订阅未过期。
- 当前账号已切换到目标组织。更多信息,请参见切换到组织。
- 已通过企业管理员账号登录企业微信平台。
- 您使用的 NineData 为专属集群版本。
- 已在 NineData 平台具有系统管理员权限。
- 企业微信后台已配置组织架构、员工手机号或账号。
步骤一:在企业微信创建自建应用
需要在企业微信中获取以下四个参数:
- corpId
- appSecret
- token
- encodingAesKey
子步骤 1:创建应用
- 使用企业管理员账号登录企业微信平台。
- 在左侧导航中选择【应用管理】>【应用管理】,拖动页面到下方,找到【自建】区域,单击【创建应用】。
- 在创建界面填写以下内容,单击【保存】,自动跳转至应用详情页。
- 【应用logo】:上传对应的图标。
- 【应用名称】:例如
NineData-审批集成。 - 【应用描述】(可选):例如
用于 NineData 任务审批流程对接。 - 【可见范围】:选择使用审批流程的部门或成员。
子步骤 2:配置回调信息
在新创建的应用详情页下方的【开发者接口】区域,单击【网页授权及JS-SDK】下方的【设置可信域名】,根据下方提示配置各项参数,然后单击【确定】。

参数 说明 可作为应用OAuth2.0网页授权功能的回调域名 输入您服务器的域名。例如: wx.qq.com。配置可信域名需完成域名归属认证 单击右侧的【申请校验域名】,下载企业微信提供的验证文件。根据提示将该文件放置到服务器根路径,使其可被企业微信直接访问。 单击【企业可信IP】下方的【配置】,输入您 NineData 服务器的公网 IP 地址,单击【确定】,以允许 NineData 调用企业微信的接口。
子步骤3:记录关键信息
返回应用详情页顶部,在【基础信息】区域可看到企业微信为此应用分配的关键字段。请记录以下内容:
| 字段名称 | 说明 |
|---|---|
| CorpID | 企业唯一标识,用于调用企业微信各类 OpenAPI 接口。 1. 在左侧导航栏单击【我的企业】。 2. 在【企业信息】页面,滚动到最下方,记录【企业ID】即可。 ![]() |
| appSecret | 自建应用的调用密钥,用于后台调用审批类接口时鉴权,是核心凭证,请妥善保管。 1. 在左侧导航栏单击【应用管理】>【应用管理】。 2. 在【应用】页面,单击进入目标自建应用。 3. 在应用详情页,点击 【Secret】右侧的查看。 ![]() |
| Token|EncodingAESKey | 为了使企业微信能将审批状态实时推送给 NineData,需要为自建应用配置消息回调接口。因此需要生成对接所需的 Token 和 EncodingAESKey。 1. 在左侧导航栏单击【应用管理】>【应用管理】。 2. 在【应用】页面,单击【接收消息】中的【设置API接收】。 3. 在【API接收消息】页,点击 【Token】和【EncodingAESKey】右侧的【随机获取】。 ![]() |
步骤二:在企业微信创建审批模板
通过企业管理员账号登录企业微信审批应用详情页。
在【模版管理】下方,单击【添加模版】,然后单击【自定义模版】。
在【模版设置】页面,根据实际需求设计表单样式,单击【下一步】。更多信息,请参见官方文档。

在【规则设置】页签,根据企业的组织架构设计审批流程。更多信息,请参见官方文档。
注意配置【审批人】时,请勿选择【申请人自选】,否则企业微信 API 调用会失败。

模板必须设置可见范围,否则同样会导致流程发起失败。建议将包含了所有需要提交审批人员的组织设置为可见范围。

配置完成后,在当前表单页面中,记录 URL 后段的 ID。

步骤三:在审批应用中为审批模版和应用授权
使用企业管理员账号登录企业微信平台。
在左侧导航中选择【应用管理】>【应用管理】,找到并单击【审批】应用。
在应用详情页面,单击 API 按钮。

在【开启回调通知的模版】右侧,单击【设置】,并添加步骤二中创建的审批模版。

在【可调用接口的应用】右侧,单击【修改】,选择步骤一中新建的应用,然后单击【确认】。

步骤四:在 NineData 平台绑定企业微信应用
登录 NineData 控制台。
在左侧导航栏,单击数据库 DevOps>规范与流程。
单击审批流程页签,然后单击页面右侧的外部流程渠道。
单击添加外部审批渠道,在弹出的窗口中,输入如下几项参数,单击确定完成应用绑定。
参数 说明 审批渠道名称 自定义审批渠道的名称,用于在 NineData 平台中区分不同的外部审批系统。示例: 企微审批流程。审批渠道类型 选择外部审批渠道的类别,此处选择企微。NineData 会根据该类型调用对应的 API 接口逻辑。 企业 ID 企业微信的唯一企业标识。NineData 使用此 ID 获取 access_token 并对接审批 API。对应步骤一 > 子步骤 3 中获取的 Crop ID。 AppSecret NineData 使用 AppSecret + CorpID 来获取企业微信 access_token,是调用审批接口的核心凭证。对应步骤一 > 子步骤 3 中获取的 AppSecret。 签名 Token 用于校验企业微信回调消息的真实性。NineData 会用 Token 对消息进行 SHA1 校验,避免假冒请求。对应步骤一 > 子步骤 3 中获取的 Token。 Encoding AesKey 用于解密企业微信推送的审批事件内容。NineData 必须使用该密钥解密审批通知。对应步骤一 > 子步骤 3 中获取的 Encoding AesKey。 单击新绑定的应用 ID,记录页面底部的回调地址(用于在企业微信端配置回调地址,必须为公网可以访问的 URL 地址)。
回到 NineData 页面,单击审批流程映射定义页签,然后单击添加审批流程定义,根据下表配置参数。
参数 说明 关联应用 选择刚绑定的应用。 名称 自定义审批流程映射名称。 审批定义ID 企业微信管理后台中创建的审批模版的 ID。对应步骤二最后一步中获取的表单 ID。 审批流程配置 本配置可根据实际业务详细定义审批流程中的每一个节点,并通过测试功能实际测试流程是否能走通。各流程的配置示例,请参见本文附录一。 单击确定完成配置。
步骤五(可选):配置回调地址
使用企业管理员账号登录企业微信平台。
在左侧导航中选择【应用管理】>【应用管理】,单击目标应用名称。
在【应用】页面,单击【接收消息】中的【设置API接收】。
在【API接收消息】页,根据下表进行配置,然后单击【保存】。
参数 说明 URL 填写 NineData 中记录的回调地址。 Token 填写步骤一中获取的 Token。 EncodingAESKey 填写步骤一中获取的 EncodingAESKey。 选择需要接收的消息事件类型 根据实际需求进行选择。
步骤六:绑定审批流程
登录 NineData 控制台。
在左侧导航栏,单击数据库 DevOps>规范与流程。
单击审批流程页签,找到目标需要启用企业微信审批的审批流程,单击流程名称,进入审批流程详情页面。
单击需配置的任务类型页签,然后单击目标流程右侧的编辑。勾选编辑流程页面下方的启动外部审批流程,在下方左侧选框中选择企业微信应用,然后在右侧选择对应的企业微信流程 ID,单击确定即可。

附录一:NineData 审批流程配置脚本示例
Token 获取(必填):通过企业微信中创建的应用认证信息,获取 Token。仅需将
CORP_ID和APP_SECRET替换成步骤一中获取的 corpId 和 appSecret。
创建审批任务(必填):NineData 使用该接口把任务数据提交到企业微信,企业微信在指定审批模板上创建实例并进入审批流。仅需要在脚本中定义表单格式部分,将 NineData 平台内部任务字段(如任务名称、数据库名、审批理由等)与外部审批模板字段(前面创建的企业微信审批表单)进行字段映射即可。
需要注意的是,这里需要调用企业微信的一个接口,获取企业微信上创建的审批模版中每个字段的 ID,通过这些 ID 在 NineData 平台进行映射。流程如下:
在命令行中执行如下命令调用接口:
curl --location 'https://qyapi.weixin.qq.com/cgi-bin/oa/gettemplatedetail?access_token=<输入获取的 Token>' \--header 'Content-Type: application/json' \
--data '{
"template_id" : "<输入企业微信中创建的审批模版 ID>"
}'返回成功示例如下:
"property": {
"control": "Text",
"id": "Text-1761276038201",
"title": [{
"text": "任务id",
"lang": "zh_CN"
}],
"placeholder": [{
"text": "这是任务id",
"lang": "zh_CN"
}],
}取其中的
id字段进行字段映射。回到 NineData 控制台,单击创建审批任务,展开代码编辑器,把上述接口获取到的
id与代码中的 NineData 各字段进行映射。
说明字段映射:
fluentPut中的id必须对应接口返回的目标字段id。变量参数:
fluentPut中的text请参考附录二。保留 InstanceID:成功完成当前流程的测试后,可以保留返回的 approvalInstanceId,以继续测试撤回审批任务。

示例:
fromField.add(new JSONObject().fluentPut("control","Text").fluentPut("id","Text-1761276038201").fluentPut("value",new JSONObject().fluentPut("text",TASK_ID)))
fromField.add(new JSONObject().fluentPut("control","Text").fluentPut("id","Text-1761276049525").fluentPut("value",new JSONObject().fluentPut("text",TASK_NAME)))
fromField.add(new JSONObject().fluentPut("control","Textarea").fluentPut("id","Textarea-1761276087272").fluentPut("value",new JSONObject().fluentPut("text",COMMENT)))
JSONObject dsMapping = new JSONObject();
dsMapping.put("sqlTask", "option-1761276061763");
dsMapping.put("dataExport", "option-1761276061764");
String option = dsMapping.getString(TASK_TYPE);
if(option == null) {
option = "sqlTask";
}
fromField.add(new JSONObject().fluentPut("control","Selector").fluentPut("id","Selector-1761276061763").fluentPut("value",new JSONObject().fluentPut("selector",new JSONObject().fluentPut("type","single").fluentPut("options",new JSONArray().fluentAdd(new JSONObject().fluentPut("key",option))))))
submitBody.put("summary_list",new JSONArray())
submitBody.getJSONArray("summary_list").fluentAdd(new JSONObject().fluentPut("summary_info",new JSONArray().fluentAdd(new JSONObject().fluentPut("text",TASK_NAME).fluentPut("lang","zh_CN"))))撤回审批任务(选填):在审批尚未结束时,可以通过审批流程的实例 ID(approvalInstanceId)撤销已发起的审批流程实例。
本流程无需更改脚本,测试仅需传入
accessToken和目标审批流程的approvalInstanceId即可。{
"ACCESS_TOKEN": "<输入获取的 Token>",
"APPROVAL_INSTANCE_ID": "<输入审批流程的实例 ID>"
}
注意该流程仅将撤回 NineData 平台中的工单,当前无法作用于企业微信中已创建的工单。您需要手动在企业微信中关闭工单(通过或驳回)。
回调审批任务通知(选填):企业微信在审批流程发生关键状态变更(通过、拒绝、终止、转交、抄送等)时,会主动向 NineData 提供的
callback URL发送事件通知,NineData 需解析并映射回内部任务状态。本流程无需更改脚本及测试,保持默认即可。
同步审批任务状态(必填):当需要主动确认审批进度或获取更详细信息(表单、操作记录、审批人等)时,使用本流程。
本流程无需更改脚本,测试仅需传入
accessToken和目标审批流程的approvalInstanceId即可。
附录二:表单项参数列表
| 变量编码 | 变量含义 |
|---|---|
| TASK_NAME | 任务名称 |
| TASK_ID | 任务 ID |
| TASK_TYPE | 任务类型 |
| TASK_SUBTYPE | 子类型 |
| COMMENT | 备注 |
| ENV_NAME | 环境 |
| DATASOURCE_NAME | 数据源名称 |
| DATASOURCE_URL | 数据源链接地址 |
| DATABASE | 数据库名称 |
| EXPORT_METHOD | 导出方式 |
| EXPORT_CONTENT | 导出内容 |
| REASON | 原因 |
| AUTH_TYPE | 申请类型 |
| SUBMITTER | 提交人 |
| SQL_CONTENT | SQL 文本 |
| TASK_URL | 任务申请地址 |
| FILE_TYPE | 导出/导入 文件类型 |
| AUTH_SENSITIVE | 敏感列 |
| AUTH_EXPIRATION_TIME | 权限有效期 |
| AUTH_APPLY_TYPE | 权限类型 |
| CREATE_TIME | 提交时间 |
| EST_AFFECTED_ROWS | 预估影响行数 |
| AUTH_APPLY_OBJECT_DB | 申请库 |
| AUTH_APPLY_OBJECT_TB | 申请表 |
| DATASOURCE_ID | 数据源 ID |
| EXECUTOR | 执行人 |
| EXPORT_OBJECT | 导出对象 |
| TASK_DETAILS | 任务详情 |
| SUBMITER_PHONE | 提交人手机号 |
| APPROVAL_CODE | 外部审批模板编码 |
附录三:NineData 任务类型与子类型
| 任务类型 | 子类型 |
|---|---|
| SQL任务(含结构设计与发布) | 必须改进 |
| 建议改进 | |
| 符合规范 | |
| 权限申请 | 数据源 |
| 库 | |
| 表 | |
| 敏感等级S1 | |
| 敏感等级S2 | |
| 敏感等级S3 | |
| 敏感等级S4 | |
| 敏感等级S5 | |
| 数据导出 | SQL导出 |
| 导出库 | |
| 导出表 | |
| 数据导入 | 极速模式 |
| 数据生成 | 数据生成 |
| 数据追踪与回滚 | 数据追踪与回滚 |
| 数据归档与清理 | 清理 |
| 归档 | |
| 清理+归档 | |
| SQL代码审核 | SQL审核-推荐索引 |
| SQL审核-必须改进 | |
| SQL审核-建议改进 | |
| SQL审核-符合规范 |


