# 用车申请单详情列表查询接口
# 1.概述
美团企业版为客户提供了用车申请、审批等功能,如果企业客户希望在内部系统完成用车申请,但是需要通过接口查询用车申请单信息的功能,则可以通过本文档进行对接。流程如下:
- 企业内部系统发起对美团企业版的接口调用。
- 美团企业版组装用车申请业务数据,返回给企业。
# 2.接口基本信息
| 名称 | 描述 |
|---|---|
| 请求方式 | POST |
| 调用地址 | 测试环境:https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/car/applyDetail/pageQuery 正式环境:https://bep-openapi.meituan.com/api/sqt/open/car/applyDetail/pageQuery |
| 调用方 | 客户平台 |
| 响应方 | 美团企业版 |
| 响应超时时间 | 5秒 |
| 调用限频 | 每分钟访问不超过100次,每天累计访问不超过100000次 |
# 2.1.请求体
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| accessKey | String | 是 | 美团企业版分配给客户的接入秘钥 | |
| content | String | 是 | UgxoCGPQIzoP | 请求体内容,将请求参数JSON序列化后进行加密的结果值, 参照:签名实例 |
# content加密前数据结构
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| ts | Long | 是 | 1617085650321 | 13位时间戳。若请求发起时间与平台接受请求时间相差大于10分钟,平台将直接拒绝本次请求 |
| entId | Long | 是 | 46574 | 企业ID |
| pageNum | Integer | 是 | 1 | 当前页数,限制[1,100] |
| pageSize | Integer | 是 | 20 | 每页条数,限制[1,20] |
| applyNoList | List<String> | 否 | 美团企业版申请单号列表,限制最多20个单号 | |
| externalApplyNoList | List<String> | 否 | 外部申请单号列表,限制最多20个单号 | |
| minCreatedTime | Long | 否 | 1600000000000 | 最小创建申请单时间,13位时间戳 |
| maxCreatedTime | Long | 否 | 1700000000000 | 最大创建申请单时间,13位时间戳 |
# 2.2.响应参数
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| traceId | String | 是 | 56a0af18ae30a168d4006c7c | 日志查询ID,用于排查问题 |
| status | Integer | 是 | 0 | 接口响应编码,返回0为同步成功,返回其他则有报错,编码枚举值和解决方案详见第四章 |
| msg | String | 否 | 错误描述信息 | |
| data | String | 是 | UgxoCGPQIzoP | 响应数据,将响应参数JSON序列化后进行加密的结果值,解密秘钥使用secretKey参数 |
# data解密后数据结构
| 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|
| ApplyPageQueryResult | 是 | 见ApplyPageQueryResult | 申请单分页查询结果信息 |
ApplyPageQueryResult字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| pageNum | Integer | 是 | 1 | 当前页码,最小为1 |
| pageSize | Integer | 是 | 20 | 分页大小 |
| totalPages | Integer | 是 | 1 | 结果集总页数 |
| totalCount | Long | 是 | 15 | 结果集总数量 |
| applyList | List<ApplyInfo> | 否 | 申请单数据列表 |
ApplyInfo字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| sceneType | String | 是 | 2 | 用车场景:2-企业用车 |
| applyNo | String | 是 | CA001 | 美团企业版申请单号 |
| externalApplyNo | String | 是 | REQ001 | 外部申请单号 |
| rulePackIdentifier | String | 是 | 1665388923421 | 规则包编码 |
| applyType | Integer | 是 | 201 | 申请单类型:201-按次数申请;202-按日期申请 |
| submitStaff | StaffInfo | 是 | 提交人信息 | |
| applyReason | String | 否 | 拜访客户 | 申请事由说明(限制:200个字符以内) |
| applyCount | Integer | 否 | 99 | 申请数量(用车次数) |
| applyAmount | String | 否 | 123.45 | 申请金额(元) |
| scheduleList | List<ScheduleInfo> | 是 | 用车日程列表 | |
| costCenterList | List<CostCenterInfo> | 否 | 成本中心列表 | |
| workflowStatus | Integer | 是 | 60 | 流程状态:20-审批中;30-已撤回;40-已驳回;60-已完成(审批通过) |
| dataStatus | Integer | 是 | 20 | 数据状态:20-正式;30-废弃 |
| createTime | Long | 是 | 1705375548186 | 创建时间(ms时间戳) |
| sqtBizOrderIdList | List<Long> | 否 | 美团企业版订单ID列表 |
StaffInfo字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| staffName | String | 否 | 张三 | 员工姓名 |
| staffIdentifier | String | 是 | C20210322 | 企业对该员工的唯一标识 |
ScheduleInfo字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| startTime | Long | 是 | 1600000000000 | 开始时间(ms时间戳) |
| endTime | Long | 是 | 1700000000000 | 结束时间(ms时间戳) |
| scheduleType | Integer | 否 | 0 | 日程类型(默认0):0-不限;1-单程;2-往返 |
| cityList | List | 否 | 城市信息列表 |
CityInfo字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| cityType | Integer | 是 | 10 | 城市类型:10-不区分出发或到达的城市;11-出发地城市;12-目的地城市 |
| citySource | Integer | 否 | 10 | 城市数据来源 10-境内location |
| cityId | String | 是 | 110000 | 城市编号(国标code) |
| cityName | String | 是 | 北京市 | 城市名称 |
| address | String | 否 | 望京国际研发园 | 出发地址 |
| longitude | String | 否 | 116.488634 | 出发经度 |
| latitude | String | 否 | 40.007064 | 出发纬度 |
CostCenterInfo字段说明
| 名称 | 类型 | 是否必填 | 示例 | 说明 |
|---|---|---|---|---|
| costNo | String | 是 | CC01 | 成本中心编码(限制最多30个字符) |
| costName | String | 是 | 成本中心01 | 成本中心名称(限制最多128个字符) |
# 3.示例
# 3.1.请求示例
# 3.1.1.请求示例
{
"accessKey":"B3KSWLDSKSKDMJ",
"content":"UgxoCGPQIzoP"
}
# 3.1.2.请求参数content解析
{
"ts": 1617085650321,
"entId": 100991,
"externalApplyNoList": ["外部用车申请单号"]
}
# 3.2.响应示例
# 3.2.1.响应结果
{
"traceId":"56a0af18ae30a168d4006c7c",
"status":0,
"msg":"success",
"data":"ygZ013Z4BFTEOTHQ9QwHgfncKoRRv0ftZz-jo2jHKybctyrp8aI83D-svRL-Rbw9oiLkcbFGii3AMYXYtOUz3PbPY4tBVFsCRarvw_7epVZKLy6XyZtvQmOyb5GEGvjlhBB5LTaJFixVkRC2MwqRtP1F2L6WpH-ckENALE69rAuxOVLN-WV2PsxC6FqbUQCjnmb4x-T0ydFoOKpl80_ArEZdIOBqnZY_9o0qQa5eWGAkivCoXRNNicqeiSOb-SKmn4XYYWbB9m0gM4A8hj0p9iNqMyOxVjg7dfb2JLvbcuAG4kgNhfUkT454gkDNSr8XC2uGIWY5yJ-76y0871cbXejXlVfIsWW44T1UjSrJieaI4VVX8jEKOUbqD9Kq_ASqFhGSNE4ekTCsqcn4hb4CafWD-YFL4708qp7wf8HcyqkfRKcFmXFMvUBi373J-hrSBAEBX3y1PcZRf7MSVJNujtK0CMu3HNltLmc8FVByK-OQTWM7MntXmNTFpBVwJuany9V4fgekjX2Xla1XObuxbHiyu_-ztLT-N0UHY3jklFaIAE_BLvhqT99b-lwbuUV58v-7Y69tH5qGWUYZL85haJ604RbOyFp6iNQ_thTDOZ0CuTicVesWol-ndCBbOhSx_YGDNcLQ1xLpASCBNd-N3vi3SJn0-4AP-d6K3vWlE9qAfnTAG8vEI3F7mYnfbJi8fI9qjEzABursJO8l_4KvKxV7ttXNCewHNg3cJN9AfYgU0K1sXiTbB-Mcw7HHA2rSTWs-l9uDvwA_W7mHgEzGiXevsf0Mj_DkadLPhaJ_W-A9D0F-ammfCR9J9eg_2SeFBMWVXXVj7pNtEJlPNg5aK3UZWek_pypE6wKbKWFj3YgJGJWDrzrUWlsU4rORQBBXVqTrLJf2Ep4FFS2A2ZUNnsL6JLJjILuiB600S4aIs7A"
}
# 3.2.2.响应参数data解析
{
"pageNum": 1,
"pageSize": 10,
"pageTotal": 1,
"totalCount": 1,
"applyList": [
{
"applyNo": "CA1747097793694048299",
"sceneType": 2,
"rulePackIdentifier": "1705301292777",
"externalApplyNo": "外部用车申请单号",
"applyType": 201,
"submitStaff": {
"staffId": null,
"staffName": "张三",
"staffIdentifier": "员工唯一标识"
},
"applyReason": "拜访客户",
"applyCount": 99,
"applyAmount": "123.45",
"scheduleList": [
{
"startTime": 1675995929843,
"endTime": 1676082329843,
"scheduleType": 1,
"cityList": [
{
"cityType": 10,
"citySource": 10,
"cityId": "110105",
"cityName": "朝阳区",
"address": "具体地址-110000",
"longitude": "116.488634",
"latitude": "40.007064"
}
]
}
],
"costCenterList": [
{
"costNo": "costNo1",
"costName": "costName1"
}
],
"workflowStatus": 60,
"dataStatus": 20,
"createTime": 1705375548186,
"sqtBizOrderIdList": null
}
]
}
# 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次,超出限额则会报错 |
| 10170001 | 参数校验不通过,必填参数为空 | 请查看响应结果中的msg信息,根据提示进行调整,必传字段不可传空值 |
| 10170002 | 入参数据校验不通过 | 请查看响应结果中的msg信息,根据提示确认字段是否正确传值,如sceneType枚举值错误等 |
| 40175000 | 未知错误,请联系美团侧研发 | 请提供响应结果中的traceId参数,联系客户经理进行排查 |
| 40175001 | 部分处理成功 | 请查看响应结果中的result和itemMsg信息,根据解决方案进行调整 |
# 4.2.result错误码
| 错误码 | 错误描述 | 解决方案 |
|---|---|---|
| 10170000 | 参数校验不通过,参数格式不是合法的json | 请检查请求传入的请求数据模型,是否符合接口文档描述。 |
| 10170001 | 参数校验不通过,必填参数为空或取值范围不正确 | 请检查提示信息中的属性,是否符合接口文档描述。 |
# 5.代码实例
依赖SDK包地址:SDK下载地址
package com.meituan.sqt.demo.in.apply;
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.apply.CarApplyDetailPageQueryRequest;
import com.meituan.sqt.response.in.BaseApiResponse;
import com.meituan.sqt.response.in.apply.CarApplyDetailPageQueryResult;
public class CarApplyQueryDemo {
private static final String invokeUrl = "https://waimai-openapi.apigw.test.meituan.com/api/sqt/open/car/applyDetail/pageQuery";
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 {
// 构建请求对象
CarApplyDetailPageQueryRequest carApplyDetailPageQueryRequest = new CarApplyDetailPageQueryRequest();
carApplyDetailPageQueryRequest.setTs(System.currentTimeMillis());
carApplyDetailPageQueryRequest.setEntId(sqtClient.getEntId());
carApplyDetailPageQueryRequest.setPageNum(1);
carApplyDetailPageQueryRequest.setApplyNoList(Lists.newArrayList("CA001"));
// API调用
// 注意:超时时间默认以请求对象中注解ApiMeta上设置的为准,也可以自定义传递对应的超时时间
BaseApiResponse<CarApplyDetailPageQueryResult> response = sqtClient.invokeApi(invokeUrl, carApplyDetailPageQueryRequest, null, null);
// 响应结果为空处理
if (response == null) {
// 处理响应结果为空情况
// ...
}
// 获取结果
if (ResponseStatusEnum.SUCCESS.getCode().intValue() == response.getStatus()) {
// 成功
CarApplyDetailPageQueryResult result = response.getRealData();
// 处理业务逻辑
// ...
} else {
// 处理失败场景
handleRespFailResult(response);
}
}
private static void handleRespFailResult(BaseApiResponse<CarApplyDetailPageQueryResult> 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 | 2024-01-16 | 新增用车申请列表查询接口 |