新增用户授权
- 接口:/delegation/save
- Method:POST
- 数据格式:JSON
- 接口说明:该接口用于新增一条授权关系;仅支持新增,不支持更新;授权人支持在职/离职员工;被授权人必须是在职员工;单次最多处理 100 条数据;接口响应数据会被整体加密,详见 加密说明
接口参数
顶层参数
| 参数 | 类型 | 必须 | 默认值 | 主键 | 描述 |
|---|---|---|---|---|---|
| delegationCode | string | N | 授权业务编码;不填则系统生成 24 位唯一编码;若填写且数据库中已存在则请求被拒绝(仅支持新增,不支持更新) | ||
| delegaterEmployeeId | string | Y | 授权人工号(员工工号,非系统 userCode),支持在职/离职员工 | ||
| delegateeEmployeeIds | array | Y | 被授权人工号列表(员工工号,非系统 userCode),全部必须是在职员工,至少 1 个 | ||
| authorizations | array | Y | 授权内容列表(按类型分条),至少 1 条;详见下方「authorizations 子结构」 | ||
| expireDate | string(yyyy-MM-dd) |
N | 不限制 | 授权截止日期;不填或 null 表示永不过期;填值则必须 ≥ 当天(按 UTC+8 零点对齐) | |
| enabled | bool | N | true | 是否启用,新增一条授权关系默认开启 |
authorizations[i](每条授权内容)
| 参数 | 类型 | 必须 | 默认值 | 主键 | 描述 |
|---|---|---|---|---|---|
| type | int | Y | 授权类型:1代审批 / 2代报销 / 3代申请 / 4代预定 / 5代处理对公业务 |
||
| formSubTypeCodes | array | N | 全部 | 该类型下可操作的单据小类编码列表;不传/空时服务端按授权类型拉全量单据小类(代报销只含 REIMBURSE、代申请只含 PRECONSUME、代处理对公只含 CORP_REIMBURSE、代审批/代预定排除还款类) | |
| approvalScope | object | type=1 时必填 | 代审批适用范围 | ||
| reimburseScope | object | type=2 时必填 | 代报销适用范围 | ||
| consumeScope | object | type=3 时必填 | 代申请适用范围 | ||
| corpReimburseScope | object | type=5 时必填 | 代处理对公业务适用范围 |
代审批适用范围(approvalScope)
| 参数 | 类型 | 必须 | 默认值 | 描述 |
|---|---|---|---|---|
| visibility | string | N | OPEN | 适用范围:OPEN 全部 / WHITE_LIST 限定(业务实体或部门);不传默认 OPEN(全公司可审批) |
| subsidiaryCodes | array | visibility=WHITE_LIST 时非空 | 可审批业务实体编码列表;与 departmentCodes 至少一个非空 | |
| departmentCodes | array | visibility=WHITE_LIST 时非空 | 可审批部门编码列表;与 subsidiaryCodes 至少一个非空 | |
| amountRange | object | N | 任意金额 | 金额范围,详见下方「amountRange 子结构」 |
金额范围(amountRange)
| 参数 | 类型 | 必须 | 默认值 | 描述 |
|---|---|---|---|---|
| opType | string | Y | 比较类型:GT 大于 / GTE 大于等于 / LT 小于 / LTE 小于等于 / ANY 任意 |
|
| currency | string | opType≠ANY 时必填 | 币种编码(如 CNY/USD),必须在授权人/适用范围所属业务实体的可报销币种并集范围内 |
|
| amount | number | opType≠ANY 时必填 | 金额 |
代报销适用范围(reimburseScope)
| 参数 | 类型 | 必须 | 默认值 | 描述 |
|---|---|---|---|---|
| needConfirmAfterSubmit | bool | Y | 提单后是否需授权人确认 | |
| fullProxy | bool | Y | 是否由被授权人全权代理 | |
| selectDelegaterBankcard | bool | Y | 是否可以选择授权人银行卡用于收款 |
代申请适用范围(consumeScope)
| 参数 | 类型 | 必须 | 默认值 | 描述 |
|---|---|---|---|---|
| needConfirmAfterSubmit | bool | Y | 提单后是否需授权人确认 |
代处理对公业务适用范围(corpReimburseScope)
| 参数 | 类型 | 必须 | 默认值 | 描述 |
|---|---|---|---|---|
| formSubTypeCodes | array | N | 全部 | 可处理的对公单据小类编码列表;不传/空时服务端拉全部 CORP_REIMBURSE 单据小类 |
返回数据
| 字段 | 类型 | 描述 |
|---|---|---|
| delegationCode | string | 系统生成的授权业务编码 |
| delegaterEmployeeId | string | 授权人工号(回执) |
异常说明
| 异常 | 触发条件 | code |
|---|---|---|
| 必传参数未传 | delegaterEmployeeId / delegateeEmployeeIds / authorizations 任一为空 |
NACK |
| 授权人不存在 | 授权人工号在系统中不存在 | NACK |
| 被授权人不存在 | 任一被授权人工号在系统中不存在 | NACK |
| 被授权人已离职 | 任一被授权人工号状态非在职(离职/停用) | NACK |
| 授权人与被授权人相同 | 任一被授权人工号等于授权人工号 | NACK |
| 币种不在规定范围内 | amountRange.currency 不在授权人 + 适用范围所属业务实体的可报销币种并集内 |
NACK |
| 截止日期早于当前日期 | expireDate 不为空且早于今天 |
NACK |
| 授权编号已存在 | 客户端传入的 delegationCode 在数据库中已存在 |
NACK |
| 单据小类不存在 | formSubTypeCodes 含未配置的小类编码 |
NACK |
| 类型值非法 | type 不在 {1,2,3,4,5} |
NACK |
| 适用范围必填字段缺失 | type 与对应 scope 子对象未匹配 / visibility=WHITE_LIST 时 subsidiaryCodes+departmentCodes 同时空(不传 visibility 默认 OPEN 表示全公司可审批) |
NACK |
| 金额必填 | opType≠ANY 时 currency 或 amount 为空,或 amount < 0 |
NACK |
| 必填字段不能为空 | type=2/3 时对应 boolean 字段为 null(未传) | NACK |
备注
- 本接口采用单条失败的处理方式,即整批数据中,如果只有其中的几条因为各种原因失败,那么只有那几条数据不会被保存;其它的数据仍然会被正常处理;错误数据的主键(
delegationCode若已传入,否则delegaterEmployeeId)会被放在errorData里面,类似{"<pk>": "<错误信息>"};具体参见失败示例;如果有错误信息,则返回的 code 为 NACK,然后错误信息会放在 errorData 里,只有全部成功返回的 code 为 ACK。 - 后续操作必须将 entCode 和 tokenId 放入请求 header 中。
- 接口响应数据会被整体加密,详见 加密说明。
- 完整的鉴权流程参见 认证 / 接口简介。
示例
请求数据
{
"timestamp": 1700000000000,
"data": [
{
"delegaterEmployeeId": "A001",
"delegateeEmployeeIds": ["B002", "B003"],
"authorizations": [
{
"type": 1,
"formSubTypeCodes": [],
"approvalScope": {
"visibility": "WHITE_LIST",
"subsidiaryCodes": ["SUB01"],
"departmentCodes": [],
"amountRange": {
"opType": "GT",
"currency": "CNY",
"amount": 1000
}
}
},
{
"type": 2,
"formSubTypeCodes": ["FS_REIMBURSE_DAILY"],
"reimburseScope": {
"needConfirmAfterSubmit": true,
"fullProxy": false,
"selectDelegaterBankcard": false
}
},
{
"type": 5,
"corpReimburseScope": {
"formSubTypeCodes": []
}
}
],
"expireDate": "2026-12-31",
"enabled": true
}
]
}
返回数据(成功)
{
"code": "ACK",
"message": "",
"data": [
{
"delegationCode": "DLG2026ABCDEF123456",
"delegaterEmployeeId": "A001"
}
],
"errorData": {}
}
返回数据(部分失败)
{
"code": "NACK",
"message": null,
"data": [],
"errorData": {
"A001": "被授权人已离职:B003"
}
}
返回数据(整体失败)
{
"code": "NACK",
"message": "授权编号已存在",
"data": null,
"errorData": {}
}