构建请求 URL
请求 URL(将从附加模块返回结果的 URL)由域、端点、请求参数和签名参数组成。此示例显示,已确认 2022 年 11 月 12 日预订的飞往洛杉矶国际机场的航班,可供 2 名成人乘坐,出发日期为 2023 年 1 月 2 日,返回日期为 2023 年 1 月 12 日。
//xsell.expedia.com/xsell-pwa.js?partnerId=partner123&outboundEndDateTime=2023-01-02T12%3A55%3A00%2B08%3A00&returnStartDateTime=2023-01-12T22%3A30%3A00%2B08%3A00&destinationTla=LAX&numOfAdults=2&locale=en_US¤cyCode=USD&bookingDateTime=2022-11-12T12%3A32%3A15%2B08%3A00&bookingStatus=confirmed&signature=bj01fgT85mUiRmzxxSufSmlGpiI
构造请求参数
一般来说,请求参数包括有关预订的详细信息,例如目的地以及行程开始和结束日期。此信息用于为附加模块生成建议。有些参数在请求中是可选的,但有些参数是返回结果所必需的。
可用的请求参数
参数 | 说明 | 示例值 | 必填 |
---|---|---|---|
partnerId | Expedia 提供的字符串值,用于在请求参数中识别您的组织 | partnername_hotel_conf_overlay | 是 |
bookingStatus | 指定预订状态的字符串值,决定是否可以应用附加费率;如果预订状态为待定或失败,则不会应用附加费率 | 已确认 | 是 |
bookingDateTime | 指定预订日期的字符串值;包括 ISO 8601 格式的日期、时间和时区 | 2024-08-29T05:54:02 编码值: 2024-08-29T05%3A54%3A02 | 是 |
outboundEndDateTime | 指定到达目的地的字符串值;包括 ISO 8601 格式的日期、时间和时区 | 2024-08-29T05:54:02 编码值: 2024-08-29T05%3A54%3A02 | 是 |
returnStartDateTime | 指定从目的地出发的字符串值;包括 ISO 8601 格式的日期、时间和时区 注意:如果未指定,则默认行程时长为 7 天 | 2024-08-29T05:54:02 编码值: 2024-08-29T05%3A54%3A02 | — |
locale | Expedia 提供的 5 个字符的字符串,表示预订所使用的语言。请在此查看完整的语言环境详情。 | en_US | 是 |
currencyCode | Expedia 提供的字符串,表示预订时使用的货币 | USD | 是 |
destinationTla | 表示目的地国际航空运输协会 (IATA) 机场代码的 3 个字符的字符串 注意:请求 URL 必须包含此参数(对于包含航班的预订)或 latitude 和 longitude (如果不包含航班) | LAX | 有条件要求 |
latitude 和 longitude | 指定旅行目的地坐标的最多 12 位小数的浮点值 注意:请求 URL 必须包含此参数(如果不包含航班)或 destinationTla (对于包含航班的预订) | 纬度=40.7141667 &经度=-74.0063889 | 有条件要求 |
signature | 您将根据我们提供的密钥生成由 27 个字符组成的字母数字字符串值 请参阅构建请求 URL 了解更多信息 | BcND1F7KElTyGtyUHeXHd2JJLFs | 是 |
numOfAdults | 整数,指定预订中的成人人数;最小值为 1 | 2 | — |
numOfChildren | 指定预订儿童人数的整数 | 3 | — |
childAges | Comma-delimited 整数数组,指定预订中任何儿童的年龄;仅当传递 numOfChildren 时才需要 | 5,4,2 | 是的,如果传递了numOfChildren |
我们提供了一些场景来帮助您了解简单和更复杂的行程的价值。
构建请求 URL
所有请求 URL 都将包含域和端点,后跟请求参数,并以使用密钥生成的签名结尾。
密钥
密钥是一个字母数字字符串,由 Expedia 安全共享,用于生成验证交易的签名。它的长度为 36 个字符,并且与 partnerId 相关联。
域、端点和请求参数
您的请求 URL 以域名开头。我们建议您保留请求 URL protocol-agnostic 的 Expedia 域://xsell.expedia.com/
。URL 的下一部分是请求字符串,由 case-sensitive 端点组成/xsell-pwa.js?
以及请求参数。记住请求参数应该是 UTF-8 percent-encoded.
步骤 1:构造请求字符串
请求字符串包括端点和请求参数(但不包含域)。它看起来应该是这样的。
/xsell-pwa.js?partnerId=partner123&outboundEndDateTime=2023-01-02T12%3A55%3A00%2B08%3A00&returnStartDateTime=2023-01-12T22%3A30%3A00%2B08%3A00&destinationTla=LAX&numOfAdults=2&locale=en_US¤cyCode=USD&bookingDateTime=2022-11-12T12%3A32%3A15%2B08%3A00&bookingStatus=confirmed
第 2 步:签署请求
从步骤 1 获得的字符串(包括前导/
)应签署hash-based 消息认证算法(HMAC-SHA1)使用 Expedia 共享的密钥。在大多数加密库中,生成的签名都是二进制格式。
这个加密哈希函数有很多实现,定义在RFC 2104用于计算机语言和框架。可用的实现包括:
步骤 3:对生成的签名进行编码
使用修改后的Base64对于 URL,它取代了+
和/
Base64 输出的字符-
(连字符)和_
(下划线)分别使其 URL 安全(参见RFC 4648了解更多信息)。它看起来应该类似于这个:
bj01fgT85mUiRmzxxSufSmlGpiI
还要注意的是,填充=
(如果有)应该从 Base64 编码字符串中删除。
步骤 4:构建最终请求 URL
将步骤 3 中的签名作为 signature
参数附加到步骤 1 中的字符串。签名应该始终是最终请求 URL 的最后一个参数。
//xsell.expedia.com/xsell-pwa.js?partnerId=partner123&outboundEndDateTime=2023-01-02T12%3A55%3A00%2B08%3A00&returnStartDateTime=2023-01-12T22%3A30%3A00%2B08%3A00&destinationTla=LAX&numOfAdults=2&locale=en_US¤cyCode=USD&bookingDateTime=2022-11-12T12%3A32%3A15%2B08%3A00&bookingStatus=confirmed&signature=bj01fgT85mUiRmzxxSufSmlGpiI
将协议(//
或 http://
或 https://
)和域(我们建议将 //xsell.expedia.com
用于 protocol-agnostic URL)添加到结果字符串的前面。
//xsell.expedia.com/xsell-pwa.js?partnerId=partner123&outboundStartDateTime=2024-10-22T11%3A55%3A00%2B08%3A00&outboundEndDateTime=2024-10-22T13%3A55%3A00%2B08%3A00&returnStartDateTime=2024-10-30T20%3A30%3A00%2B08%3A00&returnEndDateTime=2024-10-30T22%3A30%3A00%2B08%3A00&destinationTla=LAX&numOfAdults=2&locale=en_US¤cyCode=USD&bookingDateTime=2024-04-12T12%3A32%3A15%2B08%3A00&bookingId=123ABC&bookingStatus=confirmed&signature=bj01fgT85mUiRmzxxSufSmlGpiI
步骤 5:添加 JavaScript 代码
您将使用最终请求 URL 作为模块应出现的页面上的 JavaScript src
属性。例如:
<<script src="//xsell.expedia.com/xsell-pwa.js?partnerId=partner123&outboundEndDateTime=2023-01-02T12%3A55%3A00%2B08%3A00&returnStartDateTime=2023-01-12T22%3A30%3A00%2B08%3A00&destinationTla=LAX&numOfAdults=2&locale=en_US¤cyCode=USD&bookingDateTime=2022-11-12T12%3A32%3A15%2B08%3A00&bookingStatus=confirmed&signature=bj01fgT85mUiRmzxxSufSmlGpiI"></script>>
创建请求 URL 后,您就可以将其集成到页面代码中。