Developer Hub
This is an auto-generated translation

生成签名并构建请求 URL

生成签名和构建请求 URL 的检查清单:

条目备注
秘密/私钥由 Expedia Group 分享。密钥是一个字母数字字符串,由 Expedia Group 安全共享,用于生成签名。它将是一个长度为 36 个字符的字符串,并且与 PartnerId.

例如6f437404-261d-4beb-a7fc-43b92f694831

注意 它应该保存在安全的地方,并且只能在 server-side 上用于生成签名。密钥不应作为参数在 URL 构造过程中传递。
领域合作伙伴领域
端点/xsell-redirect-pwa?另请注意,我们的端点是 case-sensitive,因此所有参数名称必须与本文档中所示的完全一致。

Step-by-step 指南

步骤 1:构建指向房源结果页面的深度链接请求 URL

使用合作伙伴域名代替示例中的 Expedia 域名,构建指向房产结果页面的深度链接请求 URL。根据深度链接指南此处格式化搜索参数和跟踪代码

深度链接请求 URL:

https://expedia.com/go/hotel/search/Destination/2025-12-22/2025-12-25?mdpcid=Expedia-IE.DPS.Expedia.ExtFlightEmail-Xsell_CTA.Hotel&CityName=ORD&SortBy=distance&NumRoom=1&NumAdult1=3&NumChild1=2&Rm1child1age=9&Rm1child2age=6

步骤 2:使用 UTF-8 对深度链接 URL 进行编码

编码后的深度链接 URL:

https%3A%2F%2Fexpedia.com%2Fgo%2Fhotel%2Fsearch%2FDestination%2F2025-12-22%2F2025-12-25%3Fmdpcid%3DExpedia-IE.DPS.Expedia.ExtFlightEmail-Xsell_CTA.Hotel%26CityName%3DORD%26SortBy%3Ddistance%26NumRoom%3D1%26NumAdult1%3D3%26NumChild1%3D2%26Rm1child1age%3D9%26Rm1child2age%3D6

步骤 3:添加所有必需参数以启用附加速率

outboundEndDateTime(已编码)+ originTLA + returnStartDateTime(已编码)+ destinationTLA + bookingDateTime(已编码)+ PartnerId +attachDL

步骤 4:构建用于生成签名的 URL(不要包含域名)

端点 + 编码后的深度链接 URL + outboundEndDateTime(已编码)+ originTLA + returnStartDateTime(已编码)+ destinationTLA + bookingDateTime(已编码)+ PartnerId +attachDL

示例

/xsell-redirect-pwa?url=https%3A%2F%2Fexpedia.com%2Fgo%2Fhotel%2Fsearch%2FDestination%2F2025-12-22%2F2025-12-25%3Fmdpcid%3DExpedia-IE.DPS.Expedia.ExtFlightEmail-Xsell_CTA.Hotel%26CityName%3DORD%26SortBy%3Ddistance%26NumRoom%3D1%26NumAdult1%3D3%26NumChild1%3D2%26Rm1child1age%3D9%26Rm1child2age%3D6&outboundEndDateTime=2025-10-30T20%3A12%3A17.928020Z&destinationTLA=LAS&returnStartDateTime=2025-11-10T20%3A12%3A17.928020Z&originTLA=JFK&bookingDateTime=2025-07-25T20%3A12%3A17.928020Z&attachDL=true&PartnerId=new-pwa-xsell-testing-airnz

步骤五:签署请求/生成签名

应使用 Expedia Group 共享的秘密/私钥,通过 HMAC-SHA1 算法对从步骤 4 获得的字符串(URL)进行签名。在大多数加密库中,生成的签名将采用二进制格式,因此可能需要将密钥解码为其原始二进制格式。

RFC 2104 中定义了这种加密哈希函数,并针对多种计算机语言和框架进行了多种实现。以下列表仅列出部分可用实现:

  • Java
  • Javascript
  • C#
  • Python
  • Ruby

步骤 6:对生成的二进制签名进行编码

使用修改后的 Base64 对 URL 的二进制签名进行编码,将 Base64 输出中的 +/字符分别替换为 -(连字符)和 _(下划线),以使 URL 安全(有关更多信息,请参阅 RFC 4648)。它应该看起来像这样:

bj01fgT85mUiRmzxxSufSmlGpiI

此外,需要注意的是,应从 base64 编码字符串中删除填充 =(如果有)。

步骤 7:构建最终请求 URL

按如下所示构建最终的深度链接 URL:

域名 + 端点 + 编码后的深度链接 URL + outboundEndDateTime(已编码)+ originTLA + returnStartDateTime(已编码)+ destinationTLA + bookingDateTime(已编码)+ PartnerId + attachDL +signature

示例:

https://www.expedia.com/xsell-redirect-pwa?url=https%3A%2F%2Fexpedia.com%2Fgo%2Fhotel%2Fsearch%2FDestination%2F2025-12-22%2F2025-12-25%3Fmdpcid%3DExpedia-IE.DPS.Expedia.ExtFlightEmail-Xsell_CTA.Hotel%26CityName%3DORD%26SortBy%3Ddistance%26NumRoom%3D1%26NumAdult1%3D3%26NumChild1%3D2%26Rm1child1age%3D9%26Rm1child2age%3D6&outboundEndDateTime=2025-10-30T20%3A12%3A17.928020Z&destinationTLA=LAS&returnStartDateTime=2025-11-10T20%3A12%3A17.928020Z&originTLA=JFK&bookingDateTime=2025-07-25T20%3A12%3A17.928020Z&attachDL=true&PartnerId=new-pwa-xsell-testing-airnz&signature=3WQjtTHsSCRxrogs3xhY7edWfgE

步骤 8:将最终 URL 嵌入到航空公司 post-booking 路径(e.g.电子邮件)中

核对清单

请确保以下事项:

  • 签名
    • 签名格式正确(Base64),而非十六进制。
    • 签名在转换为 Base64 编码时被视为整数(而不是字符串)。
      • 如有必要,请将签名中的 +替换为 -(Base64 编码应该会自动执行此操作):m6y13j0747-x/h81wEzR9jE1fco=
      • 如有必要,请将签名中的 /替换为 _(Base64 编码应该会自动执行此操作):m6y13j0747-x_h81wEzR9jE1fco=
    • 从 Base64 编码字符串中移除填充 =(如果有)。
    • 签名长度正好是 27 个字符。
    • 客户端不会公开显示密钥;密钥只能在服务器端用于生成签名。
  • 参数
    • 所有参数值均为 percent-encoded UTF-8
    • 所有必需参数均已传递。
  • 域和端点
    • 端点正确 /xsell-redirect-pwa
  • 最终请求 URL 应为域名 + 端点 + 编码后的深度链接的组合:URL + outboundEndDateTime(编码后)+ originTLA + returnStartDateTime(编码后)+ destinationTLA + bookingDateTime(编码后)+ PartnerId + attachDL +signature

测试

在测试/生产部署之前,请确认模块已正确附加。

验证最终请求 URL:

  • 该请求将根据编码后的深度链接 URL 中的搜索条件重定向到房源结果页面。

注意:Expedia 解决方案仅支持生产环境 希望在 pre-production 中进行测试的合作伙伴需要将其 pre-production 指向 Expedia 的生产环境。

您觉得这个页面有用吗?
我们该如何改进这些内容?
感谢您帮助我们改进!