审批接口.md 19.7 KB

[toc]

审批对接API

则一提供了不同规范的API,调用服务端API前,需了解开发前须知及调用流程。本文提供了调用则一服务端API示例,供开发者参考。

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">白名单

则一服务端API接口访问有IP白名单限制,需要接口调用方提供调用API的服务器IP地址。

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">数据加签

采用md5(32位小写)算法生成签名 appKey(则一提供) + appSecret(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(请求数据)

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">生成签名示例

public static String getMD5Lower(String input) {
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] digest = md.digest(input.getBytes());
    StringBuilder sb = new StringBuilder();
    for (byte b : digest) {
        String hex = Integer.toHexString(b & 0xff);
        if (hex.length() == 1) {
            sb.append("0");
        }
        sb.append(hex);
    }
    return sb.toString();
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">数据加密

数据加密采用AES算法 加密模式: CBC 填充方式:PKCS5Padding 加密内容:data(加密数据) 密钥:aesSecret(则一提供) 输出:base64 字符集:utf-8 注:无敏感数据则无需加密

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">数据加密示例

public static String encrypt(String plaintext, String aesSecret) {
    byte[] keyBytes = Base64.getDecoder().decode(keyBase64);
    SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
    byte[] iv = new byte[16];
    SecureRandom secureRandom = new SecureRandom();
    secureRandom.nextBytes(iv);
    IvParameterSpec ivParam = new IvParameterSpec(iv);
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(1, secretKey, ivParam);
    byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
    byte[] result = new byte[16 + ciphertext.length];
    System.arraycopy(iv, 0, result, 0, 16);
    System.arraycopy(ciphertext, 0, result, 16, ciphertext.length);
    return Base64.getEncoder().encodeToString(result);
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">业务接口

  • 1.发起审批
  • 2.撤销审批
  • 3.审批回调

1.发起审批

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">简要描述

发起审批接口,接收金润发起审批请求数据

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">调用方式

金润---->则一

请求URL

· 测试环境:https://test.shjiuze.cn/tms-service-api/audit/send

· 生产环境:https://gw.shjiuze.cn/tms-service-api/audit/send

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">请求方式

  • POST
  • Content-Type: application/json

Headers参数

名称 类型 必填 示例值 描述
appKey String 0867ef5f23ef446483749e19e1692b40 则一提供
timestamp String 1643251533306 当前时间戳毫秒值
nonce String gdst9t 6位小写字母数字组合随机串
sign String fa3ed338d6dfe18e7273c8692234ee70 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成

Body参数

参数名 必传 类型 说明
code string 审批单号(确定数据唯一性,同一单号最多只能有1个审核通过或审核中的审批)
auditType string 审批类型(则一提供)
username string 发起人工号(则一员工工号)
auditFormList array 审批表单字段列表
    type string 字段类型(1.text 文本格式 2.file 文件格式)
    name string 字段名称
    value string 字段值(文本格式对应文本内容, 文件格式对应文件url)
    extendValue string 字段附加值
conditionParamList array 条件参数字段列表
    name string 属性名
    value string 属性值

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">返回参数

参数名 必传 类型 说明
success boolean 是否成功, true表示请求成功, false表示产生了异常
businessException boolean 是否业务异常, false表示无业务异常, true表示产生了业务异常
errorCode string 错误码
message string 异常原因
result object 返回结果数据, 请求成功返回,异常不返回
    code string 审批单号
    auditId string 审批ID

请求Body示例

{
  "code": "JR202510110000001",
  "auditType": "JINRUN_VEHICLE_FEE_AUDIT",
  "username": "001073",
  "auditFormList": [
    {
      "type": "text",
      "name": "feeType",
      "value": "车辆保险费用"
    },
    {
      "type": "text",
      "name": "applyAmount",
      "value": "200000"
    },
    {
      "type": "file",
      "name": "billAttachment",
      "value": "https://example.com/path/1.jpg"
    }
  ],
  "conditionParamList": [
    {
      "name": "businessType",
      "value": "BULK_BUSINESS_TYPE"
    }
  ]
}

请求示例Java-SDK方式

下载SDK
public static void main(String[] args) {
    String appKey = "bd95591ce63f4a78a54658c2d8ad5ff6";
    String appSecret = "734a18117f614e60859efb8eea27c680";
    String aesSecret = "wJ3472SLpkZLnjtwMArhRg==";
    ZYClient zyClient = new ZYClient(appKey, appSecret);
    String data = "{\n" +
            "  \"code\": \"JR202510200000003\",\n" +
            "  \"auditType\": \"JINRUN_VEHICLE_FEE_AUDIT\",\n" +
            "  \"username\": \"001073\",\n" +
            "  \"auditFormList\": [\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"feeType\",\n" +
            "      \"value\": \"车辆保险费用\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"applyAmount\",\n" +
            "      \"value\": \"200000\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"file\",\n" +
            "      \"name\": \"billAttachment\",\n" +
            "      \"value\": \"https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/image/tms/d05b7f1b-1844-49b6-9931-11ac4cd783ea.jpg\"\n" +
            "    }\n" +
            "  ],\n" +
            "  \"conditionParamList\": [\n" +
            "    {\n" +
            "      \"name\": \"businessType\",\n" +
            "      \"value\": \"BULK_BUSINESS_TYPE\"\n" +
            "    }\n" +
            "  ]\n" +
            "}";
    HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + "/tms-service-api/audit/send", AesUtils.encrypt(data, aesSecret));
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">完整示例

 public static void main(String[] args) throws Exception {
    String appKey = "bd95591ce63f4a78a54658c2d8ad5ff6";
    String appSecret = "734a18117f614e60859efb8eea27c680";
    String aesSecret = "wJ3472SLpkZLnjtwMArhRg==";
    ZYClient zyClient = new ZYClient(appKey, appSecret);
    String data = "{\n" +
            "  \"code\": \"JR2025110600000015\",\n" +
            "  \"auditType\": \"JINRUN_VEHICLE_FEE_AUDIT\",\n" +
            "  \"username\": \"001073\",\n" +
            "  \"auditFormList\": [\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"billCode\",\n" +
            "      \"value\": \"FYBX251106001\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"billMonth\",\n" +
            "      \"value\": \"2025-11\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"amount\",\n" +
            "      \"value\": \"2100\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"detail\",\n" +
            "      \"value\": \"[[{\\\"name\\\":\\\"车牌号\\\",\\\"value\\\":\\\"沪A11111\\\"},{\\\"name\\\":\\\"费用类型\\\",\\\"value\\\":\\\"行车费用\\\"},{\\\"name\\\":\\\"项目\\\",\\\"value\\\":\\\"宁德项目\\\"},{\\\"name\\\":\\\"备注\\\",\\\"value\\\":\\\"沪A11111 2025年11月6号住宿费\\\"}]]\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"paySubject\",\n" +
            "      \"value\": \"金润\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"accountName\",\n" +
            "      \"value\": \"大车队长有限公司\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"accountNo\",\n" +
            "      \"value\": \"6220022221000221\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"openBankName\",\n" +
            "      \"value\": \"浦东发展银行\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"openBankBranchName\",\n" +
            "      \"value\": \"浦发银行青浦支行\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"text\",\n" +
            "      \"name\": \"remark\",\n" +
            "      \"value\": \"账单备注\"\n" +
            "    },\n" +
            "    {\n" +
            "      \"type\": \"file\",\n" +
            "      \"name\": \"billAttachment\",\n" +
            "      \"value\": \"https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/image/tms/d05b7f1b-1844-49b6-9931-11ac4cd783ea.jpg\"\n" +
            "    }\n" +
            "  ],\n" +
            "  \"conditionParamList\": [\n" +
            "    {\n" +
            "      \"name\": \"businessType\",\n" +
            "      \"value\": \"BULK_BUSINESS_TYPE\"\n" +
            "    }\n" +
            "  ]\n" +
            "}";
    HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + "/tms-service-api/audit/send", AesUtils.encrypt(data, aesSecret));
    System.out.println(JSONUtil.toJsonStr(httpResponseData));
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">返回示例

{
    "success": true, // true表示请求成功, false表示产生了异常,需要看messge异常原因
    "businessException": false, // false表示无业务异常, true表示产生了业务异常,需要看messge异常原因
    "errorCode": null,
    "message": null,
    "result": {
      "code": "JR202510110000001",                  // 审批单号
      "auditId": "2369f6c4c15440cdada803047d664546" // 审批ID
    }
}

2.撤销审批

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">简要描述

撤销审批接口,接收金润撤销审批请求数据

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">调用方式

金润---->则一

请求URL

· 测试环境:https://test.shjiuze.cn/tms-service-api/audit/cancel

· 生产环境:https://gw.shjiuze.cn/tms-service-api/audit/cancel

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">请求方式

  • POST
  • Content-Type: application/json

Headers参数

名称 类型 必填 示例值 描述
appKey String 0867ef5f23ef446483749e19e1692b40 则一提供
timestamp String 1643251533306 当前时间戳毫秒值
nonce String gdst9t 6位小写字母数字组合随机串
sign String fa3ed338d6dfe18e7273c8692234ee70 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成

Body参数

参数名 必传 类型 说明
code string 审批单号(确定数据唯一性)
auditId string 审批ID
auditType string 审批类型(则一提供)
remark string 撤销原因
username string 撤销人员工号(发起人则一员工工号, 不传则为系统撤销)

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">返回参数

参数名 必传 类型 说明
success boolean 是否成功, true表示请求成功, false表示产生了异常
businessException boolean 是否业务异常, false表示无业务异常, true表示产生了业务异常
errorCode string 错误码
message string 异常原因
result object 返回结果数据, 请求成功返回,异常不返回
    code string 审批单号
    auditId string 审批ID

请求Body示例

{
  "code": "JR202510110000001",
  "auditId": "2369f6c4c15440cdada803047d664546",
  "auditType": "BILL_APPLY_PAY_AUDIT",
  "remark": "付款金额错误, 撤销重新提交",
  "username": "001001"
}

请求示例Java-SDK方式

下载SDK
public static void main(String[] args) {
    String appKey = "bd95591ce63f4a78a54658c2d8ad5ff6";
    String appSecret = "734a18117f614e60859efb8eea27c680";
    String aesSecret = "wJ3472SLpkZLnjtwMArhRg==";
    ZYClient zyClient = new ZYClient(appKey, appSecret);
    String data = "{\n" +
            "  \"code\": \"JR202510200000002\",\n" +
            "  \"auditId\": \"LgXYezIUQYC1WxnzMpZatA03781760922998\",\n" +
            "  \"auditType\": \"JINRUN_VEHICLE_FEE_AUDIT\",\n" +
            "  \"remark\": \"付款金额错误, 撤销重新提交\",\n" +
            "  \"username\": \"001073\"\n" +
            "}";
    HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + "/tms-service-api/audit/cancel", AesUtils.encrypt(data, aesSecret));
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">返回示例

{
  "success": true, // true表示请求成功, false表示产生了异常,需要看messge异常原因
  "businessException": false, // false表示无业务异常, true表示产生了业务异常,需要看messge异常原因
  "errorCode": null,
  "message": null,
  "result": {
    "code": "JR202510110000001",                  //审批单号
    "auditId": "2369f6c4c15440cdada803047d664546" //审批ID
  }
}

3.审批回调

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">简要描述

审批结果回调接口,审批同意、拒绝、撤销、删除时接收审批结果数据.

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">调用方式

则一---->金润

请求URL

需要金润提供,以金润提供为准

· 测试环境:https://example.com/path/audit/callback

· 生产环境:https://example.com/path/audit/callback

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">请求方式

  • POST
  • Content-Type: application/json

Headers参数

具体以金润提供为准

名称 类型 必填 示例值 描述
appKey String 0867ef5f23ef446483749e19e1692b40 金润提供
timestamp String 1643251533306 当前时间戳毫秒值
nonce String gdst9t 6位小写字母数字组合随机串
sign String fa3ed338d6dfe18e7273c8692234ee70 签名:appKey(金润提供) + appSecret(金润提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成

Body参数

参数名 必传 类型 说明
code string 审批单号
auditId string 审批ID
auditCode string 审批编号
auditType string 审批类型
type string 审批正常结束(同意或拒绝)的type为finish,审批终止的type为terminate
result string 正常结束时(agree:同意, refuse:拒绝)
auditUser string 最终审核人
remark string 审批意见

请求Body示例

{
  "code": "JR202510110000001",
  "auditId": "2369f6c4c15440cdada803047d664546",
  "auditCode": "202510131759000353053",
  "auditType": "BILL_APPLY_PAY_AUDIT",
  "type": "finish",
  "result": "agree",
  "auditUser": "001001",
  "remark": "同意出款"
}

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">附录

则一Java-sdk

下载Java-sdk

f1ad3b25d78b9a8b8b27ae35cc14e2c987ab1418/jinrun/audit/审批接口.md#">更新日志

2025-10-11

  1. 接口初始化

2025-10-17

  1. 更新加密逻辑

2025-10-20

  1. 增加请求示例