產生簽名並建立請求 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 (請勿包含網域)
終點 + 編碼後的深度連結網址 +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:簽署請求/產生簽名
應使用 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:
- 該請求將根 據編碼的深度連結 URL 中的搜尋條件,重新導向至旅宿結果頁面。
註: Expedia 解決方案僅支援生產環境。希望在「pre-production」中進行測試的合作夥伴,需將其 pre-production 指向 Expedia 的正式環境。