# 员工保存接口

# 1.概述

员工保存接口,员工不存在时则新增员工,员工存在时则更新员工,更新时,传null值,则字段不做处理,传非null值,字段覆盖成新值(bankCardList字段较特殊,详见bankCardList字段说明)。单次最大保存员工数量为50

需注意点

1、美团企业版编码格式为UTF-8,调用方需指定编码格式为UTF-8

2、美团企业版要求,在同一个企业内不同员工的手机号和邮箱不可重复

# 2.接口基本信息

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

# 2.1.请求体

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

# content加密前数据结构

名称 类型 是否必填 示例 说明
ts Long 1617085650321 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求
entId Long 46574 企业ID
staffInfoList List<StaffInfo> StaffInfo 同步到美团企业版的人员信息,需<=50

StaffInfo字段说明

名称 类型 是否必填 示例 说明
staffName String 小明 姓名
gender Integer 1 性别(0:未知;1:男;2:女)默认为"0:未知")
staffId Long 123 美团企业版员工id,美团企业版对员工的唯一标识,更新员工时staffId和企业唯一标识字段(可和客户经理确认)必填其一,都传时以staffId为准识别员工
staffPhone String 188****1234 手机号,且需要企业内唯一。当手机号为企业唯一标识时,此字段必传(注意:若手机号发生变化,会自动进行账号解绑,需要用户重新登录)
staffNum String 39WNRUYJC1Z6 工号,且需要企业内唯一。当工号为企业唯一标识时,此字段必传
staffEmail String 12345@qq.com 邮箱,且需要企业内唯一。当邮箱为企业唯一标识时,此字段必传(注意:若邮箱发生变化,会自动进行账号解绑,需要用户重新登录)
invoiceNum String 1111ddf585 发票税号(需提前在企业后台添加发票信息)
staffCityName String 北京市 员工所属城市名称,如北京/北京市,城市编码有值时,则以staffCityId为准
staffCityId String 110000 员工所属城市国标编码,基础数据详见行政区划查询接口
staffLevel String L6 职级(需提前维护职级信息,可通过角色相关接口或者企业后台角色管理维护)
parentStaffId Long 34533 上级美团企业版员工ID,更新上级时 parentStaffId和parentIdentifier填其一,parentStaffId优先级更高
parentIdentifier String SCSWWES 上级员工唯一标识(手机号或工号或邮箱,具体字段由企业唯一标识决定)
notifyStaffId Long 34536 消费通知接收人美团企业版员工ID,更新消费通知接收人时 notifyStaffId或notifyIdentifier填其一 ,notifyStaffId优先级更高
notifyIdentifier String SCSWWES 消费通知接收人唯一标识(手机号或工号或邮箱,具体字段由企业唯一标识决定)
thirdPlatformStaffIdentifier String user01 企业员工在第三方平台(如钉钉、企微等)上的唯一标识,如有传值,需要企业内唯一,当需要从钉钉或企微生态平台单点登录美团企业版时,此字段必传
certificateList List<CertificateInfo> CertificateInfo 员工证件信息列表
costCenterList List<CostCenterInfo> CostCenterInfo 成本中心列表,成本中心传值逻辑参见成本中心同步逻辑说明
staffOrgInfoList List<StaffOrgInfo> StaffOrgInfo 员工所属部门列表,一名员工最多同时属于200个部门
staffStatus Integer 0 员工在职状态(1:离职;2:在职;3:停用)
bankCardList List<BankCardInfo> BankCardInfo 银行卡信息,如果传null值,会删除之前的数据

CertificateInfo字段说明

名称 类型 是否必填 示例 说明
certificateType Integer 0 证件类型,0:身份证,1:护照,2:其它
certificateName String 张三 证件姓名
firstName String 名(英文名)
middleName String 中间名(英文名)
lastName String 姓(英文名)
certificateNum String 360428195509211314 证件号码
nationality String CHN 国籍(国家标准三字码)
birthday String 1989-09-03 出生年月日(pattern:yyyy-MM-dd)
certificateSex Integer 1 性别,1:男,2:女 性别为空且类型为身份证时,该字段的值为身份证号中的性别

CostCenterInfo字段说明

名称 类型 是否必填 示例 说明
costNo String 成本中心编码
costName String 张三 成本中心名称
customField1 String 成本中心自定义字段1
customField2 String 成本中心自定义字段2
customField3 String 成本中心自定义字段3
customField4 String 成本中心自定义字段4
customField5 String 成本中心自定义字段5

成本中心同步逻辑说明

  1. 人员接口传递成本中心列表,如果为空,不做任何处理;
  2. 人员接口传递成本中心列表,如果根据成本中心编码,在成本中心查找不到记录,则新建成本中心记录,并把人员和成本中心绑定;
  3. 人员接口传递成本中心列表,如果根据成本中心编码,在成本中心查找的到记录,则更新成本中心记录,并把人员和成本中心绑定;
  4. 人员接口传递成本中心列表,如果以前该人员绑定的成本中心,没在本次接口中传递,则删除人员和成本中心的关系。

