Skip to main content

对接企业微信审批流程

NineData 平台支持与企业微信审批系统深度集成,实现任务(权限申请、SQL 变更、数据导出/导入等)在企业微信内完成发起、审批、撤销等全流程操作。

前提条件

  • 已创建或加入组织,并且该组织已开通数据库 DevOps 企业版,同时请确保您的包年包月订阅未过期。
  • 当前账号已切换到目标组织。更多信息,请参见切换到组织
  • 已通过企业管理员账号登录企业微信平台
  • 您使用的 NineData 为专属集群版本。
  • 已在 NineData 平台具有系统管理员权限。
  • 企业微信后台已配置组织架构、员工手机号或账号。

步骤一:在企业微信创建自建应用

本步骤的目的

需要在企业微信中获取以下四个参数:

  • corpId
  • appSecret
  • token
  • encodingAesKey

子步骤 1:创建应用

  1. 使用企业管理员账号登录企业微信平台
  2. 在左侧导航中选择【应用管理】>【应用管理】,拖动页面到下方,找到【自建】区域,单击【创建应用】。
  3. 在创建界面填写以下内容,单击【保存】,自动跳转至应用详情页。
    • 【应用logo】:上传对应的图标。
    • 【应用名称】:例如 NineData-审批集成
    • 【应用描述】(可选):例如 用于 NineData 任务审批流程对接
    • 【可见范围】:选择使用审批流程的部门或成员。

子步骤 2:配置回调信息

  1. 在新创建的应用详情页下方的【开发者接口】区域,单击【网页授权及JS-SDK】下方的【设置可信域名】,根据下方提示配置各项参数,然后单击【确定】。

    image-20251126152918151

    参数说明
    可作为应用OAuth2.0网页授权功能的回调域名输入您服务器的域名。例如:wx.qq.com
    配置可信域名需完成域名归属认证单击右侧的【申请校验域名】,下载企业微信提供的验证文件。根据提示将该文件放置到服务器根路径,使其可被企业微信直接访问。
  2. 单击【企业可信IP】下方的【配置】,输入您 NineData 服务器的公网 IP 地址,单击【确定】,以允许 NineData 调用企业微信的接口。

子步骤3:记录关键信息

返回应用详情页顶部,在【基础信息】区域可看到企业微信为此应用分配的关键字段。请记录以下内容:

字段名称说明
CorpID企业唯一标识,用于调用企业微信各类 OpenAPI 接口。
1. 在左侧导航栏单击【我的企业】。
2. 在【企业信息】页面,滚动到最下方,记录【企业ID】即可。image-20251127160513684
appSecret自建应用的调用密钥,用于后台调用审批类接口时鉴权,是核心凭证,请妥善保管。
1. 在左侧导航栏单击【应用管理】>【应用管理】。
2. 在【应用】页面,单击进入目标自建应用。
3. 在应用详情页,点击 【Secret】右侧的查看。image-20251127161916995
Token|EncodingAESKey为了使企业微信能将审批状态实时推送给 NineData,需要为自建应用配置消息回调接口。因此需要生成对接所需的 TokenEncodingAESKey
1. 在左侧导航栏单击【应用管理】>【应用管理】。
2. 在【应用】页面,单击【接收消息】中的【设置API接收】。
3. 在【API接收消息】页,点击 【Token】和【EncodingAESKey】右侧的【随机获取】。image-20251127164720172

步骤二:在企业微信创建审批模板

  1. 通过企业管理员账号登录企业微信审批应用详情页

  2. 在【模版管理】下方,单击【添加模版】,然后单击【自定义模版】。

  3. 在【模版设置】页面,根据实际需求设计表单样式,单击【下一步】。更多信息,请参见官方文档

    image-20251126171751494

  4. 在【规则设置】页签,根据企业的组织架构设计审批流程。更多信息,请参见官方文档

    image-20251126174033425

    注意
    • 配置【审批人】时,请勿选择【申请人自选】,否则企业微信 API 调用会失败。

      image-20251126180953618

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

      image-20251126182824581

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

    image-20251127183107618

步骤三:在审批应用中为审批模版和应用授权

  1. 使用企业管理员账号登录企业微信平台

  2. 在左侧导航中选择【应用管理】>【应用管理】,找到并单击【审批】应用。

  3. 在应用详情页面,单击 API 按钮。

    image-20251201182822970

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

    image-20251201183005490

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

    image-20251201183133365

