帳戶資訊 API
「帳戶資訊 API」包含每位客戶的詳細資料。您的範本網站會在單一登入 (SSO) 通訊協定中使用這些資訊,以驗證使用者帳戶。消費、會員計畫兌換等都會用到這個 API。
Expedia 客服專員也可以在要求取得使用者帳戶詳細資料時,使用這個 API 驗證旅客的唯一識別碼,像是信用卡號碼。在繼續為旅客處理訂單和預訂之前,客服專員會先以收到的詳細資料驗證通話的旅客身分。
如需其他資訊,請參閱通用資料和回應頁面。
信用卡加密與解密
Expedia 採用業界標準的 JWE (JSON Web 加密) 技術來加密及解密信用卡的詳細資料,也就是使用公開和私密金鑰組的非對稱式加密。
加密使用案例
下列項目應進行加密:
- 要求:cardNumber
- 回應:cardDetails
在要求參數中,您應設定一個 2048 位元的 CA (憑證授權中心) 簽署 RSA (Rivest Shamir Adleman) 私密金鑰憑證,並將其提供給 Expedia。接著,我們會透過 JWE 和 RSA,使用您的公開金鑰來加密 cardNumber 欄位。
在回應參數中,我們會設定一個 2048 位元的 CA 簽署 RSA 私密金鑰,並將對應的公開金鑰憑證提供給您。接著您便可透過 JWE 和 RSA,使用 Expedia 公開金鑰加密 cardDetails 的各項元素。
以下詳列加密流程的步驟。
加密逐步指引
**步驟 1:**擷取公開憑證,並取得 RSA 2048 公開金鑰。
- 產生隨機對稱金鑰 (RSK),長度為 256 位元。
- 透過演算法 RSA-OAEP-256,使用 RSA 2048 公開金鑰加密 RSK。
**步驟 2:**產生隨機的初始向量 (IV),長度為 96 位元。
**步驟 3:**使用 RSK、IV 和演算法 A256GCM 加密純文字資料,以形成加密文字及驗證標記資料。
**步驟 4:**以 Base64URL 對加密文字進行編碼,以產生 Base64URL (JWE 加密文字)。
**步驟 5:**以 Base64URL 對驗證標記、IV、RSK 及 JWE 標頭 JSON 進行編碼,以產生下列項目:
- 驗證標記資料:Base64URL (JWE 驗證標記)。
- IV:Base64URL (JWE 初始向量)
- RSK:Base64URL (JWE 加密後的金鑰)
- JWE 標頭 JSON:Base64URL (UTF8 (JWE 標頭))
接著將 JWE 物件序列化為精簡格式,其中包含的 Base64URL 編碼部分以句號 ('.') 分隔,藉此產生:
Base64URL (UTF8) (JWE 標頭) || '.' || Base64URL (JWE 加密後的金鑰) || '.' || Base64URL (JWE 初始向量) || '.' || Base64URL (JWE 加密文字) || '.' || Base64URL (JWE 驗證標記)
解密要求中的卡號
Expedia 會加密要求中的 cardNumber。解密路徑則與加密路徑相反:
- 收到加密的 JWE 時,您應對 JWE 的第一個部分和 JOSE 標頭進行解碼,以判斷演算法、加密方式及 keyId (alg、enc、kid)。
- 接著請驗證 iat (issued-at:JWT 的簽發時間),確保其距目前時間未超過 5 分鐘。(標記 5 分鐘後就會過期。)
- 接下來,請擷取私密金鑰,並對 JWE 加密金鑰進行解密。
- 接下來,您可以使用解密的 RSK、JWE 初始向量及 JWE 驗證標記,對 JWE 加密文字參數進行解密並加以驗證。
取得帳戶資訊
您將使用 POST /user/v1/account,透過這組欄位擷取會員或持卡人的帳戶資訊。
標頭
| 欄位 | 詳情 | 範例值 | 欄位類型 | 是否為必要? |
|---|---|---|---|---|
partnerId | Expedia 提供的企業唯一識別碼 | 您的品牌 | 字串,最多 20 個字元 | 是 |
Authorization | Expedia 從您授權伺服器收到的存取標記,將由您的團隊進行驗證 | 標準 JSON Web 標記 (JWT) | 字串,標準 JWT 長度 | — |
Authorization2 | 由 Expedia 傳送的 JSON Web 標記 (JWT);要在您這一端驗證的簽章和宣告 | 標準 JWT | 字串,標準 JWT 長度 | — |
要求
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
requestId | 交易要求的唯一識別碼 | 字串 | 是 |
membershipId | 旅客唯一識別碼 | 字串 | — |
loyaltyAccountNumber | 旅客的會員帳號 (也稱為 programAccountNumber);只有在會員計畫作業需要 membershipId 以外的識別碼時,才應填入 | 字串 | — |
programId | 旅客所屬會員計畫的識別碼,或與會員計畫相關聯的等級名稱 | 字串 | — |
cardNumber | 旅客的信用卡號碼 (經過加密) | 字串 | — |
email | 旅客電子郵件地址 | 字串 | — |
回應
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
status | 交易狀態 (值:核准、拒絕) | 字串 | 是 |
requestId | 交易要求 (來自要求有效負載) 的唯一識別碼 | 字串 | 是 |
ProgramAccount | 計畫帳戶詳細資料;請參閱 ProgramAccount 資料表了解嵌入欄位 | ||
languageId | 本網站支援的語言;詳情請參閱的「語言環境」詳細資訊頁面 | 字串 | — |
channelType |