StaffOrgInfo字段说明

名称 类型 是否必填 示例 说明
orgId Long 11224 员工所属美团企业版部门ID
externalOrgId String 83A312 员工在客户平台所属部门ID,当orgId和externalOrgId字段均有值时,以orgId为准
isAdmin Boolean true 是否为当前部门主管,不传默认为false

BankCardInfo字段说明

名称 类型 是否必填 示例 说明
accountName String xxx 开户人名称
accountNumber String 6628xxxxxxxxxxxx 银行卡号
bankBranchName String 中国人名银行北京分行 开户网点名称

# 2.2.响应参数

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

# data解密后数据结构

类型 是否必填 示例 说明
List<StaffSyncItem> StaffSyncItem 返回结果

# StaffSyncItem

StaffSyncItem字段说明

名称 类型 是否必填 示例 说明
result Integer 0 针对每个员工保存结果的响应编码,编码枚举值和解决方案详见第四章错误码
itemMsg String 成功 描述
staffId Long 397374 美团企业版员工ID
staffNum String 39WNRUYJC1Z6 员工工号
staffPhone String 188****1234 手机号
staffEmail String 12345@qq.com 邮箱

# 3.示例

# 3.1.请求示例

# 3.1.1.请求示例

{
  "accessKey":"B3KSWLDSKSKDMJ",
  "content":"UgxoCGPQIzoP"
}

# 3.1.2.请求参数content解析

{
  "ts": 123123,
  "entId": 100746,
  "staffInfoList":[
    {
      "staffPhone":"187****2611",
      "staffName":"wan"
    },
    {
      "staffId":123,
      "staffPhone":"184****2232",
      "staffName":"wan2"
    },
    {
      "staffPhone":"182****2433",
      "staffName":"wan3"
    }
  ]
}

# 3.2.响应示例

# 3.2.1.响应结果

{
    "traceId":"56a0af18ae30a168d4006c7c",
    "status":0,
    "data":"UgJn07uNgW7S7fJK0R0xVbaLxoCGPQIzoP"
}

# 3.2.2.响应参数data解析

[
    {
      "result": 0,
      "itemMsg": "成功",
      "staffId": 6877151,
      "staffNum": "D0920150125",
      "staffPhone": null,
      "staffEmail": null
    },
    {
      "result": 0,
      "itemMsg": "成功",
      "staffId": 397375,
      "staffNum": "",
      "staffPhone": "184****2232",
      "staffEmail": ""
    },
    {
      "result": 0,
      "itemMsg": "成功",
      "staffId": 397376,
      "staffNum": "",
      "staffPhone": "182****2433",
      "staffEmail": ""
    }
]

# 4.错误码

# 4.1.status错误码

错误码 错误描述 解决方案
10010002 企业已停止合作,请联系客户经理进行确认 将接口调用的entId参数给到客户经理,由客户经理确认企业状态是否在合作中
10010003 content不合法 详细阅读content参数加密说明(签名实例),确认content加密方式和content解密前传参是否正确
10010004 ts缺失或ts时间已过期 确认ts是否传值并为13位时间戳,如果正确传值,则确认请求发起时间与美团企业版接受请求的时间差是否超过10分钟
10010005 entId不能为空 entId参数不可为空,如果未拿到entId参数,可以咨询客户经理获取
20010001 accessKey不合法 检查accessKey是否为客户经理给到的值,如果accessKey值正确,确认调用环境是否和accessKey一致,如使用测试环境的accessKey调用线上的接口
20010002 请求path不合法 检查接口调用地址是否正确,如是否有非法字符
20010003 鉴权失败,无接口访问权限 将接口调用地址给到客户经理,由客户经理检查接口权限是否开通并保存成功
20010004 越权访问,无法访问该企业数据,请检查entId的正确性 检查accessKey和entId两个参数的对应关系是否正确
30010001 访问频率过高 请确认接口访问频率,每个接口默认调用限频为每分钟不超过100次,超出调用频率会调用此错误
30010002 访问次数超过配额 请确认接口的累计访问次数,每个接口的默认累计调用量为10w次,超出限额则会报错
10110004 xx字段传值异常,数据类型不匹配 请检查字段传值情况,如:是否出现Integer类型字段传值'aaa'
10112001 保存员工为空 请检查staffInfoList字段是否为空对象
10112002 保存员工数量超出限制 请检查传入员工数量,员工保存接口单次同步员工数量不可超过50个
40110000 部分员工处理失败 请查看响应结果中的result和itemMsg信息,根据解决方案进行调整
40110001 未知错误,请联系美团侧研发 请提供响应结果中的traceId参数,联系客户经理进行排查

# 4.2.result错误码

