產生簽名並建立請求 URL
生成簽名及建構請求 URL 的檢查清單:
| 項目 | 來源 | 備註 |
|---|---|---|
| 私鑰 | 由以下人士分享:Expedia Group. | 密鑰是一串由 36 個字元組成的英數字符串,用於產生簽名。它與……有關partnerId。範例: 6f437404-261d-4beb-a7fc-43b92f694831.注意: 請將密鑰存放在安全的地方,並僅在 server-side 上使用它來產生簽名。在建構 URL 時,不應將其作為參數傳入。 |
| 網域 | 合作夥伴網域 | 您網站的網域名稱。 |
| 端點 | /xsell-redirect-pwa? | 請注意,我們的端點為 case-sensitive,,因此所有參數名稱都必須與本文件中顯示的拼寫完全一致。 |
Step-by-step 指南
步驟 1:建立指向旅宿結果頁面的深度連結請求網址
請參照範例,將 Expedia 網域替換為合作夥伴網域,以建立指向旅宿結果 頁面的深度連結請求網址。請依照深度連結指南的說明,格式化搜尋參數與追蹤碼。
請求 URL 參數
| 參數 | 類型 | 必填 | 說明 | 樣本值 |
|---|---|---|---|---|
partnerId | 字串 | Y | 由……提供 Expedia Group. | partnername-POS-Ext-Flight-Conf-EmailDL |
url | 字串 | Y | 請依照深度連結指南,使用合作夥伴網域、搜尋參數及追蹤代碼,建立飯店結果頁面的深度連結請求網址。請確保已加入追蹤代碼 (mdpcid),且輸出參數的值已正確設定為 URL-encoded.>> 閱讀深度連結指南 | url = https%3A%2F%2Fexpedia.com%2Fgo%2Fhotel%2Fsearch%2FDestination%2F2025-12-22%2F2025-12-25%3FMDPCID%3DExpedia-IE.DPS.en_IE.confemail.attachDL.Flight%26CityName%3DORD%26SortBy%3Ddistance%26NumRoom%3D1%26NumAdult-Room1%3D3%26NumChild-Room1%3D2%26Room1-Child1Age%3D9%26Room1-Child2Age%3D6 |
outboundEndDateTime | 符合 ISO 8601 標準的日期字串表示形式。 | Y | 請指定旅程抵達目的地的日期和時間。它應僅包含符合 ISO 8601 標準的日期、時間及時區。 此參數值需要進行編碼。 | 2025-10-30T20%3A12%3A17.928020Z |
originTla | 字串 (3 個字母) | Y | 請指定旅程起點的 IATA 機場代碼。 | LAS |
returnStartDateTime | 符合 ISO 8601 標準的日期字串表示法。 | 僅適用於往返行程 | 請指定從目的地出發的旅程返程日期與時間。根據 ISO 8601 標準,其中僅可包含日期、時間及時區。 此參數值需要進行編碼。 | 2025-11-10T20%3A12%3A17.928020Z |
destinationTla | 字串 (3 個字母) | Y | 請指定行程目的地的 IATA 機場代碼。 | JFK |
bookingDateTime | 符合 ISO 8601 標準的日期字串表示法。 | Y | 請指定已預訂的日期與時間。根據 ISO 8601 標準,其中僅可包含日期、時間及時區。 此參數值需要進行編碼。 | 2025-07-25T20%3A12%3A17.928020Z |
bookingStatus | 字串 | 若未提供相關資訊,我們將視為該預訂已確認。 | 此參數的有效值為:confirmed、pending 或failed注意: 折扣費率僅在 bookingStatus 為confirmed 時適用。 | confirmed |
attachDL | 布林 | Y | 將此值設為 true,即可啟用折扣附加費率。 | true |
signature | 字串 | Y | 由合作夥伴根據所提供的秘密金鑰生成的 server-side Expedia Group. 這串字串的長度正好是 27 個字元。對生成的二進位簽名進行編碼。 | BcND1F7KElTyGtyUHeXHd2JJLFs |
注意: 的請求參數會區分大小寫。若大小寫不正確,將會導致錯誤。
深度連結請求網址:
https://expedia.com/go/hotel/search/Destination/2025-12-22/2025-12-25?MDPCID=Expedia-IE.DPS.en_IE.confemail.attachDL.Flight&CityName=ORD&SortBy=distance&NumRoom=1&NumAdult-Room1=3&NumChild-Room1=2&Room1-Child1Age=9&Room1-Child2Age=6
步驟 2:使用 # 對深度連結網址進行編碼 UTF-8
已編碼的深度連結網址:
https%3A%2F%2Fexpedia.com%2Fgo%2Fhotel%2Fsearch%2FDestination%2F2025-12-22%2F2025-12-25%3FMDPCID%3DExpedia-IE.DPS.en_IE.confemail.attachDL.Flight%26CityName%3DORD%26SortBy%3Ddistance%26NumRoom%3D1%26NumAdult-Room1%3D3%26NumChild-Room1%3D2%26Room1-Child1Age%3D9%26Room1-Child2Age%3D6
步驟 3:附加所有必要的參數以啟用附加率
outboundEndDateTime(已編碼) +originTLA +returnStartDateTime (已編碼) +destinationTLA +bookingDateTime (已編碼) +partnerid +attachDL
步驟 4:建立用於簽名生成的 URL (請勿包含網域)
endpoint+ 編碼後的深度連結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」替換為您的品牌名稱
步驟 5:簽署請求/產生簽名
應使用 HMAC-SHA1 演算法,並採用由...共享的密鑰/私鑰,對步驟 4 中取得的字串 (URL) 進行簽名。Expedia Group. 在大多數加密函式庫中,產生的簽名會以二進位格式呈現,因此可能需要將金鑰解碼回其原始的二進位格式。
RFC 2104 中定義了此加密雜湊函數的許多實作,適用於多種程式語言與框架。以下清單是現有實作方案中的一部分:
- Java
- JavaScript
- C#
- Python
- Ruby
步驟 6:對生成的二進位簽名進行編碼
使用修改過的 Base64URL 對二進位簽名進行編碼,該方法會將 Base64URL 輸出中的+ 和/ 字元,分別替換為-(連字號)和_(底線),從而產生 URL 保險箱 (更多資訊請參閱 RFC 4648)。簽名應精確為 27 個字元。
範例
bj01fgT85mUiRmzxxSufSmlGpiI
9Wzh3Er5-ob35Hbxbk1ltyYHex4
FeW_4NNu4ITpGaSt1KZl-vLb9PI此外,必須注意的是,應從 Base64URL 編碼字串中移除填充字元=(如有)。
步驟 7:建立最終的請求 URL
請使用以下元素來建構最終的深度連結網址:
domain+endpoint + 編碼後的深度連結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 路徑中
清單
在將連結嵌入「post-booking」路徑 (例如電子郵件) 之前,請檢查以下項目。
簽名
- 以 Base64URL 格式呈現 (非十六進位制)。
- 轉換為 Base64URL 編碼時,會將其視為整數 (而非字串):如有必要,請將
+替換為-,並將/替換為_。例如:m6y13j0747-x_h81wEzR9jE1fco=。 - 從 Base64URL 編碼字串中移除填充字元「
=」(如有) 。 - 字數正好是 27 個。
- 私密金鑰在客戶端不會公開顯示。
參數
- 數值為 percent-encoded UTF-8
>> 閱讀關於 UTF-8 百分比編碼的內容中搜尋。 - 所有必要的參數均已傳遞。
網域與終點
- 正確的數值應為
/xsell-redirect-pwa。 - 最終請求 URL 應由以下部分組合而成:
domain+endpoint+ 經編碼的深層連結url+outboundEndDateTime(經編碼)+originTLA+returnStartDateTime(經編碼)+destinationTLA+bookingDateTime(經編碼)+partnerid+attachDL+signature
測試
在進行測試/生產環境部署之前,請先驗證附加模組。該請求應根據編碼的深度連結 URL 中的搜尋條件,將使用者導向旅宿結果頁面。
注意: Expedia 解決方案僅支援生產環境。若您想在 pre-production, 進行測試,您需要將 pre-production 網域指向 Expedia 的正式環境。