B2B 单独预订上线要求
如果您使用 business-to-business (B2B) 集成模型,其中旅行者与您的某个旅行社进行互动,则适用这些启动要求。
概述
B2B 启动要求分为两部分:
**B2B SA 要求:**这些是特定于此预订流程的。请仔细阅读这些要求,因为它们可能与您之前整合的任何其他房价类型/预订流程的要求不同。
**通用要求:**这些是所有预订流程的通用要求。请务必满足适用于所有流程的所有通用要求。
核对清单
您可以找到一份清单来帮助支持您的开发或提供有关要求的反馈。如果您打算提供截图用于网站审核,请在核对清单中添加截图和相应日志,这将帮助我们完成审核。
B2B SA 特定要求
一般要求
GR3:下游代理商必须同意我们的代理商条款和条件才能访问我们的库存。
代表旅行者进行预订的代理商必须同意我们的下游代理协议。应提供下游代理协议的链接,以供代理在预订前审查并接受。其他版本可在Expedia 合作伙伴解决方案上获取。
预订页面
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:显示我们的条款和条件的链接 URL
在您网站自己的条款和条件文本中提供指向我们条款和条件的链接,或直接从您的预订页面链接到条款。这些条款详细说明了管理预订的政策。将以下链接放置在 easy-to-find 位置,使用链接措辞“供应商条款和条件”。您可以找到英文版和其他版本在 Expedia 合作伙伴解决方案上。
示例:

GR4:我们的 Merchant 记录(MoR):正确使用和展示有关信用卡的规定
当您获取、使用、传输、存储或处理旅行者持卡人数据时,您必须遵守 PCI 安全标准委员会发布的支付卡行业数据安全标准。这些法规的完整参考资料可在官方PCI 安全标准委员会网站。
GR5:MoR 或财产收集在哪里:为适用合作伙伴提供的 PCI 合规性证据
无论我们是 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=XXXX
API 响应示例:
"occupancies": {
"2-9,4" : {
"nightly": [
[
**用户界面示例:**1 间客房,2 位成人和 2 名儿童(9 岁和 4 岁)。

住宿/房态
AP1:每个房间都有床型描述
购物回复可能会返回bed_groups
具有单个值或多个选项的数组。显示配置数组中包含的值来描述旅行者的床位选择。
当bed_groups
数组返回多个选项,显示price_check
购物响应为每种床型提供链接,以允许旅行者进行选择。
必须向旅客显示一条消息,指明选择同一客房中的多个床型仅为请求,如果房态不允许,酒店可能并不会满足这些请求。
房间名称在购物响应的房间数组中返回,如下所示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
Shopping 可用性响应中的 指示。当可用性响应中返回 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 标签。快速购物可用性 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:我们是 MoR 或 Property Collect:说明何时从最终旅行者处收取付款
如果我们是 MoR,请说明将立即从所提供的信用卡中扣除全额预订费用。
如为住宿收款,则说明住宿接待方将在入住或退房时向旅客提供的信用卡收取费用。如果酒店提供 non-refundable post-pay 价格,请注明旅客在完成预订后不久可能会被酒店收取费用。
BP9:遵守强客户身份验证 (SCA) 法规
监管机构和卡网络正在引入新的要求,以加强在线支付的安全性并保护消费者免受欺诈。许多法规都要求在线支付时使用强客户身份验证 (SCA)。
BP10:我们是 MoR–check-out 页面上显示的付款处理地点
我们是 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=XXXX
TR3:账单信息
TR3a) 付款人姓名
对于旅行者、公司和虚拟卡:
- 您必须发送我们正在向其卡收费的持卡人的姓名。
对于联盟伙伴收款/EAC 合作伙伴:
- 只要有可能,我们强烈建议您发送预订的实际最终付款人的姓名。
- 出于监管/制裁筛查目的,必须提供此信息。
- 如果无法提供实际最终付款人的姓名,请提供向我们付款的公司或法人实体的名称。
**笔记:**如果 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) 旅客电话号码
预订必须包含旅客的真实联系电话。在每个行程的预订请求的电话字段中包含此号码。如果您的代理商为您的旅行者提供直接支持,我们将不会联系旅行者。
TR6:多客房预订。
如果支持多客房预订,则向测试预订提供 API 请求和响应日志,测试预订将显示已预订和已取消的每间客房。
已预订的每间客房都将创建一个单独的确认代码,可用于单独取消这些客房。如需取消所有客房,请针对行程内的每个确认代码完成取消调用。
我们不通过我们的 API 或模板直接提供超过 8 间客房的团体预订。如果您需要预订 8 间以上的客房,您的客户经理可以为您提供建议。
TR7:快速错误处理建议
请确认您已查看我们的错误处理建议并实施了处理这些错误的逻辑。