步骤四:在 NineData 平台绑定企业微信应用

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击数据库 DevOps>规范与流程

  3. 单击审批流程页签,然后单击页面右侧的外部流程渠道

  4. 单击添加外部审批渠道,在弹出的窗口中,输入如下几项参数,单击确定完成应用绑定。

    参数说明
    审批渠道名称自定义审批渠道的名称,用于在 NineData 平台中区分不同的外部审批系统。示例:企微审批流程
    审批渠道类型选择外部审批渠道的类别,此处选择企微。NineData 会根据该类型调用对应的 API 接口逻辑。
    企业 ID企业微信的唯一企业标识。NineData 使用此 ID 获取 access_token 并对接审批 API。对应步骤一 > 子步骤 3 中获取的 Crop ID
    AppSecretNineData 使用 AppSecret + CorpID 来获取企业微信 access_token,是调用审批接口的核心凭证。对应步骤一 > 子步骤 3 中获取的 AppSecret
    签名 Token用于校验企业微信回调消息的真实性。NineData 会用 Token 对消息进行 SHA1 校验,避免假冒请求。对应步骤一 > 子步骤 3 中获取的 Token
    Encoding AesKey用于解密企业微信推送的审批事件内容。NineData 必须使用该密钥解密审批通知。对应步骤一 > 子步骤 3 中获取的 Encoding AesKey
  5. 单击新绑定的应用 ID,记录页面底部的回调地址(用于在企业微信端配置回调地址,必须为公网可以访问的 URL 地址)。

  6. 回到 NineData 页面,单击审批流程映射定义页签,然后单击添加审批流程定义,根据下表配置参数。

    参数说明
    关联应用选择刚绑定的应用。
    名称自定义审批流程映射名称。
    审批定义ID企业微信管理后台中创建的审批模版的 ID。对应步骤二最后一步中获取的表单 ID
    审批流程配置本配置可根据实际业务详细定义审批流程中的每一个节点,并通过测试功能实际测试流程是否能走通。各流程的配置示例,请参见本文附录一
  7. 单击确定完成配置。

步骤五(可选):配置回调地址

  1. 使用企业管理员账号登录企业微信平台

  2. 在左侧导航中选择【应用管理】>【应用管理】,单击目标应用名称。

  3. 在【应用】页面,单击【接收消息】中的【设置API接收】。

  4. 在【API接收消息】页,根据下表进行配置,然后单击【保存】。

    参数说明
    URL填写 NineData 中记录的回调地址
    Token填写步骤一中获取的 Token
    EncodingAESKey填写步骤一中获取的 EncodingAESKey
    选择需要接收的消息事件类型根据实际需求进行选择。

步骤六:绑定审批流程

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击数据库 DevOps>规范与流程

  3. 单击审批流程页签,找到目标需要启用企业微信审批的审批流程,单击流程名称,进入审批流程详情页面。

  4. 单击需配置的任务类型页签,然后单击目标流程右侧的编辑。勾选编辑流程页面下方的启动外部审批流程,在下方左侧选框中选择企业微信应用,然后在右侧选择对应的企业微信流程 ID,单击确定即可。

    image-20251201184427059

附录一:NineData 审批流程配置脚本示例

  • Token 获取(必填):通过企业微信中创建的应用认证信息,获取 Token。仅需将 CORP_IDAPP_SECRET 替换成步骤一中获取的 corpIdappSecret

    image-20251128181818209

  • 创建审批任务(必填):NineData 使用该接口把任务数据提交到企业微信,企业微信在指定审批模板上创建实例并进入审批流。仅需要在脚本中定义表单格式部分,将 NineData 平台内部任务字段(如任务名称、数据库名、审批理由等)与外部审批模板字段(前面创建的企业微信审批表单)进行字段映射即可。

    需要注意的是,这里需要调用企业微信的一个接口,获取企业微信上创建的审批模版中每个字段的 ID,通过这些 ID 在 NineData 平台进行映射。流程如下:

    1. 在命令行中执行如下命令调用接口:

      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 字段进行字段映射。

    2. 回到 NineData 控制台,单击创建审批任务,展开代码编辑器,把上述接口获取到的 id 与代码中的 NineData 各字段进行映射。

    说明
    • 字段映射fluentPut 中的 id 必须对应接口返回的目标字段 id

    • 变量参数fluentPut 中的 text 请参考附录二

    • 保留 InstanceID:成功完成当前流程的测试后,可以保留返回的 approvalInstanceId,以继续测试撤回审批任务

      image-20251201165832726

    示例:

    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>"
    }

    image-20251103144909099

    注意

    该流程仅将撤回 NineData 平台中的工单,当前无法作用于企业微信中已创建的工单。您需要手动在企业微信中关闭工单(通过或驳回)。

  • 回调审批任务通知(选填):企业微信在审批流程发生关键状态变更(通过、拒绝、终止、转交、抄送等)时,会主动向 NineData 提供的 callback URL 发送事件通知,NineData 需解析并映射回内部任务状态。

    本流程无需更改脚本及测试,保持默认即可。

  • 同步审批任务状态(必填):当需要主动确认审批进度或获取更详细信息(表单、操作记录、审批人等)时,使用本流程。

    本流程无需更改脚本,测试仅需传入 accessToken 和目标审批流程的 approvalInstanceId 即可。

    image-20251201183439851

附录二:表单项参数列表

变量编码
变量含义
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_CONTENTSQL 文本
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审核-符合规范