產生簽名並建立請求 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:建立指向旅宿結果頁面的深度連結請求網址
請使用合作夥伴網域取代範例中的 Expedia 網域,建立指向旅宿結果頁面的深度連結請求網址。請依照此處的深度連結指南格式化搜尋參數和追蹤代碼。
深度連結請求網址:
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
編碼後的深度連結網址:
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
步驟 5:簽署請求/產生簽名
應使用從步驟 4 獲得的字串 (URL),並採用 HMAC-SHA1 演算法,搭配由 Expedia Group. 在大多數加密函式庫中,產生的簽名通常為二進位格式,因此可能需要將金鑰解碼回其原始的二進位格式。
RFC 2104 中定義了多種針對不同電腦語言與框架的此加密雜湊函數實作。以下清單是現有實作方案的一部分:
- Java
- JavaScript
- C#
- Python
- Ruby
步驟 6:對生成的二進位簽名進行編碼
使用針對 URL 修改過的 Base64 對二進位簽名進行編碼,該方法會將 Base64 輸出中的+ 和/ 字元,分別替換為-(連字號)和_(底線),使 URL 變為保險箱 (更多資訊請參閱 RFC 4648)。它應該看起來 像這樣:
bj01fgT85mUiRmzxxSufSmlGpiI
此外,需特別注意的是,應從 base64 編碼字串中移除填充字元=(如有)。
步驟 7:建立最終的請求 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 步:將最終網址嵌入航空公司的 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 中的搜尋條件,重新導向至旅宿結果頁面。
注意: Expedia 解決方案僅支援生產環境。希望在「pre-production」中進行測試的合作夥伴,需將其 pre-production 指向 Expedia 的正式環境。