# 员工费用包预算调整

# 1.概述

客户平台通过【员工费用包预算调整】接口,按预算包维度调整员工预算。
对接中需要先联系客户经理/企业后台管理员取得费用包ID。

# 2.接口基本信息

名称 描述
请求方式 POST
调用地址 测试环境:https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/staff/budget/package/recharge
正式环境:https://bep-openapi.meituan.com/api/sqt/open/staff/budget/package/recharge
调用方 客户平台
响应方 美团企业版
响应超时时间 5秒
调用限频 每分钟访问不超过100次,每天累计访问不超过100000次

# 2.1.请求体

名称 类型 是否必填 示例 说明
accessKey String 美团企业版分配给客户的接入秘钥
content String UgxoCGPQIzoP 请求体内容,将请求参数JSON序列化后进行加密的结果值,加密秘钥使用secretKey参数,详见签名实例

# content加密前数据结构

名称 类型 是否必填 示例 说明
ts Long 1617085650321 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求
entId Long 46574 企业ID
rechargeNo String 131124324 充值流水号,由调用方传入,并作为幂等判断依据,限制在32个字符以内。当接口调用超时时,可以根据rechargeNo重试。
rechargeType Integer 0 费用调整类型,0:增加费用,1:减少费用
rechargeAmount String 32.00 充值金额,单位元,精确到小数点后两位。当减少费用时,如果遇到余额小于调整金额的情况,员工预算额度会直接调整为0,不会出现负数。
staffId Long 12345 美团企业版系统的员工ID
staffIdentifier String 001 企业内部的员工唯一标识,staffId和staffIdentifier必传其一,当二者均传参时,以staffId为准。
expenseNo String 15061804991676621011 费用包ID。需要先在美团企业版系统内创建对应费用档案获取编码,查看路径:企业管理后台-费控中心-费用管理-详情,详见expenseNo对应元素
operateReason String 请假一天扣除额度 预算调整原因,如【请假一天扣除额度】,长度不可超过40位

expenseNo字段获取方式 费用包ID

# 2.2.响应参数

名称 类型 是否必填 示例 说明
traceId String 56a0af18ae30a168d4006c7c 日志查询ID,用于排查问题
status Integer 0 接口响应编码,编码枚举值和解决方案详见第四章错误码
msg String 错误描述信息
data String UgxoCGPQIzoP 响应数据,将响应参数JSON序列化后进行加密的结果值,解密秘钥使用secretKey参数

# data解密后数据结构

名称 类型 是否必填 示例 说明
operateId Long 554823226873750 操作流水号,预算调整成功时返回。当出现幂等情况,返回operateId相同
message String 充值失败 操作记录描述
actualRechargeAmount String 10.51 实际调整金额,减少费用时若员工余额为0或余额不足扣减,将调整为0,不会出现负数,当前字段会返回实际调整成功的金额

# 3.示例

# 3.1.请求示例

# 3.1.1.请求示例

{
    "accessKey":"B3GFJIEHNEM1RLV-TK",
    "content":"UgJn07uNgW7S7fJK0R0xVbaLxoCGPQIzoP-_K4Hmp4RduGszhm2mbUs2toZhCtXKP5JGXVTZ9kGts2Wx3IJQCd90ptMoJTDB0vu7mkedEr4KZCvZn77EZLssMC5SpXilmQ-5RXHzvMIT0ASH-IXepTP_O16U37QqCkEb5L1WLy4"
}

# 3.1.2.请求参数content解析

{
    "entId":100525,
    "staffId":566025,
    "rechargeType":0,
    "rechargeNo":"10001",
    "rechargeAmount":"2",
    "expenseNo":"1590239845161136129",
    "staffIdentifier":"CMS001",
    "operateReason": "充值"
}

# 3.2.响应示例

# 3.2.1.响应结果

{
    "traceId":"56a0af18ae30a168d4006c7c",
    "status": 0,
    "msg": null,
    "data":"UgJn07uNgW7S7fJK0R0xVbaLxoCGPQIzoP-_K4Hmp4RduGszhm2mbUs2toZhCtXKP5JGXVTZ9kGts2Wx3IJQCd90ptMoJTDB0vu7mkedEr4KZCvZn77EZLssMC5SpXilmQ-5RXHzvMIT0ASH-IXepTP_O16U37QqCkEb5L1WLy4"
}

# 3.2.2.响应参数data解析

{
  "operateId": "119838537",
  "message": "充值失败",
  "actualRechargeAmount": "10.54"
}

# 4.错误码

# 4.1.公共错误码

错误码 错误描述 解决方案
10010002 企业已停止合作,请联系客户经理进行确认 将接口调用的entId参数给到客户经理,由客户经理确认企业状态是否在合作中
10010003 content不合法 详细阅读content参数加密说明(签名实例),确认content加密方式和content解密前传参是否正确
10010004 ts缺失或ts时间已过期 确认ts是否传值并为13位时间戳,如果正确传值,则确认请求发起时间与美团企业版接受请求的时间差是否超过10分钟
10010005 entId不能为空 entId参数不可为空,如果未拿到entId参数,可以咨询客户经理获取
10010005 entId不能为空 entId参数不可为空,如果未拿到entId参数,可以咨询客户经理获取
10150004 费用调整原因字段长度不能超过40个字符 检查 operateReason字段是否过长
20010002 请求path不合法 检查接口调用地址是否正确,如是否有非法字符
20010003 鉴权失败,无接口访问权限 将接口调用地址给到客户经理,由客户经理检查接口权限是否开通并保存成功
20010004 越权访问,无法访问该企业数据,请检查entId的正确性 检查accessKey和entId两个参数的对应关系是否正确
30010001 访问频率过高 请确认接口访问频率,每个接口默认调用限频为每分钟不超过100次,超出调用频率会调用此错误
30010002 访问次数超过配额 请确认接口的累计访问次数,每个接口的默认累计调用量为10w次,超出限额则会报错

