构建请求 URL
请求 URL(即从附加模块返回结果的 URL)由域、端点、请求参数和签名参数组成。此示例显示了 2 位成人于 2023 年 1 月 2 日从洛杉矶国际机场 (LAX) 出发,于 2023 年 1 月 12 日返回的已确认航班,该航班于 2022 年 11 月 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 个字符字符串 (IATA) 注意:请求 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 以域名开头。我们建议您将 Expedia 域名保留用于请求 URL protocol-agnostic://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
步骤二:签署请求
从步骤 1 获得的字符串(包括前导字符串)/) 应该用 a 签名hash-based 消息认证算法使用 Expedia 共享的密钥进行 (HMAC-SHA1)。在大多数加密库中,生成的签名将采用二进制格式。
这种加密哈希函数有许多实现方式,定义在…… 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://)和域名(我们建议 protocol-agnostic URL 使用 //xsell.expedia.com)。
//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 后,就可以将其集成到页面代码中了。