# 创建项目绑定接口

# 1.概述

通过调用【创建项目绑定接口】,建立员工与项目 或 成本中心与项目 的关联关系,但仅针对适用类型为「部分适用」的项目,「全员可用」项目无需调用此接口。

# 2.接口基本信息

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

# 2.1 请求体

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

# content 加密前数据结构

名称 类型 是否必填 示例 说明
ts Long 1617085650321 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求
entId Long 101730 企业ID
projectNo String openapiProject2 项目编码
relatedType Integer 1 绑定类型,0:绑定人员;1:绑定成本
relatedUniqId String abc@meituan.com 员工唯一标识/成本中心编码
staffId Long 998241 美团企业版员工ID,当绑定类型为0时,如果relatedUniqId和staffId均有传值,以staffId为准

# 2.2 响应体

名称 类型 是否必填 示例 说明
traceId String 9042536864303509624 日志查询ID
status Integer 0 0为成功,其他错误见错误码
msg String 失败时的错误描述
data String null 响应数据,将响应参数JSON序列化后进行加密的结果值,解密秘钥使用secretKey参数,参照:签名实例

# 3.请求示例

# 3.1 请求示例

{
    "accessKey": "CC1NRDRJLC76-TK",
    "content": "xLui_V-tTTRuqDIp48uFsoCbwnemwtNaKut8miqTJutwdHrUHkzVzX0DTbhpLHBgobaOb1nm2WRBgTmFzwwuVjAHy0s6zu6p1Lw3_5ruURdHUmYhIib1Fyuc_8NjugGFo52oa-EGFk762yWtJ3PSJWg_FjNXcXIrrqAorKWJEYLEk7IYxswJHjXIbmRessLe"
}

# content 明文

{
  "ts":1703660390000,
  "entId":103730,
  "projectNo": "openapiProject2",
  "relatedType": 0,
  "relatedUniqId": "abc@meituan.com"
}

# 3.2 响应示例

{
  "traceId":"56a0af18ae30a168d4006c7c",
  "status":0,
  "msg":"成功",
  "data":null
}

# 4.错误码

# 4.1.公共错误码

错误码 错误描述 解决方案
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次,超出限额则会报错

# 4.2.业务错误码

错误码 错误描述 解决方案
10300001 参数错误 请根据msg中内容排查传值情况,确认必填字段是否传值,字段长度是否正确
10300006 成本中心不存在 请检查relatedUniqId字段传参,确认传入成本中心编码已经同步到美团企业版
10300008 项目不存在 检查项目是否已创建
10300010 员工不存在 检查员工ID或唯一标识是否正确
10300011 适用类型为「全员可用」的项目无法绑定 检查是否尝试绑定公共项目
10300013 绑定类型无效 检查绑定类型是否正确
10300014 绑定关系已经存在 检查绑定关系是否已经存在
40300001 服务错误 请提供响应结果中的traceId参数,联系客户经理进行排查
40300002 请勿重复调用 检查是否多次重复调用

# 5.代码实例

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

package com.meituan.sqt.demo.in.project;

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.project.ProjectBindCreateRequest;
import com.meituan.sqt.response.in.BaseApiResponse;

import java.util.Objects;

public class ProjectBindCreateDemo {
    private static final String invokeUrl = "https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/project/bind/create";

    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. 构建请求对象
        ProjectBindCreateRequest projectBindCreateRequest = new ProjectBindCreateRequest();
        projectBindCreateRequest.setTs(System.currentTimeMillis());
        projectBindCreateRequest.setEntId(sqtClient.getEntId());


        projectBindCreateRequest.setProjectNo("openapiProject2");//唯一标识,不可重复,必填
        projectBindCreateRequest.setRelatedUniqId("18136659526");
        projectBindCreateRequest.setRelatedType(0);

        // 2. API调用
        // 注意:超时时间默认以请求对象中注解ApiMeta上设置的为准,也可以自定义传递对应的超时时间
        BaseApiResponse<String> response = sqtClient.invokeApi(invokeUrl, projectBindCreateRequest, null, null);

        // 3. 响应结果为空处理
        if (response == null) {
            // 处理响应结果为空情况
            // ...

        }

        // 4. 获取请求结果
        if(Objects.equals(ResponseStatusEnum.SUCCESS.getCode(), response.getStatus())) {
            // 4.1 处理创建成功后的业务逻辑


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

    private static void handleRespFailResult(BaseApiResponse<String> 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/cost/cost_create.html
        System.out.println(response.getMsg());
    }
}

# 6.版本记录

版本号 版本日期 更新内容
V1.0 2024-01-08 初版
上次更新: 6/29/2026, 7:56:38 PM