Developer Hub
これは自動生成された翻訳です。

Account Information API

サイトをご利用の旅行者のアカウント情報を使用して本人確認を行ってください

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

詳細については、および「一般的なデータと回答」 をご覧ください。

アカウント情報の取得

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

ヘッダー

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

リクエスト

membershipIdloyaltyAccountNumbercardNumber、またはemail のいずれかを必須パラメータとして設定する必要があります。アカウントマネージャー の担当者が、お客様の要件に基づき、最適なソリューションを一緒に検討させていただきます。

注: 識別子としてcardNumber を使用している場合は、以下のcardDetails およびbillingAddress テーブルについても確認する必要があります。このデータが必要となるパラメータは他にありません。

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

レスポンス

フィールド説明フィールドタイプ必須/必須ではない
status取引ステータス (値 : Approved、Declined)文字列必須
requestId取引リクエストの一意の識別子 (リクエストペイロードから)文字列必須
programAccountロイヤルティ プログラムアカウントの詳細。ネストされたフィールドについては、programAccount の表をご参照ください。 
languageId当サイトが閲覧可能な言語については、のロケール詳細ページ()をご覧ください。文字列
optInForMarketingEmailユーザーがマーケティングメールの受信を承諾しているかどうか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使用されたカードの種類(暗号化済み)文字列必須
expirationDateカードの有効期限(MM/YYYY形式、暗号化済み)文字列必須
billingAddress取引に使用されたカードの請求先住所です。ネストされたフィールドについては、billingAddress テーブルをご参照ください。 

billingAddress

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

ユーザー

フィールド説明サンプル値必須/必須ではない
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 を使用する場合、一部の情報は暗号化する必要があります。エクスペディアでは、クレジットカード情報の暗号化および復号化に、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(JWTが発行された時刻:issued-at:)を確認し、現在時刻との差が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 の詳細

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

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

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