# 查询项目接口

# 1.概述

项目查询接口,企业通过该接口,可以查询已经存在的项目。

# 2.接口基本信息

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

# 2.1 请求体

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

# content 加密前数据结构

注:多个查询条件取相与

名称 类型 是否必填 示例 说明
ts Long 1617085650321 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求
entId Long 46574 企业ID
projectNo String openapiProject2 项目编码
projectName String 项目1 项目名字
pageNo Integer 1 分页页码<=10
pageSize Integer 20 分页大小 <=100
parentProjectNo String openapiProject1 项目父级编码
statusList List<String> ["ONLINE"] 项目状态(ONLINE:上线,PAUSE:暂停)

# 2.2 响应体

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

# data解密后数据结构

名称 类型 是否非空 示例 说明
totalCount Integer 100 项目总数
projectItemList List<ProjectItemVO> 见ProjectItemVO字段说明 项目列表

ProjectItemVO字段说明

名称 类型 是否非空 示例 说明
ts Long 1617085650321 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求
entId Long 46574 企业ID
projectNo String openapiProject2 项目编码,唯一标识
projectName String 项目2 项目名字
customField1 String 自定义字段1 项目自定义字段1
customField2 String 自定义字段2 项目自定义字段2
customField3 String 自定义字段3 项目自定义字段3
customField4 String 自定义字段4 项目自定义字段4
customField5 String 自定义字段5 项目自定义字段5
creator String 46574-api-V2 创建者
createTime String 2020-06-09 11:11:11 创建时间
parentProjectNo String openapiProject2 美团企业版项目父级编码
projectLevel Integer 1 项目层级,从1开始,每存在一个父层级+1
status String ONLINE 项目状态(ONLINE:上线,PAUSE:暂停)

# 3.请求示例

# 3.1 请求示例

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

# content 明文

{
  "ts":1703660390000,
  "entId": 101730,
  "projectNo": "openapiProject2",
  "projectName": "项目2",
  "pageNo": 1,
  "pageSize": 20,
  "parentProjectNo": "openapiProject1",
  "statusList": ["ONLINE"]
}

# 3.2 响应示例

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

# data 明文

{
  "totalCount": 1,
  "projectItemList": [
    {
      "projectNo": "openapiProject2",
      "projectName": "项目1",
      "customField1": "自定义字段1",
      "customField2": "自定义字段2",
      "customField3": "自定义字段3",
      "customField4": "自定义字段4",
      "customField5": "自定义字段5",
      "creator": "101730-api-V2",
      "createTime": "2020-02-05 16:08:36",
      "parentProjectNo": "openapiProject1",
      "projectLevel": 2,
      "status": "ONLINE"
    }
  ]
}

# 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中内容排查传值情况,确认必填字段是否传值,字段长度是否正确
10300016 适用类型无效 检查suitableType是否合法
10300017 项目状态无效 检查statusList是否合法
40300001 未知错误,请联系美团侧研发 请提供响应结果中的traceId参数,联系客户经理进行排查

# 5.代码实例

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

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

import com.google.common.collect.Lists;
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.ProjectQueryRequest;
import com.meituan.sqt.response.in.BaseApiResponse;
import com.meituan.sqt.response.in.project.ProjectQueryResult;
import com.meituan.sqt.utils.JsonUtil;

import java.util.Objects;

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

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

        // 多个查询条件取相与
        projectQueryRequest.setProjectNo("openapiProject2");
        projectQueryRequest.setProjectName("项目");
        projectQueryRequest.setSuitableType(2);
        projectQueryRequest.setParentProjectNo("openapiCost1");
        projectQueryRequest.setStatusList(Lists.newArrayList("ONLINE", "PAUSE"));

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

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

        }

        // 4. 获取请求结果
        if(Objects.equals(ResponseStatusEnum.SUCCESS.getCode(), response.getStatus())) {
            // 4.1 查询项目结果
            ProjectQueryResult result = response.getRealData();
            System.out.println(JsonUtil.object2Json(result));
            // 4.2 处理查询成功后的业务逻辑


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

    private static void handleRespFailResult(BaseApiResponse<ProjectQueryResult> 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/org/org_query.html#_4-%E9%94%99%E8%AF%AF%E7%A0%81
        System.out.println(response.getMsg());
    }
}

# 6.版本记录

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