错误码 错误描述 解决方案
10112003 更新员工不存在 请检查staffId对应员工是否已存在
10112004 设置上级出错 请检查parentStaffId和parentIdentifier字段传值,确认上级是否存在、上级是否为自己、上级是否为自己的下级
10112005 消费通知人不存在 请检查notifyStaffId和notifyIdentifier字段传值,确认消费通知人是否存在
10112006 员工状态不存在 请检查staffStatus字段传参与枚举值是否一致
10112007 发票税号不存在 请检查invoiceNum字段传参,发票税号需要提前在企业后台维护
10112008 员工所属部门不存在 请检查staffOrgInfoList字段传值,无需同步部门信息时,此字段传空值;如需同步部门信息,orgId或externalOrgId字段必传其一,且字段值已同步到美团企业版
10112009 员工同步成功,其余数据同步失败 请查看响应结果中的result和itemMsg信息,根据解决方案进行调整
10112010 员工所属部门数量超出限定值 请检查orgId或externalOrgId字段传参,一个员工最多可归属于200个部门
10112011 员工必填参数为空 请根据报错信息确认是否传了对应的必填参数,如手机号、邮箱、工号等
10112012 员工已存在 请检查staffPhone、staffNum、staffEmail字段传参,员工手机号和邮箱不允许有重复,当员工唯一识别为工号时,staffNum也不可重复
10112013 参数格式错误 请根据报错信息排查参数格式是否正确,如邮箱格式不合法、手机号格式不合法等
10112014 员工城市不存在 请检查staffCityId和staffCityName字段传参,当城市编码和城市名称与行政区划查询接口中不一致时会报错
10112015 员工职级字段错误 请检查staffLevel字段传参,员工职级信息需要提前在企业后台维护
10112016 第三方平台唯一标识重复 请检查thirdPlatformStaffIdentifier字段传值,第三方平台唯一标识不可重复

# 5.代码实例

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

import com.meituan.sqt.client.SqtClient;
import com.meituan.sqt.constant.CommonConstants;
import com.meituan.sqt.enums.GenderEnum;
import com.meituan.sqt.enums.ResponseStatusEnum;
import com.meituan.sqt.exception.MtSqtException;
import com.meituan.sqt.model.StaffInfo;
import com.meituan.sqt.request.in.staff.StaffSaveRequest;
import com.meituan.sqt.response.in.BaseApiResponse;
import com.meituan.sqt.response.in.staff.StaffSaveResultItem;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * @description: 员工信息维护请求示例代码
 * @author: xinghaiming@meituan.com
 * @data: 2023/4/11 14:56
 */
public class StaffSaveDemo {
    private static final String invokeUrl = "https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/staff/batch/save";

    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 {
        // 1. 构建请求对象
        // 1.1 设置通用参数
        StaffSaveRequest staffSaveRequest = new StaffSaveRequest();
        staffSaveRequest.setTs(System.currentTimeMillis());
        staffSaveRequest.setEntId(sqtClient.getEntId());
        // 1.2 封装需要保存的员工信息
        StaffInfo staffInfo = new StaffInfo();
        staffInfo.setStaffName("张三");
        staffInfo.setGender(GenderEnum.MALE.getCode());
        staffInfo.setStaffPhone("1333333333");
        staffInfo.setStaffNum("Test001");
        staffInfo.setStaffEmail("test@meituan.com");
        staffSaveRequest.setStaffInfoList(Collections.singletonList(staffInfo));
        // 2. API调用
        // 注意:超时时间默认以请求对象中注解ApiMeta上设置的为准,也可以自定义传递对应的超时时间
        BaseApiResponse<List<StaffSaveResultItem>> response = sqtClient.invokeApi(invokeUrl, staffSaveRequest, null, null);
        // 3. 响应结果为空处理
        if (response == null) {
            // 处理响应结果为空情况
            // ...

        }
        // 4. 获取请求结果
        if(Objects.equals(ResponseStatusEnum.SUCCESS.getCode(), response.getStatus())) {
            // 4.1 请求成功,获取员工保存结果,处理业务逻辑
            List<StaffSaveResultItem> resultItemList = response.getRealData();


        } else {
            // 4.2 处理请求失败场景
            handleRespFailResult(response);
        }
    }

    private static void handleRespFailResult(BaseApiResponse<List<StaffSaveResultItem>> 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
        }
        // 其它失败场景,解决方案参考:https://h5.dianping.com/app/bep-docs/open-platform-doc/staff/staff_save.html#_4-1-status%E9%94%99%E8%AF%AF%E7%A0%81

    }
}

# 6.版本记录

版本号 版本日期 更新内容
v1.0 2022-10-28 新增员工保存接口
v1.1 2023-06-05 新增内容:标明员工手机号、邮箱变更时会进行账号解绑,需要用户重新登录
v1.2 2023-11-09 新增错误码(10110004:字段传值异常,数据类型不匹配)
上次更新: 6/29/2026, 7:56:38 PM