帳戶資訊 API
透過旅客的帳戶資料,驗證使用您網站的旅客身分
「帳戶資訊 API」包含每位旅客的詳細資料。Expedia 的客服人員將藉此驗證旅客的唯一識別碼,以處理購買、會員點數兌換、取消預訂等相關事宜。此唯一識別碼可以是信用卡號碼 (即支付卡產業(PCI) 識別碼),或是 non-PCI 識別碼 (例如電子郵件地址或忠誠度帳戶號碼),具體取決於您的需求或安全標準。
請參閱以及「常見資料與回應」 以獲取更多資訊。
取得帳戶資訊
您將使用 POST /user/v1/account,透過這組欄位擷取會員或持卡人的帳戶資訊。
標頭
| 欄位 | 詳情 | 範例值 | 欄位類型 | 是否為必要? |
|---|---|---|---|---|
partnerId | Expedia 提供的企業唯一識別碼 | 您的品牌 | 字串,最多 20 個字元 | 是 |
Authorization | Expedia 從您授權伺服器收到的存取標記,將由您的團隊進行驗證 | 標準 JSON Web 標記 (JWT) | 字串,標準 JWT 長度 | — |
Authorization2 | 由 Expedia 傳送的 JSON Web 標記 (JWT);要在您這一端驗證的簽章和宣告 | 標準 JWT | 字串,標準 JWT 長度 | — |
要求
您必須將membershipId、loyaltyAccountNumber、cardNumber 或email 其中之一設定為必填參數。您的客戶經理將與您共同商討,根據您的需求,確定哪種方案最適合您。
注意: 若您使用cardNumber 作為識別碼,還需參閱下方的cardDetails 及billingAddress 資料表。沒有其他參數需要此資料。
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
requestId | 交易要求的唯一識別碼 | 字串 | 是 |
membershipId | 旅客專屬識別碼 | 字串 | 是的,選項 1 |
loyaltyAccountNumber | 旅客的忠誠度帳戶號碼 (亦稱為programAccountNumber);僅當忠誠度相關操作需要使用membershipId 以外的識別碼時,才應填入此欄位 | 字串 | 是的,選項 2 |
programId | 旅客所屬的忠誠度計畫識別碼,或與該忠誠度計畫相關的會員等級名稱 | 字串 | — |
cardNumber | 旅客信用卡號碼 (已加密) | 字串 | 是的,選項 3 |
email | 旅客電子郵件地址 | 字串 | 是的,選項 4 |
回應
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
status | 交易狀態 (值:核准、拒絕) | 字串 | 是 |
requestId | 交易要求 (來自要求有效負載) 的唯一識別碼 | 字串 | 是 |
programAccount | 忠誠度計畫帳戶詳細資訊;關於嵌套欄位,請參閱programAccount 中的表格 | — | |
languageId | 本網站可瀏覽的語言;詳情請參閱的「語言環境」詳細資訊頁面 | 字串 | — |
optInForMarketingEmail | 使用者是否已選擇接收行銷電子郵件 | 布林值 | — |
channelType | 網站最佳化的目標平台 (值:WEB、MOBILE、TABLET) | 字串 | — |
users | 使用者詳細資料清單;關於嵌套欄位,請參閱users 表格 | — | |
cardDetails | 有關該筆交易中所使用信用卡的詳細資訊;請參閱cardDetails 表格以了解嵌套欄位 (若已填入資料,部分嵌套項目必須進行加密) | — |
programAccount
| 欄位 | 詳情 | 範例值 | 是否為必要? |
|---|---|---|---|
programId | 旅客所屬的忠誠度計畫識別碼,或與該忠誠度計畫相關的會員等級名稱 | Aventura Gold | 是 |
accountName | 計畫名稱 (如與 programId 不同) | Aventura | — |
loyaltyAccountNumber | 旅客的忠誠度帳戶號碼 (亦稱為programAccountNumber);僅當忠誠度相關操作需要使用membershipId 以外的識別碼時,才應填入此欄位 | 1234567 | — |
lastFourDigitsOfCreditCard | 旅客用於預訂的信用卡後四位數字 | 0000 | — |
loyaltyConversionRatio | 付款轉換為賺取點數的比率 (例如 $1 = 1 點) | — | |
loyaltyAccountBalance | 旅客目前累積的忠誠度點數餘額 | 2003 | 是 |
cardDetails
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
cardNumber | 旅客信用卡號碼 (已加密) | 字串 | 是 |
cardType | 使用的卡片類型 (加密) | 字串 | 是 |
expirationDate | 卡片有效期限,格式為 MM/YYYY (已加密) | 字串 | 是 |
billingAddress | 該筆交易所使用之卡片之帳單地址;關於嵌套欄位,請參閱billingAddress 表格 | — |
billingAddress
| 欄位 | 詳情 | 欄位類型 | 是否為必要? |
|---|---|---|---|
firstAddressLine | 帳單地址的第一行 (已加密) | 字串 | 是 |
secondAddressLine | 帳單地址的第二行 | 字串 | — |
thirdAddressLine | 帳單地址的第三行 | 字串 | — |
city | 帳單地址中的城市欄位 | 字串 | — |
province | 帳單地址中的省或州資訊 | 字串 | — |
countryCode | 帳單地址的國家/地區欄位 | 字串 | — |
postalCode | 帳單地址的郵遞區號欄位 (已加密) | 字串 | 是 |
使用者
| 欄位 | 詳情 | 範例值 | 是否為必要? |
|---|---|---|---|
userId | 旅客的唯一識別碼;與 membershipId | 是 | |
name | 旅客的姓名、中間名及姓氏 | — | — |
firstName | 旅客的名字;位於以下項目之下 name | Bob | 是 |
middleName | Traveler 的中間名;位於以下項目之下 name | Robert | — |
lastName | 旅客的姓氏;位於以下項目之下 name | Jones | 是 |
contactInfo | 旅客的聯絡資訊,包括地址、電子郵件及電話號碼 | — | — |
address | 旅客地址,包括街道地址、城市、州或省,以及郵遞區號;位於以下項目之下: contactInfo | — | — |
streetAddress | 旅客的街道地址;位於以下項目之下 address | 123 Main St. | — |
city | 旅客的街道地址所在城市;位於以下項目之下 address | 波士頓 | — |
state | 旅客街道地址的狀態;位於以下項目之下 address | MA | — |
country | 旅客街道地址所在國家;位於以下項目之下 address | 美國 | — |
postalCode | 旅客住址的郵遞區號;位於以下項目之下 address | 02112 | — |
taxProvince | 旅客將在該州或 省繳納稅款;隸屬於 address | MA | — |
email | 旅客的電子郵件地址;位於以下項目之下 contactInfo | brjones@somewhere.com | — |
contactNumber | 旅客的電話號碼;位於以下項目之下 contactInfo | 555-555-5555 | — |
userType | 該旅客是單一 (主要) 使用者,還是隸屬於某個組織 | — | |
dateOfBirth | 旅客的出生日期 | — |
信用卡加密與解密
若您使用cardNumber 作為旅客識別碼進行驗證,則部分資訊將需要進行加密。Expedia 要求採用 industry-standard 的 JWE (JSON Web Encryption) 技術,以安全的方式處理 PCI 資訊,並以此對信用卡資料進行加密與解密:即使用公鑰與私鑰對進行的非對稱加密。
加密使用案例
下列項目應進行加密:
- 要求:
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 加密文字參數進行解密並加以驗證。