계정 정보 API
계정 정보를 사용하여 사이트를 이용하는 여행자 확인
계정 정보 API에는 각 여행자에 대한 세부 정보가 포함되어 있습니다. 익스피디아 직원은 이를 사용하여 구매, 로열티 사용, 취소 등을 위해 여행자의 고유 식별자를 확인합니다. 이 고유 식별자 는 요구 사항 또는 보안 표준에 따라 신용카드 번호(결제 카드 업계(PCI) 식별자) 또는 이메일 주소 또는 로열티 계정 번호와 같은 non-PCI 식별자 중 하나 일 수 있습니다.
자세한 내용은 공통 데이터 및 응답 을 참조하세요.
계정 정보 가져오기
이 필드 세트로 POST /user/v1/account를 사용하여 로열티 회원 또는 카드 소유자의 계정 정보를 가져올 수 있습니다.
헤더
| 필드 | 설명 | 샘플 값 | 필드 유형 | 필수 여부 |
|---|---|---|---|---|
partnerId | Expedia에서 제공하는 비즈니스의 고유 식별자 | 파트너사의 브랜드 | String, 최대 20자 | 예 |
Authorization | Expedia가 승인 서버로부터 받은 액세스 토큰을 팀에서 검증함 | 표준 JSON 웹 토큰(JWT) | String, 표준 JWT 길이 | — |
Authorization2 | Expedia에서 전송한 JSON 웹 토큰(JWT), 파트너사 측에서 서명 및 클레임을 검증함 | 표준 JWT | String, 표준 JWT 길이 | — |
요청
membershipId, loyaltyAccountNumber, cardNumber, 또는 email을 필수 매개변수로 설정해야 합니다. 계정 관리자가 고객과 협력하여 고객의 요구사항에 따라 가장 적합한 방법을 정의합니다.
참고:cardNumber 을 식별자로 사용하는 경우 아래의 cardDetails및 billingAddress표도 검토해야 합니다. 다른 매개변수에는 이 데이터가 필요하지 않습니다.
| 필드 | 설명 | 필드 유형 | 필수 여부 |
|---|---|---|---|
requestId | 거래 요청의 고유 식별자 | String | 예 |
membershipId | 여행자 고유 식별자 | String | 예, 옵션 1 |
loyaltyAccountNumber | 여행자의 로열티 계정 번호( programAccountNumber)는 로열티 운영을 위해 membershipId이외의 식별자가 필요한 경우에만 입력해야 합니다. | String | 예, 옵션 2 |
programId | 여행자가 소속된 로열티 프로그램의 식별자 또는 로열티 프로그램과 관련된 등급 이름입니다. | String | — |
cardNumber | 여행자 신용카드 번호(암호화됨) | String | 예, 옵션 3 |
email | 여행객 이메일 주소 | String | 예, 옵션 4 |
응답
| 필드 | 설명 | 필드 유형 | 필수 여부 |
|---|---|---|---|
status | 거래 상태(값: Approved, Declined) | String | 예 |
requestId | 거래 요청의 고유 식별자(요청 페이로드부터) | String | 예 |
programAccount | 로열티 프로그램 계정 세부 정보, 중첩된 필드는 programAccount표 참조 | — | |
languageId | 사이트를 볼 수 있는 언어; 자세한 내용은 로캘 세부 정보 페이지 를 참조하세요. | String | — |
optInForMarketingEmail | 사용자가 마케팅 이메일을 선택했는지 여부 | 부울 | — |
channelType | 사이트가 최적화된 플랫폼(값: WEB, MOBILE, TABLET) | String | — |
users | 사용자 세부 정보 목록; 중첩된 필드는 users표 참조 | — | |
cardDetails | 거래에 사용된 신용카드에 대한 세부 정보, 중첩된 필드는 cardDetails표 참조(채워진 경우 일부 중첩된 항목은 암호화해야 함). | — |
programAccount
| 필드 | 설명 | 샘플 값 | 필수 여부 |
|---|---|---|---|
programId | 여행자가 소속된 로열티 프로그램의 식별자 또는 로열티 프로그램과 관련된 등급 이름입니다. | Aventura Gold | 예 |
accountName | 프로그램 이름(programId와 다른 경우) | Aventura | — |
loyaltyAccountNumber | 여행자의 로열티 계정 번호( programAccountNumber)는 로열티 운영을 위해 membershipId이외의 식별자가 필요한 경우에만 입력해야 합니다. | 1234567 | — |
lastFourDigitsOfCreditCard | 여행자가 예약에 사용한 신용카드의 마지막 4자리 숫자 | 0000 | — |
loyaltyConversionRatio | 결제액이 적립 포인트로 전환되는 비율(예: $1 = 1포인트) | — | |
loyaltyAccountBalance | 여행자가 적립한 로열티 포인트의 현재 잔액 | 2003 | 예 |
cardDetails
| 필드 | 설명 | 필드 유형 | 필수 여부 |
|---|---|---|---|
cardNumber | 여행자 신용카드 번호(암호화됨) | String | 예 |
cardType | 사용된 카드 유형(암호화됨) | String | 예 |
expirationDate | 카드의 만료일(MM/YYYY 형식, 암호화됨) | String | 예 |
billingAddress | 거래에 사용된 카드의 청구 주소(중첩된 필드는 billingAddress표 참조) | — |
billingAddress
| 필드 | 설명 | 필드 유형 | 필수 여부 |
|---|---|---|---|
firstAddressLine | 청구 주소의 첫 번째 줄(암호화됨) | String | 예 |
secondAddressLine | 청구 주소의 두 번째 줄 | String | — |
thirdAddressLine | 청구 주소의 세 번째 줄 | String | — |
city | 청구 주소의 도시 요소 | String | — |
province | 청구 주소의 시/도 또는 주 요소 | String | — |
countryCode | 청구 주소의 국가 요소 | String | — |
postalCode | 청구 주소의 우편 번호 요소(암호화됨) | String | 예 |
사용자
| 필드 | 설명 | 샘플 값 | 필수 여부 |
|---|---|---|---|
userId | 여행자 고유 식별자, 다음과 동일 membershipId | 예 | |
name | 여행자 이름, 중간 이름, 성 | — | — |
firstName | 여행자의 이름; 아래에 중첩됨 name | Bob | 예 |
middleName | 여행자의 중간 이름; 아래에 중첩됨 name | Robert | — |
lastName | 여행자의 성, 아래에 중첩됨 name | Jones | 예 |
contactInfo | 주소, 이메일, 전화번호를 포함한 여행자 연락처 정보 | — | — |
address | 주소, 시, 주 또는 도, 우편번호를 포함한 여행자 주소(아래에 중첩됨). contactInfo | — | — |
streetAddress | 여행자 주소; 아래에 중첩됨 address | 123 Main St. | — |
city | 여행자 주소의 도시; 아래에 중첩됨 address | Boston | — |
state | 여행자의 주소 상태; 아래에 중첩됨 address | MA | — |
country | 여행자의 주소 국가; 아래에 중첩됨 address | USA | — |
postalCode | 여행자 주소의 우편 번호; 아래에 중첩됩니다. address | 02112 | — |
taxProvince | 여행자가 세금을 납부할 주 또는 도(아래에 중첩됨). address | MA | — |
email | 여행자의 이메일 주소; 아래에 중첩됨 contactInfo | brjones@somewhere.com | — |
contactNumber | 여행자의 전화번호; 아래에 중첩됨 contactInfo | 555-555-5555 | — |
userType | 출장자가 단일(기본) 사용자인지 또는 조직에 소속된 사용자인지 여부 | — | |
dateOfBirth | 여행자의 생년월일 | — |
신용카드 암호화 및 암호 해독
인증 시 cardNumber을 여행자 식별자로 사용하는 경우 일부 정보를 암호화해야 합니다. Expedia는 신용카드 정보 암호화 및 복호화를 위해 industry-standard JWE(JSON 웹 암호화) 기술인 공개 및 개인 키 쌍을 사용한 비대칭 암호화를 사용하여 PCI 정보를 안전하게 처리해야 합니다.
암호화 사용 사례
암호화가 수행되어야 하는 부분은 다음과 같습니다.
- 요청:
cardNumber - 응답:
cardDetails
요청 매개변수에서 2048비트 CA(인증 기관) 서명 RSA(Rivest Shamir Adleman) 개인 키 인증서를 설정하고 이를 Expedia와 공유해야 합니다. 그런 다음 공개 키로 JWE 및 RSA를 사용하여 cardNumber 필드를 암호화합니다.
응답 매개변수에서 2048비트 CA 서명 RSA 개인 키를 설정하고 해당 공개 키 인증서를 공유하여 파트너사와 공유합니다. 그런 다음 Expedia 공개 키로 JWE 및 RSA를 사용하여 cardDetails의 각 요소를 암호화합니다.
암호화 프로세스의 단계는 아래와 같습니다.
단계별 암호화
1단계: 공개 인증서를 가져와서 RSA 2048 공개 키를 받습니다.
- 256비트 길이의 RSK(무작위 대칭 키)를 생성합니다.
- RSA-OAEP-256 알고리즘으로 RSA 2048 공개 키를 사용하여 RSK를 암호화합니다.
2단계: 96비트 길이의 무작위 IV(초기화 벡터)를 생성합니다.
3단계: RSK, IV, 알고리즘 A256GCM으로 일반 텍스트 데이터를 암호화하여 암호 텍스트와 인증 태그 데이터를 구성합니다.
4단계: 암호 텍스트를 Base64URL 인코딩하여 Base64URL(JWE 암호 텍스트)을 생성합니다.
5단계: 인증 태그, IV, RSK 및 JWE 헤더 JSON을 Base64URL 인코딩하여 다음을 생성합니다.
- 인증 태그 데이터: Base64URL(JWE 인증 태그)
- IV: Base64URL(JWE 초기화 벡터)
- RSK: Base64URL(JWE 암호화 키)
- JWE 헤더 JSON: Base64URL(UTF8(JWE 헤더))
그런 다음 마침표('.')로 구분된 Base64URL 인코딩 부분으로 구성된 컴팩트 형식으로 JWE 객체를 직렬화하여 다음을 생성합니다.
Base64URL (UTF8)(JWE 헤더) || '.' || Base64URL(JWE 암호화 키) || '.' || Base64URL(JWE 초기화 벡터) || '.' || Base64URL(JWE 암호 텍스트) || '.' || Base64URL(JWE 인증 태그)
요청 시 카드 번호 암호 해독
익스피디아는 요청 시 cardNumber을 암호화합니다. 암호 해독 경로는 암호화 경로의 반대입니다.
- 암호화된 JWE를 받으면 JWE의 첫 번째 섹션인 JOSE 헤더를 디코딩하여 알고리즘, 암호화 및
keyId(alg, enc, kid)를 확인해야 합니다. - 그런 다음
iat(issued-at: JWT 발급 시간)의 유효성을 검사하여 현재 시간과 5분 이상 차이가 나지 않는지 확인합니다. (토큰은 5분 후 만료됩니다.) - 다음으로, 개인 키를 가져와 JWE 암호화 키를 암호 해독합니다.
- 그런 다음, 암호 해독된 RSK, JWE 초기화 벡터, JWE 인증 태그를 사용하여 JWE 암호 텍스트 매개변수를 암호 해독하고 검증할 수 있습니다.