帳戶資訊 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 | 旅行者的中間名;位於 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 要求採用安全的方式處理 PCI 資訊,並使用 industry-standard 的 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 進行加密。解密路徑則與加密路徑相反:
keyId當您收到加密的 JWE 時,應解碼 JWE 的第一部分——JOSE 標頭,以確定演算法、加密方式及初始密鑰 (alg, enc, kid)。- 接著,您將驗證
iat(issued-at:,即 JWT 簽發的時間),以確保其與當前時間的差異不超過 5 分鐘。(標記 5 分鐘後就會過期。) - 接下來,請擷取私密金鑰,並對 JWE 加密金鑰進行解密。
- 接下來,您可以使用解密的 RSK、JWE 初始向量及 JWE 驗證標記,對 JWE 加密文字參數進行解密並加以驗證。