Developer Hub
This is an auto-generated translation

계정 정보 API

계정 정보를 사용하여 사이트를 이용하는 여행자 확인

계정 정보 API에는 각 여행자에 대한 세부 정보가 포함되어 있습니다. 익스피디아 직원은 이를 사용하여 구매, 로열티 사용, 취소 등을 위해 여행자의 고유 식별자를 확인합니다. 이 고유 식별자는 요구 사항 또는 보안 표준에 따라 신용카드 번호(결제 카드 업계(PCI) 식별자) 또는 이메일 주소 또는 로열티 계정 번호와 같은 non-PCI 식별자 중 하나 일 수 있습니다.

자세한 내용은 공통 데이터 및 응답 을 참조하세요.

계정 정보 가져오기

이 필드 세트로 POST /user/v1/account를 사용하여 로열티 회원 또는 카드 소유자의 계정 정보를 가져올 수 있습니다.

헤더

필드설명샘플 값필드 유형필수 여부
partnerIdExpedia에서 제공하는 비즈니스의 고유 식별자파트너사의 브랜드String, 최대 20자
AuthorizationExpedia가 승인 서버로부터 받은 액세스 토큰을 팀에서 검증함표준 JSON 웹 토큰(JWT)String, 표준 JWT 길이
Authorization2Expedia에서 전송한 JSON 웹 토큰(JWT), 파트너사 측에서 서명 및 클레임을 검증함표준 JWTString, 표준 JWT 길이

요청

membershipId, loyaltyAccountNumber, cardNumber, 또는 email을 필수 매개변수로 설정해야 합니다. 계정 관리자가 고객과 협력하여 고객의 요구사항에 따라 가장 적합한 방법을 정의합니다.

참고:cardNumber 을 식별자로 사용하는 경우 아래의 cardDetailsbillingAddress표도 검토해야 합니다. 다른 매개변수에는 이 데이터가 필요하지 않습니다.

필드설명필드 유형필수 여부
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여행자의 이름; 아래에 중첩됨 nameBob
middleName여행자의 중간 이름; 아래에 중첩됨 nameRobert
lastName여행자의 성, 아래에 중첩됨 nameJones
contactInfo주소, 이메일, 전화번호를 포함한 여행자 연락처 정보
address주소, 시, 주 또는 도, 우편번호를 포함한 여행자 주소(아래에 중첩됨). contactInfo
streetAddress여행자 주소; 아래에 중첩됨 address123 Main St.
city여행자 주소의 도시; 아래에 중첩됨 addressBoston
state여행자의 주소 상태; 아래에 중첩됨 addressMA
country여행자의 주소 국가; 아래에 중첩됨 addressUSA
postalCode여행자 주소의 우편 번호; 아래에 중첩됩니다. address02112
taxProvince여행자가 세금을 납부할 주 또는 도(아래에 중첩됨). addressMA
email여행자의 이메일 주소; 아래에 중첩됨 contactInfobrjones@somewhere.com
contactNumber여행자의 전화번호; 아래에 중첩됨 contactInfo555-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 공개 키를 받습니다.

  1. 256비트 길이의 RSK(무작위 대칭 키)를 생성합니다.
  2. 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 인증 태그)

코드 샘플

암호화를 위한 Java 샘플

JWE 암호화는 타사 JWE 라이브러리의 도움을 받아 효율적이고 빠르게 구현할 수 있습니다. 예를 들어, 이 암호화를 위한 java 코드Nimbus JOSE+JWT 라이브러리의 도움으로 작성되었습니다.

public String encryptWithJWE(String plainText){
    X509Certificate publicCertificate = <fetch public cert>
    //get RSA public key
    final X509EncodedKeySpec publicKeySpec = new 
    X509EncodedKeySpec(publicCertificate.getPublicKey().getEncoded());
    final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    RSAPublicKey rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(publicKeySpec);
    //get keyID
    String keyID = certificateManager.getKid(publicCertificate);
    // Create JWE Header containing the needed metadata for encryption and decryption
    JWEHeader jweHeader = new JWEHeader.Builder(JWEAlgorithm.RSA_OAEP_256, EncryptionMethod.A256GCM)
        .type(JOSEObjectType.JWT)
        .customParam(IAT, System.currentTimeMillis())
        .keyID(keyID)
        .build();
/*

샘플 JWE 헤더

{
"alg":"RSA-OAEP-256",
"typ":"JWT",
"enc":"A256GCM",
"iat":<Time (in UTC) when JWE was issued, expressed in UNIX epoch time (seconds since 1 January, 1970)>,
"kid":<Key ID or subject key Identifier from the public key certificate>
}
*/
    JWEObject jweObject = new JWEObject(jweHeader, new Payload(plainText));
    RSAEncrypter encrypter = new RSAEncrypter(rsaPublicKey);
    jweObject.encrypt(encrypter);
    return jweObject.serialize();
    }

요청 시 카드 번호 암호 해독

익스피디아는 요청 시 cardNumber을 암호화합니다. 암호 해독 경로는 암호화 경로의 반대입니다.

  1. 암호화된 JWE를 받으면 JWE의 첫 번째 섹션인 JOSE 헤더를 디코딩하여 알고리즘, 암호화 및 keyId (alg, enc, kid)를 확인해야 합니다.
  2. 그런 다음 iat (issued-at: JWT 발급 시간)의 유효성을 검사하여 현재 시간과 5분 이상 차이가 나지 않는지 확인합니다. (토큰은 5분 후 만료됩니다.)
  3. 다음으로, 개인 키를 가져와 JWE 암호화 키를 암호 해독합니다.
  4. 그런 다음, 암호 해독된 RSK, JWE 초기화 벡터, JWE 인증 태그를 사용하여 JWE 암호 텍스트 매개변수를 암호 해독하고 검증할 수 있습니다.

코드 샘플

암호화를 위한 Java 샘플

JWE 암호화는 타사 JWE 라이브러리의 도움을 받아 효율적이고 빠르게 구현할 수 있습니다. 예를 들어, 이 암호화를 위한 java 코드Nimbus JOSE+JWT 라이브러리의 도움으로 작성되었습니다.

public String decryptJWE(String jweString) {
    PrivateKey privateKey = <fetch private key>;
    RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey;
    JWEObject jweObject = JWEObject.parse(jweString);
    JWEHeader jweHeader = jweObject.getHeader();validateJweHeader(jweHeader);
    RSADecrypter rsaDecrypter = new RSADecrypter(rsaPrivateKey);
    jweObject.decrypt(rsaDecrypter);
    return jweObject.getPayload().toString();
}

API 세부 정보

신용카드 정보가 없는 경우

신용카드 정보가 있는 경우

이 페이지가 도움이 되었나요?
이 콘텐츠를 어떻게 개선하면 좋을까요?
더 나은 Developer Hub를 만드는 데 도움을 주셔서 감사합니다!