Developer Hub
This is an auto-generated translation

Account Information API

あなたのサイトを利用する旅行者のアカウント情報を確認します。

アカウント情報APIには、各旅行者の詳細情報が含まれています。エクスペディアの担当者は、このIDを使用して、購入、ロイヤルティ の交換、キャンセルなどで旅行者固有のIDを確認します。この一意の識別子は、お客様の要件やセキュリティ基準に応じて、クレジットカード番号(Payment Card Industry (PCI) 識別子)または電子メールアドレスや ロイヤルティ アカウント番号などのnon-PCI識別子にすることができます。

詳しくは共通データと回答 をご覧ください。

アカウント情報の取得

POST /user/v1/account でロイヤルティ会員やカード名義人のアカウント情報を取得するために、次のフィールドを使用します。

ヘッダー

フィールド説明サンプル値フィールドタイプ必須/必須ではない
partnerIdエクスペディアがが提供する、ビジネスの一意の識別子貴社のブランド文字列 (最大 20 文字)必須
Authorizationエクスペディアが権限サーバーから受信したアクセス トークン (チームで検証)標準 JSON Web トークン (JWT)文字列 (標準 JWT 長)
Authorization2エクスペディアから送信された JSON Web トークン (JWT) (署名とクレームは貴社側で検証)標準 JWT文字列 (標準 JWT 長)

リクエスト

membershipId,loyaltyAccountNumber,cardNumber,email のいずれかを必須パラメータとして設定する必要があります。アカウントマネージャーはお客様のご要望に基づき、最適な方法をご提案いたします。

注:cardNumber を識別子として使用する場合は、以下のcardDetailsbillingAddress の表も確認する必要があります。他のパラメータはこのデータを必要としません。

フィールド説明フィールドタイプ必須/必須ではない
requestId取引リクエストの一意の識別子文字列必須
membershipId旅行者固有の識別子文字列はい、オプション1
loyaltyAccountNumber旅行者のロイヤルティアカウント番号 (programAccountNumber とも呼ばれます); ロイヤルティの操作にmembershipId 以外の識別子が必要な場合にのみ入力します。文字列はい、オプション2
programId旅行者が所属するロイヤルティプログラムの識別子、またはロイヤルティプログラムに関連するティア名文字列
cardNumber旅行者のクレジットカード番号(暗号化)文字列はい、オプション3
emailお客様のEメールアドレス文字列はい、オプション4

レスポンス

フィールド説明フィールドタイプ必須/必須ではない
status取引ステータス (値 : Approved、Declined)文字列必須
requestId取引リクエストの一意の識別子 (リクエストペイロードから)文字列必須
programAccountロイヤルティ プログラム・アカウントの詳細; 入れ子になったフィールドについてはprogramAccount のテーブルを参照してください。 
languageIdサイトが閲覧可能な言語。詳細はロケール詳細ページ をご覧ください。文字列
optInForMarketingEmailユーザーがマーケティングEメールをオプトインしているかどうかBoolean (ブール型)
channelTypeサイトが最適化されているプラットフォーム (値 : WEB、MOBILE、TABLET)文字列
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旅行者のクレジットカード番号(暗号化)文字列必須
cardType使用カードの種類(暗号化)文字列必須
expirationDateMM/YYYY形式のカードの有効期限(暗号化されています。)文字列必須
billingAddressネストされたフィールドについては、billingAddress テーブルを参照してください。 

billingAddress

フィールド説明フィールドタイプ必須/必須ではない
firstAddressLine請求先住所の1行目(暗号化)文字列必須
secondAddressLine請求先住所の2行目文字列
thirdAddressLine請求先住所の3行目文字列
city請求先住所の市区町村要素文字列
province請求先住所の都道府県要素文字列
countryCode請求先住所の国要素文字列
postalCode請求先住所の郵便番号要素(暗号化)文字列必須

ユーザー

フィールド説明サンプル値必須/必須ではない
userId旅行者固有の識別子。 membershipId 必須
name旅行者の姓名
firstName旅行者のファーストネーム。 nameBob必須
middleName旅行者のミドルネーム。 nameRobert
lastName旅行者の姓。 nameJones必須
contactInfo旅行者の連絡先(住所、Eメール、電話番号など
address旅行者の住所(番地、市町村、都道府県、郵便番号を含む)。 contactInfo
streetAddress旅行者の住所。 address123 Main St.
city旅行者の市区町村の住所。 addressBoston
state旅行者の住所の州。 addressMA
country旅行者の住所の国。 addressUSA
postalCode旅行者の住所の郵便番号。 address02112
taxProvince旅行者が納税する州または県。 addressMA
email旅行者のEメールアドレス。 contactInfobrjones@somewhere.com
contactNumber旅行者の電話番号。 contactInfo555-555-5555
userType旅行者がシングル(プライマリ)ユーザーであるか、組織に所属しているか 
dateOfBirth旅行者の生年月日 

クレジットカードの暗号化と復号化

検証のために旅行者識別子としてcardNumber を使用する場合、一部の情報を暗号化する必要があります。エクスペディアでは、クレジットカード情報を暗号化および復号化するために、industry-standard JWE (JSON Web Encryption)技術、すなわち公開鍵と秘密鍵のペアを使用した非対称暗号化を使用して、PCI情報を安全に取り扱う必要があります。

暗号化のユースケース

以下で暗号化を行う必要があります。

  • お願いします: cardNumber
  • 応答してください: cardDetails

リクエストパラメーターでは、貴社が 2048 ビットの CA (認証局) 署名 RSA (Rivest Shamir Adleman) 秘密鍵証明書を設定し、エクスペディアと共有する必要があります。次に、エクスペディアでは貴社の公開鍵を使って、JWE と RSA で cardNumber フィールドを暗号化します。

レスポンスパラメーターでは、エクスペディアが 2048 ビットの CA 署名 RSA 秘密鍵を設定し、対応する公開鍵証明書を共有し、貴社と共有します。その後、貴社でエクスペディアの公開鍵を使用して、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 の詳細

クレジットカード情報なし

クレジットカード情報あり

このページは役に立ちましたか ?
このコンテンツに改善が必要な点があれば、
サービス向上にご協力いただきありがとうございます。