계정 정보 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을 여행자 식별자로 사용하는 경우, 일부 정보는 암호화해야 합니다. 익스피디아는 신용카드 정보를 암호화 및 복호화하기 위해 ‘ 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(JWT가 발급된 시점:issued-at: )을 확인하여 현재 시간과 5분 이내의 차이가 있는지 확인합니다. (토큰은 5분 후 만료됩니다.) - 다음으로, 개인 키를 가져와 JWE 암호화 키를 암호 해독합니다.
- 그런 다음, 암호 해독된 RSK, JWE 초기화 벡터, JWE 인증 태그를 사용하여 JWE 암호 텍스트 매개변수를 암호 해독하고 검증할 수 있습니다.