酒店订单查询
- 接口(建议后缀):/order/hotel/queryOrder
- Method:POST
- 数据格式:Json
- 调用方:每刻
- 接口说明:每刻将通过该接口,获取特定范围的酒店订单数据
[warning] 对接前先看:
目前常见的参数组合(以下例子不包括必填参数)示例:
- 每日凌晨定时任务:startDate + endDate 拉取该时间范围内对应 externalCorpCode 企业的订单;
- 申请单申请人触发:externalApprovalNo 拉取指定申请单下预定的订单;
- 管理员或者预定人触发丢失订单的补充拉取:externalEmployeeCode + startDate + endDate 拉取指定员工;
- 第三方对接了第三方订单通知实时推送接口:orderId + operationId 直接拉取对应订单;
当订单进入每刻后,很快就会生成费用,甚至费用可能已经报销,原则上是不允许第三方订单进行修改(尤其是金额),如果这笔订单传的金额不正确,或者人为因素导致订单金额多了或者少了,可以采取 orderId 保持原单不变,生成一笔新的 operationId 订单,金额为该笔订单多了或少了的金额。
请求参数
字段 |
类型 |
必填 |
描述 |
externalCorpCode |
String |
Y |
企业在第三方的唯一标识 |
externalEmployeeCode |
String |
[1] |
下单人在第三方的唯一编码 |
externalApprovalNo |
String |
[1] |
申请单在第三方唯一编码 |
orderId |
String |
[1] |
订单号 |
operationId |
String |
[1] |
操作号 |
startDate |
String |
[2] |
开始日期(yyyy-MM-dd)[3] |
endDate |
String |
[2] |
结束日期(yyyy-MM-dd)[3] |
dateType |
String |
N |
参考时间(不传时等同 OPERATION) |
onlyApprovingOrder |
bool |
N |
限定只拉取审批中的订单(默认不传,不传按 false 处理) |
pageNo |
int |
Y |
第几页(从第1页开始) |
pageSize |
int |
Y |
每页容量(最大为 100) |
[info] 说明:
[1] 非必填参数,至少填写一个,可以填写多个,如果填写了多个,条件是叠加的,比如四个个字段都有值,externalCorpCode
企业、externalEmployeeCode 员工、approval 申请单和 orderId 订单对应的订单信息。
[2] 没有开始与结束日期,默认结束日期为请求日期;只有开始时间,表示从开始日期到调用日期的订单;只有结束日期,开始日期为结束日期的前一个月。
[3] 默认开始时间为00:00,默认结束时间为23:59。
参考时间
code |
定义 |
ORDER |
订单时间(暂不支持) |
OPERATION |
操作时间 |
响应结构
字段 |
类型 |
必填 |
描述 |
success |
bool |
Y |
请求是否成功 |
errorMessage |
String |
N |
失败信息(当 success 为 false 时,失败信息为必填) |
data |
List<HotelOrder> |
Y |
订单详情列表 |
hasNextPage |
bool |
N |
是否有下一页 |
[warning] 关于请求分页如何结束:
hasNextPage = false 标志着分页结束,success 仅表示请求是否成功。
HotelOrder
字段 |
类型 |
必填 |
描述 |
orderId |
String |
Y |
订单在第三方的唯一编码 |
operationId |
String |
Y |
操作在第三方的唯一编码 |
originalOperationId |
String |
[4] |
关联原操作号 |
originalAppCode |
String |
N |
实际供应商(TMC),已废弃 |
originalAppName |
String |
N |
实际供应商名称,已废弃 |
sourceAppCode |
String |
N |
实际供应商(TMC)原 originalAppCode 废弃,保留接收,但新对接 TMC 使用该字段 |
sourceOrderId |
String |
N |
实际供应商订单号 |
externalCorpCode |
String |
Y |
企业在第三方的唯一编码 |
externalEmployeeCode |
String |
Y |
预订人在第三方的唯一编码 |
externalEmployeeName |
String |
N |
预订人在第三方的姓名 |
externalDepName |
String |
N |
预订人在第三方部门名称 |
externalApprovalNo |
String |
N |
申请单在第三方的唯一编码 |
status |
String |
Y |
订单状态 |
onBusiness |
bool |
N |
是否因公 |
isOnline |
bool |
N |
是否在线预订 |
orderAt |
String |
Y |
预订时间(yyyy-MM-dd HH:mm:ss) |
operationAt |
String |
N |
订单状态改变时间(yyyy-MM-dd HH:mm:ss) |
paidAt |
String |
Y |
支付时间(yyyy-MM-dd HH:mm:ss) |
payType |
String |
Y |
付款方式 |
prepaid |
bool |
Y |
是否预付 |
totalFee |
BigDecimal |
Y |
订单总金额==企业支付(corpPayFee) + 个人支付(personalPayFee) |
corpPayFee |
BigDecimal |
Y |
订单企业支付部分金额 |
personalPayFee |
BigDecimal |
Y |
订单个人支付部分金额 |
refundFee |
BigDecimal |
N |
退订费, 酒店方收的退票手续费 |
refundServiceFee |
BigDecimal |
N |
退订服务费, TMC收的退票服务费 |
serviceFee |
BigDecimal |
N |
服务费,TMC收的预订服务费 |
extraServiceFee |
BigDecimal |
N |
额外服务费(酒店本身只能开普票,对于 TMC 补充开专票额外收取的金额) |
taxFee |
BigDecimal |
N |
税费,已废弃 |
deductibleTaxFee |
BigDecimal |
N |
可抵扣税,已废弃 |
nonDeductibleTaxFee |
BigDecimal |
N |
非可抵扣税,已废弃 |
platformAgencyFee |
BigDecimal |
N |
平台服务费(平台收取的服务费,区别于实际供应商服务费) |
currency |
String |
Y |
货币类型(人民币为 CNY) |
incompatibleReason |
String |
N |
不符合申请单的原因 |
remark |
String |
N |
订单备注 |
approver |
String |
N |
授权人在第三方中的唯一标识 |
approver2 |
String |
N |
授权人在第三方中的唯一标识 |
hotelInfo |
HotelInfo |
Y |
酒店信息 |
room |
Room |
Y |
预订房间 |
hotelMeal |
HotelMeal |
N |
餐食类型 |
roomDayCount |
Integer |
N |
间*夜(正值) |
roomQuantity |
Integer |
N |
间数(正值) |
roomFeeInvoiceType |
String |
N |
酒店房价发票类型 InvoiceType |
clientList |
List<Client> |
Y |
入住人列表 |
settlementBatchNo |
String |
N |
结算批次号 |
useStatus |
OrderUseStatus |
N |
(要传该字段请和每刻确认)订单使用状态 |
[info] 说明:
[4] 酒店取消预订的订单才会关联原操作号,详细信息请阅读订单同步首页的描述。
订单状态
付款方式
code |
定义 |
PERSONAL_PAY |
个人支付 |
CORP_ACCOUNT_PAY |
公司支付 |
MIX_PAY |
混合支付 |
是否预付
value |
定义 |
true |
预付给 TMC |
false |
线下支付给酒店方 |
HotelInfo
字段 |
类型 |
必填 |
描述 |
hotelName |
String |
[5] |
酒店中文名 |
hotelNameEn |
String |
[5] |
酒店英文名 |
hotelTel |
String |
N |
酒店联系方式 |
hotelAddress |
String |
N |
酒店地址 |
hotelCity |
City |
Y |
酒店城市 |
starRating |
int |
N |
酒店星级 |
internationalHotel |
bool |
N |
是否国际酒店 |
[info] 说明:
[5] 酒店中文名与英文名至少传一个。
酒店星级
code |
定义 |
1 |
经济型 |
2 |
连锁经济 |
3 |
三星 |
4 |
四星 |
5 |
五星 |
Room
字段 |
类型 |
必填 |
描述 |
roomName |
String |
Y |
房间名称 |
roomNameEn |
String |
N |
房间英文名 |
roomPrice |
List<RoomPrice> |
Y |
房型价格 |
roomTotalFee |
BigDecimal |
Y |
订房总花费 |
currency |
String |
Y |
货币类型 |
checkInDate |
String |
Y |
入住时间(yyyy-MM-dd) |
checkOutDate |
String |
Y |
离店时间(yyyy-MM-dd) |
RoomPrice
字段 |
类型 |
必填 |
描述 |
effectiveDate |
String |
Y |
生效日期(yyyy-MM-dd) |
invalidDate |
String |
Y |
失效日期 (yyyy-MM-dd) |
price |
BigDecimal |
Y |
房间单价 |
HotelMeal
code |
定义 |
WITH_BREAKFAST |
包含早餐 |
WITHOUT_BREAKFAST |
不含早餐 |
Client
字段 |
类型 |
必填 |
描述 |
externalEmployeeCode |
String |
[6] |
员工唯一标识 |
name |
String |
Y |
姓名 |
identityType |
String |
N |
住店人证件类型 |
identityCode |
String |
N |
住店人证件号 |
[info] 说明:
[6] 住店人可能不是企业员工,如果填写了该字段,表示为企业员工,如果只有姓名,表示外部同行人。
数据示例
以下示例为混合支付:
- 原订单:每间夜 500,预订了两天,TMC服务费 30,其中企业支付了 630(服务费企业支付),因为超标自付,个人支付了 400
- 退订:房间退掉,酒店服务费、TMC服务费不退
- 扣费退订:房间退掉,扣除 10% 费用,即 100,其中企业退了 550,个人退了 350(假设扣费平分,实际根据 TMC 业务来定),TMC服务费不退
- 提前离店:入住了一天,退 1 间*夜,酒店收取未入住的 1 间*夜 20% 罚金,即 100,总退款 400,其中企业退了 250,个人退了 150(假设扣费平分),TMC 服务费不退
类型 |
原订单 |
退订(原价) |
退订(扣费) |
提前离店 |
HotelOrder |
订单总金额 |
totalFee |
1030 |
-1000 |
-900 |
-400 |
企业支付金额 |
corpPayFee |
630 |
-600 |
-550 |
-250 |
个人支付金额 |
personalPayFee |
400 |
-400 |
-350 |
-150 |
退订费 |
refundFee |
0 |
0 |
100 |
100 |
退订服务费 |
refundServiceFee |
0 |
0 |
0 |
0 |
服务费 |
serviceFee |
30 |
0 |
0 |
0 |
额外服务费 |
extraServiceFee |
0 |
0 |
0 |
0 |
间*夜 |
roomDayCount |
2 |
2 |
2 |
2 |
间数 |
roomQuantity |
1 |
1 |
1 |
1 |
Room |
订房总花费 |
roomTotalFee |
1000 |
-1000 |
-1000 |
-1000 |
房间单价(简化) |
roomPrice |
500 |
500 |
500 |
500 |
示例
[warning] 重要:
示例维护并非和文档字段维护一样频繁,如果遇到示例和文档不一致,请以文档为准
请求头:
{
"tokenId": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJtYXljdXJfand0X2Rldl9pZCIsInN1YiI6IlBGMjAwNjIwMTI1NU5GTk8iLCJpYXQiOjE2MDQ2MzA5NjYsImF1ZCI6IlBMQVRGT1JNIiwiZXhwIjoxNjA0NjM0NTY2LCJwcm9kdWN0TGluZSI6IkRBVEFfSFVCIn0.AyNIwPtGUXxFMuHO8Bx-4XeXNyWYRcot40MfsL1swr4"
}
请求示例:
1.每日凌晨定时任务
{
"externalCorpCode": "0123456",
"startDate": "2024-06-12",
"endDate": "2024-06-19",
"pageNo": 1,
"pageSize": 50
}
2.申请单申请人触发
{
"externalCorpCode": "0123456",
"externalApprovalNo": "AE94527002203135xxx",
"pageNo": 1,
"pageSize": 50
}
3.管理员或者预定人触发丢失订单的补充拉取
{
"externalCorpCode": "0123456",
"externalEmployeeCode": "48edc82xxx",
"startDate": "2024-06-12",
"endDate": "2024-06-19",
"pageNo": 1,
"pageSize": 50
}
4.第三方对接了第三方订单通知实时推送接口
{
"externalCorpCode": "021343",
"orderId": "13406390267",
"operationId": "13406390267",
"pageNo": 1,
"pageSize": 50
}
响应示例:
{
"success": true,
"errorMessage": null,
"data": [
{
"orderId": "13406390267",
"operationId": "13406390267",
"originalOperationId": null,
"externalCorpCode": "0123456",
"externalEmployeeCode": "48edc82xxx",
"externalEmployeeName": "xxx",
"externalApprovalNo": "a00a7e3xxxx",
"status": "O",
"onBusiness": true,
"isOnline": true,
"orderAt": "2024-06-19 15:16:24",
"operationAt": "2024-06-19 15:18:40",
"payType": "CORP_ACCOUNT_PAY",
"prepaid": true,
"totalFee": 227.00,
"corpPayFee": 227.00,
"personalPayFee": 0.00,
"refundFee": 0.0,
"refundServiceFee": 0.0,
"serviceFee": 4.00,
"extraServiceFee": 0.0,
"taxFee": 0.0,
"deductibleTaxFee": 0.0,
"nonDeductibleTaxFee": 0.0,
"currency": "CNY",
"incompatibleReason": "",
"remark": "",
"approver": null,
"approver2": null,
"hotelInfo": {
"hotelName": "汉庭酒店(长春重庆路活力城店)",
"hotelNameEn": "HantingHotel(ChongqingRoadHuolichengBranch)",
"hotelTel": "8643181877677",
"hotelAddress": "西四马路398号",
"hotelCityCode": "CT220100",
"hotelCityName": "长春",
"starRating": 2
},
"room": {
"roomName": "高级双床房",
"roomNameEn": null,
"roomPrice": [
{
"effectiveDate": "2024-06-19",
"invalidDate": "2024-06-19",
"price": 223.0
}
],
"roomTotalFee": 223.0000,
"currency": "CNY",
"checkInDate": "2024-06-19",
"checkOutDate": "2024-06-20"
},
"clientList": [
{
"externalEmployeeCode": "48edc82xxx",
"name": "xxx",
"identityType": null,
"identityCode": null
}
],
"paidAt": "2024-06-19 15:18:40"
}
],
"hasNextPage": false
}