# 4.2.业务错误码

错误码 错误描述 解决方案
10150001 请输入员工ID 请检查staffId和staffIdentifier字段传值,二者必传其一
10150003 请传入合法的费用包ID 请检查expenseNo字段传参是否为空,且与客户经理提供的编码一致。费用ID查看位置:企业管理后台-费控中心-费用管理-详情
10151001 修改金额请输入正数 请检查rechargeAmount字段传参是否正确,只允许输入正数
10151002 未知的费用调整类型 请检查rechargeType字段传参是否正确,只允许传0或1
40151001 当前余额已超过上限,当前额度:XXX 用户当前余额已超过企业充值限额,不予充值。默认用户累计充值上限:100万元
40151002 充值已处理,充值时间:XXX 重复充值,请检查rechargeNo传参
40150004 单笔充值上限100000元,本次已超出 单笔充值上限10万元,请调整充值金额后重试
40150001 未知错误,请联系美团侧研发 请提供响应结果中的traceId参数,联系客户经理进行排查

# 5.代码实例

依赖SDK包地址:SDK下载地址

import com.meituan.sqt.client.SqtClient;
import com.meituan.sqt.constant.CommonConstants;
import com.meituan.sqt.enums.ResponseStatusEnum;
import com.meituan.sqt.exception.MtSqtException;
import com.meituan.sqt.request.in.sqtbudget.ApiRechargeStaffCurBudgetRequest;
import com.meituan.sqt.response.in.BaseApiResponse;
import com.meituan.sqt.response.in.sqtbudget.APIAdjustStaffCurBudgetResultItem;


/**
 * @author zhaoruixing
 * @date 2023/4/4 12:06
 */
public class RechargeStaffBudgetDemo {
    private static final String invokeUrl = "https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/staff/budget/package/recharge";

    private static SqtClient sqtClient = null;

    static {
        // 初始化SqtClient,只需要初始化一次即可
        // entId,accessKey,secretKey需要根据不同环境动态的设置获取
        sqtClient = new SqtClient.Builder()
                .setEntId(CommonConstants.entId)
                .setAccessKey(CommonConstants.accessKey)
                .setSecretKey(CommonConstants.secretKey)
                .build();
    }

    public static void main(String[] args) throws MtSqtException {
        // 构建请求对象
        ApiRechargeStaffCurBudgetRequest rechargeStaffCurBudgetRequest = new ApiRechargeStaffCurBudgetRequest();
        rechargeStaffCurBudgetRequest.setTs(System.currentTimeMillis());
        rechargeStaffCurBudgetRequest.setEntId(sqtClient.getEntId());
        rechargeStaffCurBudgetRequest.setStaffId(20205000L);
        rechargeStaffCurBudgetRequest.setExpenseNo("1552190409298427931");
        rechargeStaffCurBudgetRequest.setRechargeAmount("50");
        rechargeStaffCurBudgetRequest.setRechargeType(0);
        // API调用
        // 注意:超时时间默认以请求对象中注解ApiMeta上设置的为准,也可以自定义传递对应的超时时间
        BaseApiResponse<APIAdjustStaffCurBudgetResultItem> response = sqtClient.invokeApi(invokeUrl, rechargeStaffCurBudgetRequest, null, null);
        // 响应结果为空处理
        if (response == null) {
            // 处理响应结果为空情况
            // ...

        }
        // 获取结果
        if(ResponseStatusEnum.SUCCESS.getCode().intValue() == response.getStatus()) {
            // 成功
            APIAdjustStaffCurBudgetResultItem resultItem = response.getRealData();
            // 处理业务逻辑
            // ...
        } else {
            // 处理失败场景
            handleRespFailResult(response);
        }
    }

    private static void handleRespFailResult(BaseApiResponse<APIAdjustStaffCurBudgetResultItem> response) {
        // 访问频率过高
        if (ResponseStatusEnum.HIGH_FREQUENCY_ACCESS.getCode().intValue() == response.getStatus()) {
            // 解决方案参照:https://h5.dianping.com/app/bep-docs/open-platform-doc/guide/rate_limiting.html
        }
        // 访问次数超过配额
        if (ResponseStatusEnum.EXCEED_ACCESS_NUMBER.getCode().intValue() == response.getStatus()) {
            // 解决方案参照:https://h5.dianping.com/app/bep-docs/open-platform-doc/guide/rate_limiting.html
        }
        // 其它失败场景

    }
}

# 6.版本记录

版本号 版本日期 更新内容
v1.0 2023-02-03 新增员工费用包预算调整接口
v1.1 2023-05-31 入参新增充值原因字段、返回值新增实际充值金额字段
上次更新: 6/29/2026, 7:56:38 PM