B2B 单独预订上线要求
如果您使用 business-to-business (B2B) 集成模型,其中旅行者与您的旅行社之一进行互动,则适用这些启动要求。
概述
B2B 产品发布需求分为两大类:
B2B SA 要求: 这些要求是此预订流程特有的。请仔细阅读这些要求,因为它们可能与您之前整合的任何其他房价类型/预订流程的要求不同。
**通用要求:**这些是所有预订流程的通用要求。请务必满足适用于所有流程的所有通用要求。
核对清单
您可以找到一份清单来帮助您进行开发或提供有关需求的反馈。 如果您打算提供截图用于网站审核,请在核对清单中添加截图和相应日志,这将帮助我们完成审核。
B2B SA 特定要求
一般要求
预订页面
BP5:价格显示必须包含总价和税费明细。
A) 总价
必须在付款页面上向旅客显示预订总价。总价应与 API 响应相符,不允许四舍五入或换算货币。最终明细必须包括房间价格(总计或每晚)、任何额外的每晚费用(除下文property_fee字段中描述的费用外)、所有住宿费用和税费、应收费总额,并列明现在支付的费用和稍后在酒店支付的费用。
B) 税款明细
价格显示必须包含tax_and_service_fee和property_fee的总和,作为标题为“税费”的一行。根据法律规定,在价格明细中提及任何税费总额时,必须显示以下原文。这可以显示为 pop-up、纯文本、模态框或其他实现方式。房产费用不应在结账页面单独显示。
_“这些税款是支付给供应商(e.g. 酒店)的税收回收费用;详情请参阅我们的使用条款。服务费是为您提供预订服务的补偿,其中可能包括供应商收取的费用。_翻译可在 Expedia 合作伙伴解决方案中找到。
tax_and_service_fee返回的值仅包含税务管辖区规定的税费。
C) 合作伙伴服务费用和预订费用
如果 Expedia Group 批准豁免收取预订费用,则必须将合作伙伴服务费或预订费明确区分。如果在预订中添加了 partner-imposed 服务费,则必须向客户明确说明该费用是由合作伙伴收取的,而不是 Expedia Group 收取的,用于单独的服务(i.e,而不是提供住宿的额外费用)。费用可能不会包含在现有的税费项目中。合作伙伴不得使用“费用”一词来描述他们收取的任何费用。他们也可以改用“联盟预订费”或“联盟服务费”。
确认页面
CP1:价格显示必须包含总价以及税费(如果提供明细)。
A) 总价
预订总价必须在确认页面上显示给旅客。总价应与 API 响应相符,不允许四舍五入或换算货币。最终明细必须包括房间价格(总计或每晚)、任何额外的每晚费用(除下文property_fee字段中描述的费用外)、所有住宿费用和税费、应收费总额,并列明哪些费用现在支付,哪些费用稍后在酒店支付。
B) 税款明细
价格显示必须包含tax_and_service_fee和property_fee的总和,作为标题为“税费”的一行。根据法律要求,在价格明细中涉及到任何税费总计时,应显示以下确切文本。这可以显示为 pop-up、纯文本、模态框或其他实现方式。房产费用不应在结账页面单独显示。
_“这些税款是支付给供应商(e.g. 酒店)的税收回收费用;详情请参阅我们的使用条款。服务费是为您提供预订服务的补偿,其中可能包括供应商收取的费用。_翻译内容可在 Expedia 合作伙伴解决方案中找到。
tax_and_service_fee返回的值仅包含税务管辖区规定的税费。
C) 合作伙伴服务费用和预订费用
如果 Expedia Group 批准豁免收取预订费用,则必须将合作伙伴服务费或预订费明确区分。如果在预订中添加了 partner-imposed 服务费,则必须向客户明确说明该费用是由合作伙伴收取的,而不是 Expedia Group 单独收取的服务费(i.e 不是提供住宿的额外费用)。费用可能不会包含在现有的税费项目中。合作伙伴不得使用“费用”一词来描述他们收取的任何费用。他们可以使用“联盟伙伴预订费”或“联盟伙伴服务费”。
确认邮件
ER6:价格显示必须包含总价和税费明细。
A) 总价
预订总价必须显示在发送给旅客的电子邮件收据上。总价应与 API 响应相符,不允许四舍五入或换算货币。最终明细必须包括房价(总计或每晚)、任何额外的每晚费用(除下文property_fee字段中描述的费用外)、所有住宿费用和税费、应收费总额,并列明哪些费用现在支付,哪些费用稍后在酒店支付。
B) 税款明细
价格显示必须包含tax_and_service_fee和property_fee的总和,作为标题为“税费”的一行。根据法律要求,在价格明细中涉及到任何税费总计时,应显示以下确切文本。这可以显示为 pop-up、纯文本、模态框或其他实现方式。房产费用不应在结账页面单独显示。
_“这些税款是支付给供应商(e.g. 酒店)的税收回收费用;详情请参阅我们的使用条款。服务费是为您提供预订服务的补偿,其中可能包括供应商收取的费用。_翻译可在 Expedia 合作伙伴解决方案中找到。
tax_and_service_fee返回的值仅包含税务管辖区规定的税费。
C) 合作伙伴服务费用和预订费用
如果 Expedia Group 批准豁免收取预订费用,则必须将合作伙伴服务费或预订费明确区分。如果在预订中添加了 partner-imposed 服务费,则必须向客户明确说明该费用是由合作伙伴收取的,而不是 Expedia Group 收取的,用于单独的服务(i.e,而不是提供住宿的额外费用)。费用可能不会包含在现有的税费项目中。合作伙伴不得使用“费用”一词来描述他们收取的任何费用。他们可以使用“联盟伙伴预订费”或“联盟伙伴服务费”。
通用发射要求
以下上线要求适用于所有合作伙伴的所有预订流程。每个房价要求列表中提供了每种房价类型的特定附加要求,包括价格显示的详细说明。
一般要求
GR1:使用我们的名称和标识
未经我们事先明确的书面批准,不得在 traveler-facing 或 agent-facing 网站上使用我们的名称和徽标。
示例:

GR2:指向我们的条款和条件网址的链接(将显示)
在您的网站条款和条件文本中提供指向我们条款和条件的链接,或者直接从您的预订页面提供指向条款的链接。这些条款详细说明了管理预订的政策。将以下链接放置在 easy-to-find 位置,链接文字为“供应商条款和条件”。你可以找到英文版和其他版本Expedia 合作伙伴解决方案。
示例:

GR4:其中 Expedia Group 是记录 (MoR) 的 Merchant:关于信用卡规定的正确使用和展示
无论何时,只要您获取、使用、传输、存储或处理旅行者持卡人数据,您都必须遵守支付卡行业数据安全标准委员会发布的支付卡行业数据安全标准。这些规定的完整参考资料可在官方网站上查阅。支付卡行业安全标准委员会网站。
GR5:MoR 或 Property Collect 在哪里:为适用合作伙伴提供 PCI 合规性证明
无论 Expedia Group 是 MoR 还是该物业是 MoR,都必须提供合规性证明 (AOC) 作为 PCI 合规性的证据。
您可以在官方网站上找到有关 PCI 合规性的建议。支付卡行业安全标准委员会网站。
搜索页面
SP1:如果合作方允许预订时包含儿童,则需实施适当的信息传递和儿童年龄录入。
如果您的集成允许儿童旅客,则必须提供在办理入住时指定每位儿童旅客年龄的功能。这些信息是通过以下方式提供的:occupancy对象(见下方示例)。
当旅客指定儿童旅客时,API 响应可能包含年龄限制和/或额外入住费用或婴儿床费用,这可能会影响预订的成本或资格。
各个酒店会界定儿童的年龄范围。通常情况下,年龄不超过 17 岁的个人被视为儿童。某些住宿不接待未满 18 岁的住客。
API 请求示例:
https://api.ean.com/2.4/properties/availability?checkin=2020-09-11
&checkout=2020-09-14
¤cy=USD&language=en-US& occupancy=2-9,4 &property_id=XXXX
&country_code=XX&sales_channel=XXXX
&sales_environment=XXXX&filter=XXXX&rate_plan_count=XXXX
&rate_option=XXXX&billing_terms=XXXX&payment_terms=XXXX
&partner_point_of_sale=XXXX&platform_name=XXXXAPI 响应示例:
"occupancies": {
"2-9,4" : {
"nightly": [
[**用户界面示例:**1 间客房,2 位成人和 2 名儿童(9 岁和 4 岁)。

住宿/房态
AP1:每间客房均有床型描述
购物回复可能会返回bed_groups包含单个值或多个选项的数组。显示配置数组中包含的值,以描述旅客的床位选择。
当bed_groups数组返回多个选项,显示这些选项price_check购物响应中提供了每种床型的链接,以便旅行者进行选择。
必须向旅客显示一条消息,指明选择同一客房中的多个床型仅为请求,如果房态不允许,酒店可能并不会满足这些请求。
房间名称会作为购物响应的 rooms 数组返回。room_name。
API 响应示例
"property_id": "11775754",
"rooms": [
{
"id": "230434524",
"room_name": "Superior double room" ,
"rates": [
{
...
"bed_groups": {
"133243": {
"id": "133243",
"description": "Double bed" ,
"links": {...},
"configuration": [...]
},
"133242": {
"id": "133242",
"description": "2 single beds" ,
"links": {...},
"configuration": [...]
}
},用户界面示例:

AP2:Non-refundable 标志清晰可见
Non-refundable 的可用性由 refundable=false在 购物 可用性响应中表示。当可用性响应中返回 refundable=false时,请明确标记适用的房间。该值的优先级始终高于其他政策数据。在任何情况下,住宿接待方均不退还这些预订的费用。
API 响应示例:
"property_id": "XXXX",
"rooms":
"id": "XXXX",
"room_name": "Fairmont King",
"rates":
"id": "XXXX",
"status": "available",
"available_rooms": 4999,
"refundable": false ,
"deposit_required": false,
"merchant_of_record": "expedia",用户界面示例:

AP3:显示 check-in 和特殊 check-in 指令
必须为每个房间显示 checkin、checkout、fees 和 policies对象的内容,这些内容在 Content 属性定义中返回。此信息必须显示在您的可用性页面上,以确保旅客了解办理入住时可能产生的任何费用或特殊访问说明。
特殊字段 check-in 可能包含对 check-in 至关重要的信息,而这些信息并未包含在 checkin对象的说明字段中,例如要求通知酒店预计到达时间、check-in 位于与客房不同的位置,或者提醒酒店通过电子邮件发送特殊 check-in 说明。
确保在同一区域内向旅客显示 instructions 和 special_instructions。
API 响应示例:
"11775754": {
"property_id": "11775754",
"checkin": {
"begin_time": "16:00 PM",
"end_time": "4:00 AM",
"instructions": "Minimum age to check in is 18 years old.
<br />Extra-person charges may apply and vary depending on property policy.
<br />Government-issued photo identification and a credit card may be required at
check- in for incidental charges.
<br />Special requests are subject to availability upon check-in and
may incur additional charges. Special requests cannot be guaranteed. <ul>. ",
"special_instructions": "Front desk staff will greet guests on arrival. For more details,
please contact the property using the information on the booking confirmation.",
"min_age": 18
"checkout": {
"time": "11:00 AM"
"fees": {
"mandatory": "<p>You'll be asked to pay the following charges at the property:</p>
<ul><li>Deposit: USD 50 per day</li>
<li>Resort fee: USD 28.25 per accommodation,
per night</li></ul> The resort fee includes:<ul
><li>Pool access</li><li>Fitness center access</li><li>Fitness/yoga classes</li>
<li>Airport shuttle</li><li>Phone calls</li><li>In-room safe</li><li>Self parking</li>
<li>Valet parking</li><li>Parking</li></ul> <p>We have included all charges provided to us by the property.
However, charges can vary, for example, based on length of stay or the room you book. </p>",
"optional": "<p>The following fees and deposits are charged by the property at time of service,
check-in, or check-out. </p> <ul> <li>Breakfast fee: between USD 6 and USD 25 per person
(approximately)</li> <li>Late check-out is available for a fee (subject to availability)</li>
<li>Rollaway bed fee: USD 20.0 per night</li>
</ul> <p>The above list may not be comprehensive. Fees and deposits may not include tax
and are subject to change. </p>"
"policies": {
"know_before_you_go": "<ul> <li>Up to 2 children 12 years old and younger stay free when
occupying the parent or guardian's room, using existing bedding. </li>
<li>The property has connecting/adjoining rooms, which are subject to availability
and can be requested by contacting the property using the number on the booking
confirmation. </li> </ul>"用户界面示例:

预订页面
BP1:个人数据采用 SSL 加密
发送或传输个人数据时,您必须使用 SSL 加密来保护客户端浏览器/App 与您的站点之间的连接,以及与相关系统的网络通信。个人数据包括住客姓名、电话号码或电子邮件、付款卡详细信息以及预订/行程收据和确认页面。当连接不安全时停止或重定向连接。
BP2:显示 check-in 和特殊 check-in 指令
对于每个房间,必须显示 checkin、checkout、fees 和 policies对象的内容,这些内容在 Content 属性定义中返回。必须显示此信息,以确保旅客在最终预订之前了解 check-in 的任何潜在费用或特殊访问说明。
特殊字段 check-in 可能包含对 check-in 至关重要的信息,而这些信息并未包含在 checkin对象的说明字段中,例如要求通知酒店预计到达时间、check-in 与客房所在位置不同,或者提醒酒店通过电子邮件发送特殊 check-in 说明。
确保在同一区域内向旅客显示 instructions 和 special_instructions。
BP3:取消政策和 non-refundable 标签清晰显示
在允许旅客在最终预订页面确认购买之前,您必须提供所选房间的取消政策或 non-refundable 标签。Rapid Shopping Availability API 中的 cancel_penalties对象提供了每种价格的取消政策。
对于可退款价格,响应中包含一系列取消政策详情。详情包括:指定手续费的开始日期和结束日期、手续费类型和金额,及任何适用的例外预订日期。手续费类型包括:固定金额手续费、按住宿晚数计算的手续费以及按总费用百分比计算的手续费。
| 响应 | 意义 |
|---|---|
refundable=true | 此价格可全额退款。 |
refundable=true + cancel_penalties | • 此价格可在取消期限内退款。 • 最早的 cancel_penalties.[].start是免费取消截止日期(如果是未来的时间线)。• 最新数据显示,比率为 100% non-refundable cancel_penalties.[].end |
refundable=false | • 该利率为 non-refundable。 • 没有返回取消手续费适用期限。 |
refundable=false + cancel_penalties | • 该费用可部分退款。 • cancel_penalties应与 nonrefundable_date_ranges一起显示,预订创建后将显示此范围的入住日期为 non-refundable。 |
阅读更多关于如何制定取消政策的内容。
参考:
refundable=false
- 一旦创建预订,将立即生成不可退款的金额。
cancel_penalties和nonrefundable_date_ranges将提供更多详细信息。
nonrefundable_date_ranges
- 一旦创建预订,此范围内的住宿日期不可退款。
cancel_penalties
- 适用于
nonrefundable_date_ranges中未涉及的入住日期。 - 当
cancel_penalties为空或未返回时,价格为 100% 不可退款。 - 在
cancel_penalties时间范围内取消将产生手续费。 - 最早的
cancel_penalties.[].start是免费取消截止日期(如果是未来的时间线)。 - 最新
cancel_penalties.[].end之后,比率为 100% non-refundable。
API 响应示例:取消政策和 non-refundable 标志
"property_id": "11775754",
"rooms": [
{
"id": "230434524",
"room_name": "Traditional Room (Partner:Connect Test)",
"rates":
"id": "276321199",
"status": "available",
"available_rooms": 4999,
"refundable": true,
"cancel_penalties": [
{
"start": "2020-09-10T18:00:00.000-07:00",
"end": "2020-09-11T18:00:00.000-07:00",
"amount": "76.00",
"currency": "USD"用户界面示例:

BP4:展示费用需在价格明细中另行支付。
当收费在费用数组内返回时,将每个数值单独显示为住宿的应收费用(入住或退房)。向旅行者出示当地货币并索要兑换金额。这些费用由物业直接收取(不是由我们或地方政府收取),并且不属于税费项下的标准税收回收费用、税款或收费。
API 响应示例:费用数组
"fees" : {
"resort_fee": {
"request_currency": {
"value": "74.97",
"currency": "USD"
},
"billable_currency": {
"value": "74.97",
"currency": "USD"
},
"scope": "per_accommodation",
"frequency": "per_night"
}
},用户界面示例:

BP7:如适用,必须重申儿童年龄。
如果您的集成允许儿童旅客和旅客在选择房间时指定儿童旅客,则必须在预订页面上明确确认儿童旅客的人数及其年龄。此信息通过 child_ages对象提供。
BP8:Expedia Group 是 MoR 或财产收取:说明何时向最终旅行者收取款项。
如果 Expeda Group 是预订代理,请说明提供的信用卡将立即收取预订的全额费用。
如为住宿收款,则说明住宿接待方将在入住或退房时向旅客提供的信用卡收取费用。如果酒店按 non-refundable post-pay 价格收费,则应说明酒店可能会在旅客完成预订后不久向其收费。
BP9:符合强客户认证 (SCA) 法规
监管机构和卡组织正在推出新的要求,以加强在线支付的安全性,保护消费者免受欺诈。这些法规中有很多都要求对在线支付使用强客户认证 (SCA)。
BP10:Expedia Group 是 MoR–付款处理地点,显示在 check-out 页面上。
如果 Expedia Group 是 MoR,则付款处理所在国家/地区必须在 check-out 页面上的显眼位置显示。短语_“这笔款项将在……”_必须插入在国家名称之前。
使用选购 API 的付款方式功能可以检索此信息。
用于付款方式的 API 请求示例:
https://api.ean.com/<payment-options link from previous availability request>
API 响应示例:
"credit_card": {
"name": "Credit Card",
"card_options": [
"name": "MasterCard",
"processing_country": "US"
"name": "Visa",
"processing_country": "US"用户界面示例:

确认邮件/兑换券
如果您将在移动 App 中提供托管兑换券,请继续遵循以下要求。
ER1:行程 ID 显示正确
CDS 仅限
如果您的集成能够提供我们的itinerary_id您必须在确认邮件中清晰地显示此号码,并直接告知旅客。
如果适用,您必须提供证据证明您的代理商在需要我们的客户支持时可以访问我们的原始行程 ID。
A2A
如果您的代理商需要我们的客户支持帮助,他们应该能够访问其原始行程单 ID。
ER2:客户支持信息应清晰显示,包括在线客户服务工具的链接。
在预订流程或确认邮件中清晰显示您的客户支持渠道,例如电话号码或实时聊天。如果我们的客服人员将为您的旅客提供直接支持,请在您的预订流程中显示我们的支持电话号码。
ER3:每间客房均有床型说明。
在确认邮件/兑换券中确认旅客请求的床型,并向旅客显示消息,指明选择同一客房中的多个床型仅为请求,如果房态不允许,酒店可能并不会满足这些请求。
显示配置数组中包含的值,以描述旅行者的床位选择。
ER4:显示 check-in 和特殊 check-in 指令
内容checkin,checkout,fees,和policies必须显示属性内容定义中返回的每个房间的对象。此信息必须显示在您的可用性页面上,以确保旅行者了解 check-in 的任何潜在费用或特殊访问说明。
特殊的 check-in 字段可能包含对 check-in 至关重要但未包含在其中的信息。checkin对象的说明字段,例如要求通知物业预计到达时间,check-in 在与客房不同的位置,或者提醒预期会通过电子邮件收到物业的特殊 check-in 说明。
确保在同一区域内向旅客显示 instructions 和 special_instructions。
ER5:展示费用需在价格明细中另行支付。
当收费在费用数组内返回时,将每个数值单独显示为住宿的应收费用(入住或退房)。这些费用由物业直接收取(不是我们或地方政府收取),不属于标准税收追缴费用。
技术和制裁要求
TR1:请在每次预订请求中提供唯一的联盟参考 ID
对于每个预订请求,您都必须使用affiliate_reference_id元素,其目的是:
- 您的个人跟踪。
- 防止提交的多个表单中存在重复预订/重复收费。
- 如果由于上游超时导致预订超时或返回空结果,则检查我们的系统中是否有行程单。
{
"affiliate_reference_id": "Launch_Requirement_TR1" ,
"hold": false,
"email": "TR4@Launch.Requirement",
"phone": {
"country_code": "Launch_Requirement_TR5b",
"number": "Launch_Requirement_TR5b",
"area_code": "Launch_Requirement_TR5b"
},
"rooms": [
{
"given_name": "John_Launch_Requirement_TR5a",
"family_name": "Doe_Launch_Requirement_TR5a,
"smoking": false,
},
{
"given_name": "David_Launch_Requirement_TR5a",
"family_name": "Smith_Launch_Requirement_TR5a",
"smoking": false,
}
],TR2:每次请求时请提供旅客国家/地区代码
- 旅客
country_code必须由选购的 API 请求和推荐的 API 请求提供。国家代码必须与旅客所使用的销售点代码一致。 - 这项要求确保我们的系统能够根据销售市场情况,为旅客提供相关的内容和最合适的价格。
API 请求示例:
https://api.ean.com/2.4/properties/availability?checkin=2020-09-11
&checkout=2020-09-14
¤cy=USD&language=en-US&occupancy=2-3,4&property_id=XXXX
&country_code=XX&sales_channel=XXXX
&sales_environment=XXXX&filter=XXXX&rate_plan_count=XXXX
&rate_option=XXXX&billing_terms=XXXX&payment_terms=XXXX
&partner_point_of_sale=XXXX&platform_name=XXXXTR3:账单信息
TR3a) 付款人姓名
适用于旅行者卡、企业卡和虚拟卡:
- 您必须提供被我们扣款的持卡人姓名。
对于联盟伙伴收款/EAC 合作伙伴:
- Expedia Group 强烈建议您尽可能提供预订的实际最终付款人的姓名。
- 出于监管/制裁筛查目的,必须提供此信息。
- 如果无法提供实际最终付款人的名称,请提供向我们付款的公司或法人实体的名称。
**笔记:**如果 POS 机位于俄罗斯、乌克兰或委内瑞拉,则始终需要真实的付款人信息。
TR3b) 账单国家/地区
- 必须显示账单联系人/付款人姓名字段中提供的个人姓名。
TR3c) 账单邮政编码
- 必须显示账单联系人/付款人姓名字段中提供的个人姓名。
**笔记:**对于没有邮政编码的国家,无需提供此信息。
"payments": [
{
"type": "customer_card",
"billing_contact": {
"given_name": "Launch_Requirement_TR3a",
"family_name": "Launch_Requirement_TR3a",
"address": {
"line_1": "555 1st St",
"line_2": "10th Floor",
"line_3": "Unit 12",
"city": "Seattle",
"state_province_code": "WA",
"postal_code": "Launch_Requirement_TR3c",
"country_code": "Launch_Requirement_TR3b"
}
},TR4:提供旅行者的电子邮件地址或受监控的电子邮件邮箱
每个行程的 email 元素必须包含旅客的邮箱地址或您的集成监视的邮箱,以便处理确认邮件。必须执行此操作,以免出现预订争议或用于故障排除。
TR5:提供准确的旅客信息
TR5a) 旅客姓名
预订时必须始终提交入住每间预订房间的实际旅客姓名。这意味着在您的预订请求正文中,房间对象中的 given_name和 family_name的值必须与每个房间办理入住的主要客人的名字和姓氏相匹配。
TR5b) 旅客电话号码
预订必须包含旅客的真实联系电话。在每个行程的预订请求的电话字段中包含此号码。如果您的代理商直接向旅客提供支持,Expedia Group 将不会联系旅客。
TR6:多客房预订。
如果支持多客房预订,则向测试预订提供 API 请求和响应日志,测试预订将显示已预订和已取消的每间客房。
已预订的每间客房都将创建一个单独的确认代码,可用于单独取消这些客房。如需取消所有客房,请针对行程内的每个确认代码完成取消调用。
Expedia Group 不通过我们的 API 或模板直接提供超过 8 间客房的团体预订。如果您需要预订超过 8 间客房,您的客户经理可以为您提供建议。
TR7:快速错误处理建议
请确认您已审阅我们的错误处理建议并实施了相应的逻辑来处理它们。