계정 정보 API
계정 정보 API에는 각 고객에 대한 세부 정보가 포함되어 있습니다. 템플릿 사이트는 이 정보를 SSO(Single-Sign-On) 프로토콜의 일부로 사용하여 사용자의 계정을 인증합니다. 이는 구매, 로열티 사용 등에 사용됩니다.
이 API는 Expedia 상담원이 사용자 계정 세부 정보를 얻기 위한 요청의 일부로 여행객의 고유 식별자(예: 신용카드 번호)를 확인하는 데에도 사용할 수 있습니다. 받은 세부 정보는 여행객에 대한 조회 및 예약을 진행하기 전에 휴대폰으로 여행객을 인증하는 데 사용됩니다.
자세한 내용은 일반적인 데이터 및 응답 페이지를 참조해 주세요.
신용카드 암호화 및 암호 해독
Expedia는 신용카드 정보를 암호화하고 암호 해독하기 위해 업계 표준 JWE(JSON 웹 암호화) 기술, 즉 공개 키와 개인 키 쌍을 사용한 비대칭 암호화를 사용합니다.
암호화 사용 사례
암호화가 수행되어야 하는 부분은 다음과 같습니다.
- 요청: 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 인증 태그)
요청 시 카드 번호 암호 해독
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에서 제공하는 비즈니스의 고유 식별자 | 파트너사의 브랜드 | String, 최대 20자 | 예 |
Authorization | Expedia가 승인 서버로부터 받은 액세스 토큰을 팀에서 검증함 | 표준 JSON 웹 토큰(JWT) | String, 표준 JWT 길이 | 아니요 |
Authorization2 | Expedia에서 전송한 JSON 웹 토큰(JWT), 파트너사 측에서 서명 및 클레임을 검증함 | 표준 JWT | String, 표준 JWT 길이 | 아니요 |
요청
필드 | 설명 | 필드 유형 | 필수 여부 |
---|---|---|---|
requestId | 거래 요청의 고유 식별자 | String | 예 |
membershipId | 고유 고객 식별자 | String | 아니요 |
loyaltyAccountNumber | 고객의 로열티 계정 번호(programAccountNumber 라고도 함). 이는 로열티 작업에 membershipId 외의 식별자가 필요한 경우에만 채워져야 합니다. | String | 아니요 |
programId | 고객이 가입한 로열티 프로그램의 식별자 또는 로열티 프로그램과 관련된 등급 이름 | String | 아니요 |
cardNumber | 고객 신용카드 번호(암호화됨) | String | 아니요 |
email | 고객 이메일 주소 | String | 아니요 |
응답
필드 | 설명 | 필드 유형 | 필수 여부 |
---|---|---|---|
status | 거래 상태(값: Approved, Declined) | String | 예 |
requestId | 거래 요청의 고유 식별자(요청 페이로드부터) | String | 예 |
ProgramAccount | 프로그램 계정 세부 정보. 중첩된 필드는 ProgramAccount 표를 참조해 주세요. | ||
languageId | 사이트에서 표시되는 언어 | String | 아니요 |
channelType | 사이트가 최적화된 플랫폼(값: WEB, MOBILE, TABLET) | 아니요 |
ProgramAccount
필드 | 설명 | 샘플 값 | 필수 여부 |
---|---|---|---|
programId | 고객이 가입한 로열티 프로그램의 식별자 또는 로열티 프로그램과 관련된 등급 이름 | Aventura Gold | 예 |
accountName | 프로그램 이름(programId 와 다른 경우) | Aventura | 아니요 |
loyaltyAccountNumber | 고객의 로열티 계정 번호(programAccountNumber 라고도 함). 이는 로열티 작업에 membershipId 외의 식별자가 필요한 경우에만 채워져야 합니다. | 1234567 | 아니요 |
lastFourDigitsOfCreditCard | 고객이 예약에 사용한 신용카드의 마지막 4자리 숫자 | 0000 | 아니요 |
loyaltyConversionRatio | 결제액이 적립 포인트로 전환되는 비율(예: $1 = 1포인트) | 아니요 | |
loyaltyAccountBalance | 고객이 적립한 로열티 포인트의 현재 잔액 | 2003 | 예 |
사용자 정보
필드 | 설명 | 샘플 값 | 필수 여부 |
---|---|---|---|
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 | 고객의 생년월일 | 아니요 | |
cardDetails | 거래에 사용된 신용카드에 대한 세부 정보. 채워진 경우 일부 중첩된 항목을 암호화해야 합니다. | 아니요 | |
cardNumber * | 거래에 사용된 신용카드 번호(암호화됨). cardDetails 아래에 중첩됩니다. | 예 | |
cardType | 사용된 카드 유형(암호화됨). cardDetails 아래에 중첩됩니다. | 예 | |
expirationDate * | MM/YYYY 형식의 카드 만료 날짜(암호화됨). cardDetails 아래에 중첩됩니다. | 예 | |
billingAddress | 거래에 사용된 카드의 청구 주소. cardDetails 아래에 중첩됩니다. | ||
firstAddressLine * | 청구 주소의 첫 번째 줄(암호화됨). billingAddress 아래에 중첩됩니다. | 예 | |
secondAddressLine | 청구 주소의 두 번째 줄. billingAddress 아래에 중첩됩니다. | 아니요 | |
thirdAddressLine | 청구 주소의 세 번째 줄. billingAddress 아래에 중첩됩니다. | 아니요 | |
city | 청구 주소의 도시 요소. billingAddress 아래에 중첩됩니다. | 아니요 | |
province | 청구 주소의 주/도 요소. billingAddress 아래에 중첩됩니다. | 아니요 | |
countryCode | 청구 주소의 국가 요소. billingAddress 아래에 중첩됩니다. | 아니요 | |
postalCode * | 청구 주소의 우편번호 요소(암호화됨). billingAddress 아래에 중첩됩니다. | 예 |
참고: cardDetails
필드를 채우는 경우 * 표시가 있는 필드는 필수 항목입니다. 이러한 필드의 모든 데이터는 암호화됩니다.
API 세부 정보
신용카드 정보가 없는 경우
신용카드 정보가 있는 경우