TMC专用接口列表
获取房量房价接口
功能描述:TMC专用获取房量房价接口,兼容单个房价码可能会返回多次,指定托管客户输出活动价
房价房量接口接入方案
- 1、接入方每天不超过三次拉取全量房价房量,每次间隔建议6小时以上
- 2、接入方每次拉取全量房价房量,时间范围是1-90天
- 3、接入方使用验单接口发现房价房量变更,及时拉一次当前酒店的房价房量
- 4、接入方可以接入房价房量变更通知接口,若有房量房价变更,华住商旅系统会及时通知
限流整改措施
- 1、若监测到接入方收到整改通知后,依然存在频繁拉取房价房量,会做一定限流甚至关停IP处理
接口地址:/hotel/getTMCRoomPrice
请求方式:POST
请求参数说明:
参数名 | 参数类型 | 备注 | 是否必填 | 示例值 |
---|---|---|---|---|
cardId | String | 公司卡号 | 是 | VCENTCRM0002220001 |
cardPassWord | String | 公司卡密码 | 是 | TestPassword |
memberLevelList | List<String> | 会员级别列表 企业会员 K:企业铂金 85含双早 C:企业金卡 88含双早 J: 企业玫瑰金88不含早 U: 92含双早 D: 企业银卡92不含早 O: 95含双早 T: 95不含早 个人会员 I:个人铂金会员85含双早 B:个人金会员88含单早 A:个人银会员92不含早 P:个人星会员98不含早 如果不填则默认以公司卡号的会员等级去获取 | 否 | 注: (1)TMC客户必填(根据自己实际需要的等级传参) (2)直连可不传,不传时,默认只返回当前cardId对应等级的企业价格 |
checkInDate | Date | 入住日期 | 是 | 2020-03-06 |
checkOutDate | Date | 离店日期 | 是 | 2020-03-07 |
hotelIdList | List<String> | 酒店列表 一次最大支持查询1家酒店 | 是 | ["2000505"] |
roomTypeList | List<String> | 房型列表 不传默认取所有房型 | 否 | ["DR"] |
adultsPerRoom | Integer | 一间房的入住人数,用于获取多人价(举例:一人价、两人价等); 入住人数:1-5,目前不支持大于5人(不涉及儿童数量,价格只根据成人数量计算,举例:两大一小,数量传2) | 否 | 不传值,默认是2 |
请求示例:
{
"cardId": "VCENTCRM0002220001",
"cardPassWord": " TestPassword",
"memberLevelList": ["K","C"],
"checkInDate": "2020-05-20",
"checkOutDate": "2020-05-21",
"hotelIdList": [
"2000505"
]
}
返回参数说明:
参数名 | 参数类型 | 备注 |
---|---|---|
code | code | 状态码 200 成功! 500 应用程序繁忙,请稍后再试! |
message | String | 响应消息 |
content | List<RoomDTO> |
RoomDTO
参数名 | 参数类型 | 备注 |
---|---|---|
rateCode | String | 房价码ID 注意事项: 1、在每个企业中单个酒店的同一个房价码ID会存在不同房型下面,同一个房型下不会出现重复房价码ID 2、若在酒店中同一个房型下有重复房价码ID,一般性都是固定价(RFPNegotiation),则根据rfpCardIdList中企业卡号划分到不同的企业下面即可。 |
rateCodeName | 房价码名称 | |
rateCodeDescription | 房价码描述 | |
checkInTypeList | String | 入住类型 NONE 不限制 HOUR 按小时 DAY 按天 企业商旅目前只支持按天入住(DAY) |
activityId | 活动ID 注意事项: 1、活动ID不为空即为活动房价码 2、连住活动房价码存在提前离店收取罚金 3、判断连住优惠活动规则:活动ID不为空,预订政策中minCheckInUnit天数大于1。 | |
tagList | List<String> | 1、门市价(RackRate):没有任何折扣的价格,一般性不输出; 2、会员价(Base):基于企业卡等级折扣的价格,比如企业卡等级是K,就是85折价格; 3、固定价(RFPNegotiation):某企业与某酒店的某个或多个房型签订的价格,比如A企业与A酒店大床房签订一段时间200元的价格; 4、活动价(Standard):一般性有两种折扣模式:一种是折上折模式,比如提前1天预订9折,就是在会员价基础上在打9折;一种是固定活动价格,比如固定400元;活动价上线前需要运营配置指定的企业;可判断activityId是否不为空,若不为空就是活动价。 5、单店协议价(Negotiation):某酒店与某企业签订的一种固定协议价格 |
priceDailyList | List<PriceDailyDTO> | 每日价格 注意事项: 1、每日的总对总结算金额是按照每日税后价格计算的; 2、小规模纳税人每日总对总价格是每日税后价格*1.0523,保留两位小数,四舍五入。 |
roomCountDailyList | List<RoomCountDailyDTO> | 每日房量 房价码返回为空的情况 1、此酒店已下架此房价码 2、没有匹配房价码的售卖规则(如连住时间、售卖时间等) 注意事项:一般性判断availableCount数量即可;若不可预定或者没房量,此字段都是0。 |
memberAndBreakFastList | List<BreakFastDTO> | 会员和早餐 |
memberLevels | List<String> | 会员等级 |
bookInfo | BookDTO | 预订政策 注意事项:通过预订政策判断活动房价码可预订时间范围,可入住时间范围以及是否需满足连住要求等。 举例:活连住动(活动ID13135),新春优惠-提前1天连住2晚折上9折 "minBookUnit":1---提前一天预订 "minCheckInUnit":2---连续预订两晚 "beginBookDate":"2024-01-31",--开始预订日期 "endBookDate":"2024-02-28"-----结束预订日期 "firstCheckInDate":"2024-02-01",-----开始入住日期 lastCheckOutDate":"2024-02-29"-----结束入住日期 条件今天是2月27日 场景1:2月27日-03月02日;不满足提前一天预订的条件,不满足3月1日入住条件,不能支持预订 场景2:2月28日-03月02日;3月1日的入住日期不满足在开始入住日期和结束入住日期范围内,不能支持预订 场景3:2月28日-03月01日;满足提前一天预订,2月28日和2月29日均在入住日期范围内,此场景可以支持预订 |
checkInInfo | CheckInDTO | 入住政策 |
cancelInfo | CancelDTO | 取消政策 (取消时间是代表酒店的当地时间)(若是海外酒店需要换算成北京时间,可以根据酒店详情中的时区换算) |
otherInfo | OtherDTO | 其他政策 |
rfpCardIdList | List<String> | 当rateCode的taglist是RFPNegotiation时,返回可使用此房价码的企业卡号列表。(此字段供TMC使用,直连客户可忽略) 输出格式:"rfpCardIdList": [ "v111122223333"]; 代表这个固定价房价码支持这个TMC下的这些企业托管卡可以使用。 |
activityControlInfo | ActivityControl | 当rateCode的taglist是Standard时,通过黑白名单controlType字段显示活动价的企业卡号列表是WHITE(白名单)或BLACK(黑名单); 1)全量输出,输出格式如下: I、输出格式:"activityControllnfo":{"activityld":"123456,"controlType":null,"controlList":null}; 代表这个活动房价码在这个TMC下的全量托管卡都可以使用。 2)controlType是WHITE(白名单),输出格式如下: I、输出格式:"activityControllnfo":{"activityld":"123456","controlType":"WHITE","controlList":["v111122223333","V23333344444","V444322221111"]}; 代表这个活动房价码支持这个TMC下的这些企业托管卡可以使用。 3)controlType是BLACK(黑名单),输出格式如下: I、输出格式:"activityControllnfo":{"activityld":"123456","controlType":"BLACK","controlList":["v111122223333","V23333344444","V444322221111"]}; 代表这个活动房价码除了这个TMC下的这些企托管卡,TMC下的其他托管卡都可以使用。 II、输出格式:"activityControllnfo":{"activityld":"123456","controlType":"BLACK","controlList":[]}; 代表这个活动房价码在这个TMC下的全部托管卡都可以使用。 |
rateCodeControl | RateCodeControl | 当华住酒店类型是非中国内地酒店(包含港澳台酒店)时,返回可使用此房价码的企业卡号列表。 通过controlType字段显示活动价的企业卡号列表是WHITE(白名单) 1)controlType是WHITE(白名单),输出格式如下: 输出格式:"rateCodeControl":{"controlType":"WHITE",""controlList":["v111122223333","V23333344444","V444322221111"]}; 代表这个海外房价码支持这个TMC下的这些企业托管卡可以使用。 |
使用华住商旅接口"/hotel/getTMCRoomPrice"需要特别注意事项。
- 如果"memberLevelList"传入参数是多个等级的方式,出参时返回的房价码基于包含的不同数量早餐包需要做程序处理。 华住商旅目前会返回两种形式的房价码早餐包,字段是 "memberAndBreakFastList",如下:
- a、返回一个房价码包含一个等级的早餐包 ,字段"memberAndBreakFastList",主要房价码是"企业会员价","企业会员折上折活动价";
- b、返回一个房价码包含多个等级的早餐包 ,字段"memberAndBreakFastList",主要是房价码是"门市固定折扣价","RFP价格"; 如果遇到房价码中包含多个等级的早餐包,需要按照不同等级匹配一次房价码中的早餐包即可。
- 如果"memberLevelList"传入参数是一个等级的方式,出参时返回的房价码仅包含一个等级的早餐包,不需要二次处理。
第一、afterTaxPrice和companyToGroupPrice字段解释
- afterTaxPrice为含税价
- companyToGroupPrice为含税价+税点差额
无论对客展示是显示afterTaxPrice还是显示companyToGroupPrice,验价接口和下单接口统一传afterTaxPrice。(见订单相关接口模式)
第二、“税点差额”解释
公司总对总订单情况中,由于存在小规模纳税人的酒店,导致华住总部开票和酒店开票之间存在税点差额,需要补额外税点费用。 税点差额计算方法:afterTaxPrice*0.0523(保留两位小数,第三位小数四舍五入) 因此业务上需判断税点差额由客人承担还是公司承担
- 由客人承担时并且订单是总对总订单,则将companyToGroupPrice显示给客人;
- 由公司承担时并且订单是总对总订单,则将afterTaxPrice显示给客人;
特别地,由于现付订单(非总对总订单)从门店直接拿票,无需要补额外税点费用。因此现付订单前端显示afterTaxPrice即可。
PriceDailyDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
roomTypeId | String | 房型 |
bizDate | Date | 营业日 |
currencyCode | String | 币种 CNY:人民币 EUR:Euro AED:United Arab Emirates Dirham AFN:Afghani AMD:Armenian Dram ANG:Netherlands Antillean Guilder AOA:Kwanza ARS:Argentine Peso AZN:Azerbaijan Manat BAM:Convertible Mark BBD:Barbados Dollar BDT:Taka BGN:Bulgarian Lev BHD:Bahraini Dinar BIF:Burundi Franc CHF:Swiss Franc DKK:Danish Crones DZD:Algerian Dinar EGP:Egyptian Pound HUF:Hungarian Forint OMR:Omani Rial QAR:Qatari Riyal SAR:Saudi Riyal SEK:Swedish Crones TND:Tunisian Dinar USD:United States Dollar XCD:East Caribbean Dollar GBP:Pound Sterling |
marketPrice | BigDecimal | 门市价 |
marketCNYPrice | BigDecimal | 人民币门市价(含税价) |
beforeTaxPrice | BigDecimal | 税前价(净价) |
beforeTaxCNYPrice | BigDecimal | 人民币税前价(净价) |
afterTaxPrice | BigDecimal | 税后价(含税价) |
afterTaxCNYPrice | BigDecimal | 人民币税后价(含税价) |
multiPerson | Int | 一人价、两人价 |
companyToGroupPrice | BigDecimal | 公司总对总价(含税价+税点差价) |
companyToGroupCNYPrice | BigDecimal | 人民币公司总对总价(含税价+税点差价) |
isForbidden | Bool | 是否禁用 |
isBlack | Bool | 房型是否黑名单 |
房价码返回为空的情况
- 此酒店已下架此房价码
- 没有匹配房价码的售卖规则(如连住时间、售卖时间等)
RoomCountDailyDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
roomTypeId | String | 房型 |
bizDate | Date | 营业日 |
retainCount | Int | 保留房量 |
shareCount | Int | 共享房量 |
availableCount | Int | 可售房量 |
isForbidden | Bool | 是否禁用 |
isBlack | Bool | 房型是否黑名单 |
BreakFastDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
companySrc | String | 公司来源 HUAZHU 华住 ACCOR 雅高 |
memberLevel | String | 会员级别 |
breakfastCount | Int | breakfastCount是指入住人的最大早餐份数 举例说明: 1、中国内地酒店(不含港澳台酒店): a、若返回breakfastCount=1,则入住人只有1份早餐 b、若返回breakfastCount=2,则入住人最多2份早餐 2、非中国内地酒店(包含港澳台酒店): a、预订1人价格,若返回breakfastCount=1,则入住人只有1份早餐 b、预订1人价格,若返回breakfastCount=2,则入住人只有1份早餐 c、预订2人价格,若返回breakfastCount=1,则入住人只有1份早餐 d、预订2人价格,若返回breakfastCount=2,则入住人最多2份早餐 |
BookDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
guaranteeMode | String | 支持的担保模式 NONE:无 FIRST_NIGHT:首晚担保 FULL_AMOUNT:全额担保 1、到付和预付区别 a、guaranteeMode是NONE,则支持到店付或者预付 b、guaranteeMode是FIRST_NIGHT或者FULL_AMOUNT,则必须预付 2、担保模式使用 a、企业协议价按照企业卡的担保模式(运营开卡时确认的担保模式) b、活动价按照房价码担保模式,判断房量房价接口中的BookDTO中的guaranteeMode(担保模式)(房量房价接口中activityId不为空就是活动房价码;活动价下单时,验价及下单接口必须要传activityId,否则默认为会员价) 3、现付客户不能使用活动价注意事项 由于活动价的担保模式都是需预付,导致因公现付或者因私订单,下单后会在5分钟内自动取消。所以建议因公现付客户或者因私订单不要使用活动价,而是使用企业协议价下单。 |
beginBookDate | Date | 开始预订日期 |
endBookDate | Date | 结束预订日期 |
bookUnit | String | 提前预订单位 NONE 不限制 HOUR 按小时 DAY 按天 |
minBookUnit | Int | 最小提前多久预订,如果bookUnit是小时就是从24点倒推 |
maxBookUnit | Int | 最大提前多久预订 |
firstCheckInDate | Date | 开始入住日期 |
lastCheckOutDate | Date | 结束入住日期 |
checkInUnit | String | 连续入住单位 NONE 不限制 HOUR 按小时 DAY 按天 |
minCheckInUnit | Int | 最小连续入住 |
maxCheckInUnit | Int | 最大连续入住 |
bookDesc | String | 预订说明 |
注:
仅支持当日预订
minBookUnit(最小提前预订):等于0
maxBookUnit(最大提前预订):等于0
CheckInDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
isOneSelf | Bool | 是否必须本人本卡 |
checkInDesc | String | 入住说明 |
CancelDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
isCanCancel | Bool | 是否可取消 |
lastCancelDay | Int | 最晚取消天 "lastCancelDay": 0,表示当天 "lastCancelDay": 1,入住日前一天 "lastCancelDay": 2,入住日前两天 以此类推(在允许时间范围内可以支持免费取消) |
lastCancelTime | String | 预付最晚取消时间,指当天时间 若是海外酒店则是当地时间,可根据酒店详情中时区timeZone字段换算。 |
cancelDesc | String | 取消说明 |
OtherDTO:
参数名 | 参数类型 | 备注 |
---|---|---|
isPromotionCodeCanBook | Bool | 是否必须使用促销券码才能预订 |
isCanUseCoupon | Bool | 是否支持优惠券 |
otherDesclastCancelTime | String | 其他说明 |
ActivityControl
参数名 | 参数类型 | 备注 |
---|---|---|
activityId | code | 活动ID |
controlType | ControlType | 管控类型 BLACK 黑名单 WHITE 白名单 黑白名单不会同时返回 |
controlList | List<String> | 管控列表 存储管控的卡号 |
RateCodeControl
参数名 | 参数类型 | 备注 |
---|---|---|
controlType | ControlType | 管控类型 WHITE 白名单 |
controlList | List<String> | 管控列表 存储管控的卡号 |
返回示例:
{
"code": "200",
"content":
[
{
"hotelId": "2000014",
"roomRateList":
[
{
"activityId": "373140002",
"bookInfo":
{
"beginBookDate": 1598371200000,
"bookDesc": "预订说明:担保方式:NONE,预订日期范围(开始日期:2020-08-26,结束日期:2021-07-31),提前预订单位:DAY,最小提前预订:0 (0表示无限制),最大提交预订:9999 (9999表示无限制),最早入住日期:2020-08-26,最晚离店日期:2021-07-31,连续入住单位:DAY,最小连续入住1 (0表示无限制),最大连续入住:9999 (9999表示无限制)",
"bookUnit": "DAY",
"checkInUnit": "DAY",
"endBookDate": 1627660800000,
"firstCheckInDate": 1598371200000,
"guaranteeMode": "NONE",
"lastCheckOutDate": 1627660800000,
"maxBookUnit": 9999,
"maxCheckInUnit": 9999,
"minBookUnit": 0,
"minCheckInUnit": 1
},
"cancelInfo":
{
"cancelDesc": "取消说明:是否可取消:否,最晚取消天:999最晚取消时间:23:00:00",
"isCanCancel": false,
"lastCancelDay": 999,
"lastCancelTime": "23:00:00"
},
"checkInInfo":
{
"checkInDesc": "入住说明:是否必须本人本卡:否",
"isOneSelf": false
},
"checkInTypeList":
[
"DAY"
],
"memberAndBreakFastList":
[
{
"breakfastCount": 0,
"companySrc": "HUAZHU",
"memberLevel": "D"
}
],
"memberLevels":
[
"D"
],
"otherInfo":
{
"isCanUseCoupon": false,
"isPromotionCodeCanBook": false,
"otherDesc": "其他说明:是否必须使用促销券码才能预订:否,是否支持优惠券:否,"
},
"activityControlInfo":{
"activityId":"373140002",
"controlType":"BLACK",
"controlList":[
"VCENTCRM0002221024","VCENTCRM0002221025"
]
},
"RateCodeControl":{
"controlType":"WHITE",
"controlList":[
"VCENTCRM0002221024","VCENTCRM0002221025"
]
},
"priceDailyList":
[
{
"afterTaxPrice": 3200,
"beforeTaxPrice": 3200,
"bizDate": 1625673600000,
"companyToGroupPrice": 3200,
"currencyCode": "CNY",
"isBlack": false,
"isForbidden": false,
"marketPrice": 4000,
"roomTypeId": "DR1"
},
{
"afterTaxPrice": 3200,
"beforeTaxPrice": 3200,
"bizDate": 1625760000000,
"companyToGroupPrice": 3200,
"currencyCode": "CNY",
"isBlack": false,
"isForbidden": false,
"marketPrice": 4000,
"roomTypeId": "DR1"
}
],
"rateCode": "P1D080HZU-373140002-D",
"rateCodeDescription": "支付后不可取消,预订说明:担保方式:NONE,预订日期范围(开始日期:2020-08-26,结束日期:2021-07-31),提前预订单位:DAY,最小提前预订:0 (0表示无限制),最大提交预订:9999 (9999表示无限制),最早入住日期:2020-08-26,最晚离店日期:2021-07-31,连续入住单位:DAY,最小连续入住1 (0表示无限制),最大连续入住:9999 (9999表示无限制)",
"rateCodeName": "支付后不可取消",
"roomCountDailyList":
[
{
"availableCount": 5,
"bizDate": 1625673600000,
"isBlack": false,
"isForbidden": false,
"retainCount": 0,
"roomTypeId": "DR1",
"shareCount": 5
},
{
"availableCount": 5,
"bizDate": 1625760000000,
"isBlack": false,
"isForbidden": false,
"retainCount": 0,
"roomTypeId": "DR1",
"shareCount": 5
}
],
"tagList":
[
"Standard"
]
}
]
}
],
"echoToken": "e49fa80e-6284-4fa3-a81b-e002d8f0ba89",
"message": "成功!"
}
获取卡等级信息
获取卡的等级信息,bookerids不传则获取cardid的信息,bookerids传了则只获取bookerids里面卡的信息
接口地址:/member/getCardInfo
请求方式:POST
请求参数说明
参数名 | 参数类型 | 备注 | 是否必填 | 示例值 |
---|---|---|---|---|
cardId | String | 公司卡号 | 是 | VCENTCRM0002220001 |
cardPassWord | String | 公司卡密码 | 是 | TestPassword |
bookerIds | List<String> | 托管卡列表 | 否 |
请求示例
{
"cardId": "VCENTCRM0002220001",
"cardPassWord": " TestPassword",
"bookerIds": ["VCENTCRM0002220003","VCENTCRM0002220002"]
}
返回参数说明
参数名 | 参数类型 | 备注 |
---|---|---|
code | code | 状态码 200 成功! 500 应用程序繁忙,请稍后再试! |
message | String | 响应消息 |
content | List<CardInfo> | 卡信息 |
CardInfo
参数名 | 参数类型 | 备注 |
---|---|---|
cardId | String | 卡号 |
memberLevel | String | 卡等级 |
cardCompanyName | String | 卡名字 |
返回示例
{
"code": "200",
"content":
[
{
"cardId": "VCENTCRM0002220003",
"memberLevel":"K",
"cardCompanyName":"测试公司1"
},
{
"cardId": "VCENTCRM0002220004",
"memberLevel":"J",
"cardCompanyName":"测试公司2"
}
],
"echoToken": "e49fa80e-6284-4fa3-a81b-e002d8f0ba89",
"message": "成功!"
}
获取托管公司和酒店固定价关系
接口地址:/hotel/getCustomerRFP
请求方式:POST
请求参数说明
参数名 | 参数类型 | 备注 | 是否必填 | 示例值 |
---|---|---|---|---|
cardId | String | 公司卡号 | 是 | VCENTCRM0002220001 |
cardPassWord | String | 公司卡密码 | 是 | TestPassword |
bookerIds | List<String> | 托管卡列表 | 否 | |
hotelId | String | 酒店id | 否 |
请求示例
{
"cardId": "VCENTCRM0002220001",
"cardPassWord": " TestPassword",
"bookerIds": ["VCENTCRM0002220003","VCENTCRM0002220002"],
"hotelId":"2000014"
}
返回参数说明:
参数名 | 参数类型 | 备注 |
---|---|---|
code | code | 状态码 200 成功! 500 应用程序繁忙,请稍后再试! |
message | String | 响应消息 |
content | List<TutelageCustomerRFPDTO> | 签约关系 |
TutelageCustomerRFPDTO
参数名 | 参数类型 | 备注 |
---|---|---|
bookerId | String | 托管卡id |
hotelId | String | 酒店id |
rateCode | String | 房价码 |
roomType | String | 房型 多个房型用“逗号”分隔 |
rfpPrice | Decimal | 房价码价格 |
ruleStartDate | Date | 签约开始时间 |
ruleEndDate | Date | 签约结束时间 |
disableDays | List<DisableDateDTO> | 禁用日期列表。没有禁用日期就返回null |
DisableDateDTO
参数名 | 参数类型 | 备注 |
---|---|---|
beginDate | Date | 禁用开始时间 |
endDate | Date | 禁用结束时间 |
disableDays | String | 时间段之内每周几禁用,1表示周1,7表示周日 |
返回示例
{
"code": "200",
"content":
[
{
"bookerId": "VCENTCRM0002220003",
"hotelId":"2000014",
"rateCode":"RFP-300-3-1",
"roomType":"DR1,SQ1",
"rfpPrice":"300",
"ruleStartDate":"2022-11-01",
"ruleEndDate":"2023-11-01"
}
],
"echoToken": "e49fa80e-6284-4fa3-a81b-e002d8f0ba89",
"message": "成功!"
}