Account Information API
Account Information API には各顧客の詳細情報が含まれています。テンプレートサイトでは、シングルサインオン (SSO) プロトコルの一部としてこの情報を使用してユーザーのアカウントを検証します。購入やロイヤルティの利用などに使用されます。
ユーザーアカウントの詳細を取得するリクエストの一環として、エクスペディアエージェントが旅行者の一意の識別子 (たとえば、クレジットカード番号) を検証するためにこの API を使用することもできます。受け取った詳細は、旅行者のショッピングや予約を進める前に、電話で旅行者の本人確認を行うために使用されます。
追加情報については、一般的なデータとレスポンスに関するページをご覧ください。
クレジットカードの暗号化と復号化
エクスペディアでは、クレジットカード情報の暗号化と復号化に業界標準の JWE (JSON Web 暗号化) 技術を使用しています (公開鍵と秘密鍵のペアを使用した非対称暗号化)。
暗号化のユースケース
以下で暗号化を行う必要があります。
- リクエスト : cardNumber
- レスポンス : cardDetails
リクエストパラメーターでは、貴社が 2048 ビットの CA (認証局) 署名 RSA (Rivest Shamir Adleman) 秘密鍵証明書を設定し、エクスペディアと共有する必要があります。次に、エクスペディアでは貴社の公開鍵を使って、JWE と RSA で cardNumber フィールドを暗号化します。
レスポンスパラメーターでは、エクスペディアが 2048 ビットの CA 署名 RSA 秘密鍵を設定し、対応する公開鍵証明書を共有し、貴社と共有します。その後、貴社でエクスペディアの公開鍵を使用して、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 (issued-at : JWT が発行された時刻) を検証し、現在の時刻と 5 分以上ずれていないことを確認します (トークンは 5 分後に失効します)。
- 次に、秘密鍵を取得して JWE 暗号鍵を復号化します。
- その後、復号化された RSK、JWE 初期化ベクトル、JWE 認証タグを使用して、JWE 暗号文パラメーターを復号化し、それを検証できます。
アカウント情報の取得
POST /user/v1/account
でロイヤルティ会員やカード名義人のアカウント情報を取得するために、次のフィールドを使用します。
ヘッダー
フィールド | 説明 | サンプル値 | フィールドタイプ | 必須/必須ではない |
---|---|---|---|---|
partnerId | エクスペディアがが提供する、ビジネスの一意の識別子 | 貴社のブランド | 文字列 (最大 20 文字) | 必須 |
Authorization | エクスペディアが権限サーバーから受信したアクセス トークン (チームで検証) | 標準 JSON Web トークン (JWT) | 文字列 (標準 JWT 長) | 必須ではない |
Authorization2 | エクスペディアから送信された JSON Web トークン (JWT) (署名とクレームは貴社側で検証) | 標準 JWT | 文字列 (標準 JWT 長) | 必須ではない |
リクエスト
フィールド | 説明 | フィールドタイプ | 必須/必須ではない |
---|---|---|---|
requestId | 取引リクエストの一意の識別子 | 文字列 | 必須 |
membershipId | 一意の顧客識別子 | 文字列 | 必須ではない |
loyaltyAccountNumber | 顧客のロイヤルティアカウント番号 (別名 programAccountNumber ) (これは、ロイヤルティオペレーションに membershipId 以外の識別子が必要な場合にのみ入力する必要があります) | 文字列 | 必須ではない |
programId | 顧客が参加しているロイヤルティプログラムの識別子、またはロイヤルティプログラムに関連付けられているステータス名 | 文字列 | 必須ではない |
cardNumber | 顧客のクレジットカード番号 (暗号化済み) | 文字列 | 必須ではない |
email | 顧客のメールアドレス | 文字列 | 必須ではない |
レスポンス
フィールド | 説明 | フィールドタイプ | 必須/必須ではない |
---|---|---|---|
status | 取引ステータス (値 : Approved、Declined) | 文字列 | 必須 |
requestId | 取引リクエストの一意の識別子 (リクエストペイロードから) | 文字列 | 必須 |
ProgramAccount | プログラムアカウントの詳細 (ネストされたフィールドについては、ProgramAccount テーブルを参照) | ||
languageId | サイトで表示可能な言語 | 文字列 | 必須ではない |
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 * | クレジットカード登録住所の 1 行目 (暗号化済み) (billingAddress の下にネスト) | 必須 | |
secondAddressLine | クレジットカード登録住所の 2 行目 (暗号化済み) (billingAddress の下にネスト) | 必須ではない | |
thirdAddressLine | クレジットカード登録住所の 3 行目 (暗号化済み) (billingAddress の下にネスト) | 必須ではない | |
city | クレジットカード登録住所の市町村要素 (billingAddress の下にネスト) | 必須ではない | |
province | クレジットカード登録住所の都道府県要素 (billingAddress の下にネスト) | 必須ではない | |
countryCode | クレジットカード登録住所の国要素 (billingAddress の下にネスト) | 必須ではない | |
postalCode * | クレジットカード登録住所の郵便番号要素 (暗号化済み) (billingAddress の下にネスト) | 必須 |
注 : cardDetails
フィールドのいずれかが入力されている場合、* 印のついたフィールドは必須です。これらのフィールドのデータはすべて暗号化されます。
API の詳細
クレジットカード情報なし
クレジットカード情報あり