強固な顧客認証規制への準拠
オンラインクレジットカード決済の認証規制を理解します。
概要
規制当局やカードネットワークは、オンライン決済のセキュリティを強化し、消費者を詐欺から守るための新たな要件を導入しています。このような規制の多くには、オンライン決済に強固な顧客認証(SCA)を使用する要件が含まれています。
- 欧州 改正決済サービス指令(PSD2)は、特定の免除またはout-of-scopeのケースが適用される場合を除き、オンライン決済取引にSCAの使用を義務付けています。
- 日本 日本のSCA義務化では、オンライン・クレジットカード取引に3Dセキュア(3DS)認証の使用を義務付けています。
3Dセキュア2(3DS 2.0)は、EMVCoとカード決済処理業界によって開発された技術で、セキュリティとスムーズなチェックアウト体験のバランスを取りながらコンプライアンスを確保するソリューションです。3DS 2.0は、SCA規制に準拠するためにRapid API。
このページでは、サポートされているRapid API支払いタイプがどのような影響を受けるか、また、旅行者へのサービス提供時にコンプライアンスを遵守するためにどのような対応が可能かについて説明します。
コンプライアンス要件
SCAが義務付けられている国でコンプライアンスに準拠した取引を可能にするための手順は、記録されている加盟店が誰であるか、また、どのように支払いが行われるかによって異なります。Rapid API.
貴組織がレコード会社である場合
Expedia Affiliate Collect
エクスペディア アフィリエイト コレクトを利用した予約は、SCA規制の影響を受けません。コンプライアンスを達成するために、Rapid APIとの決済プロセスやAPIインテグレーションを変更する必要はありません。
ただし、記録上の加盟店であり、旅行者のクレジットカード、デビットカード、またはSCA規制の範囲内にあるその他の支払い方法を請求する場合は、規制の影響を受ける可能性があります。この規制では、決済プロセスにおけるSCA-compliantソリューションとして3DS 2.0を使用する必要があるようです。加盟店がSCAに準拠し、トランザクションの失敗を回避するための機能について詳しくは、ペイメントプロセッサーにお問い合わせください。
カンパニーカード
貴社が記録上の加盟店であり、SCAが義務付けられている国で発行されたクレジットカードまたはデビットカードでRapid API、これらのカードタイプはSCA要件から免除されます:
- 使い捨てのバーチャルカード
- 個人向けではなく、会社向けに発行されるコーポレートカード
記載されているSCA-exemptカードが好ましくない場合、あなたの組織はカードを発行した銀行に直接免除を申請することができます。免除が認められた場合、そのカードでの取引は、3DS 2.0を使用したone-timeオンライン認証の可能性を除き、認証を必要としません。このone-timeの要件は銀行によって異なります。適用除外が認められるまでのプロセスには時間がかかる可能性があり、パートナー様には銀行から不正決済の責任を問われる可能性があることに注意してください。
Rapid API。
御社がラピッドにトラベラーズカードを送付する際、Rapid APIを記録加盟店として使用している場合、この規制の影響を受ける可能性があります。旅行者が小売代理店を通さずにオンラインで予約する場合、規則では、SCAを通じて旅行者が支払取引を認証することを義務付けています。この要件に対するSCA-compliantプロセスは、支払いプロセスで3DS 2.0を使用することです。SCAが義務付けられている国で発行されたクレジットカードやデビットカードで、Rapid APIを加盟店として使用したい場合は、SCA向けソリューションを採用する必要があります。
リテール代理店またはコールセンター代理店を通じて予約された取引は、SCAの要件から除外されます。これらの取引で規制に準拠するには、その予約が業者の支援を受けて行われたことの明確な証明のみが求められます。この証明には、Availability API の sales_channel
フィールドを使用します。
施設が加盟店の場合
貴社が施設コレクトを使用している場合、規制の影響を受ける可能性があります。施設は、「ノーショー」料金やデポジットなど、旅行者がその場にいなくても旅行者のカードに課金しようとする場合があります。これらのチャージは、チャージ前に3DS 2.0認証が行われない限り、SCA-compliant。SCAが義務付けられている国で発行されたクレジットカードまたはデビットカードを使用する旅行者に施設コレクトを使用したい場合、SCA向けソリューションを採用する必要があります。
Rapid APIソリューション
仕組み
Rapid API、または施設コレクトをトラベラーカードで使用している場合、RapidのAPIソリューションを採用することで、SCA規制に準拠した予約を生成することができます。当社のAPIは、予約フローで3DS 2.0を使用することで、SCAコンプライアンスをサポートしています。3DS 2.0では、risk-based認証をサポートしています。これは、銀行が旅行者に安全な認証を求めるタイミングについて裁量を与えることで、旅行者との摩擦を軽減するものです。
3DS 2.0のソリューションは、3つのステップで構成されています:
- check-outページにiframe を追加し、旅行者のために発行銀行の認証エクスペリエンスをホストするために使用します。統合ドキュメントでは、これは3DS iframeと呼ばれています。
- また、ブラウザのデータを収集し、iframeと通信し、iframe内にSCA体験を表示するために使用される新しいclient-side JavaScriptライブラリをcheck-outページにインクルードします。統合ドキュメントでは、これは3DS Connector Libraryと呼ばれています。
- Rapid APIは、銀行の支払者情報を受け付け、安全な認証が完了した後に予約を完了します。
JavaScriptとRapid APIを併用する場合、SCAによる予約フローは予約APIを呼び出す前後にいくつかの追加ステップを含むようになりました。下の図に、この新しい予約フローを示します。

改訂された予約フローの各ステップでは、1 つのステップの出力に、次のステップの入力として使われるデータが含まれます。データは、ブラウザ上の JavaScript と Rapid の間で受け渡す必要があります。
注 : 上の図は、わかりやすくするために実際の API フローを簡略化したものです。詳細な API フローについては、統合ドキュメントを参照してください。
統合コンポーネントの詳細
ブラウザの iframe
check-outエクスペリエンスに配置されたiframeは、旅行者のcard-issuing銀行が所有するURLをホストします。このURLは、ユーザーに認証体験を表示し、traveler-suppliedの情報を直接銀行に転送します。iframeは最初は非表示で、予約後に認証チャレンジが必要な場合はページの上にオーバーレイ表示されます。
ブラウザの JavaScript ライブラリー
このライブラリはcheck-outページに追加され、予約時に起動され、認証プロセスをサポートします。ライブラリーの API は、以下で説明する機能をサポートしています。
お客様のデバイス情報の自動収集
予約を試みる前に、認証のための予約を準備するために、旅行者のデバイスに関する情報を収集する必要があります。issuing-bank銀行がリスクを評価し、取引に3DS 2.0認証が必要かどうかを決定し、正しく表示されるようにするためです。3DS 2.0の仕様に従い、旅行者のブラウザから以下のデータが収集されます:言語、色の濃さ、画面の高さ、画面の幅、タイムゾーン、ユーザーエージェント、Javaが有効かどうか。
ブラウザのiframeに認証エクスペリエンスを表示
予約の試行後、ライブラリーを使用して iframe がオーバーレイ表示され、銀行のコンテンツが iframe に読み込まれます。認証プロセス中に、銀行のコンテンツは、リスク評価をサポートするために、旅行者のデバイスに関する追加情報を収集することがあります。このプロセスは、予約を完了するために必要です。
Rapid API
Rapid APIにはclient-side JavaScriptライブラリと連携して動作するAPIが含まれています。これらの API は、以下で解説する機能をサポートしています。
お客様と支払い情報の登録
予約を試みる前に、認証のための予約を準備するために、旅行者に関する追加情報を収集する必要があります。収集されるデータには、販売サイトのお客様のアカウントやお客様の支払いに関する詳細が含まれます。このデータは後日、トラベラーのissuing-bankに送信され、銀行がリスクを評価し、取引に安全な認証が必要かどうかを判断するために確認されます。詳しくは、Rapid の Register Payment API を参照してください。
支払いの完了と予約の確認
Rapid API、ブラウザ上でSCAプロセスが完了した後、Rapidをもう一度起動する必要があります。裏側では、認証が成功したことを確認し、予約を確定します。詳しくは、Rapid の支払いセッションの完了を参照してください。
予約フロー
Partner Profile Rapid Supportで3DS 2.0が有効になっている場合、Price Check APIは、Create Booking APIの代わりに、Register Payments APIへのリンクを返します。下の図に、お客様が予約を開始した後で必要になる API 呼び出しの流れを示します。一連の流れには、JavaScript ライブラリーの呼び出しと Rapid の呼び出しがどちらも含まれています。

予約が認証のために準備されている場合、必ずしも認証が必要とは限りません。認証の必要性は、支払いに使用されるクレジットカードの発行銀行によって決定されます。この決定は取引中に行われ、決定結果が Create Booking API レスポンスに示されます。
下の図に、保留と再開を使用するときに必要になる API 呼び出しの流れを示します。

注 : 上の図は、わかりやすくするために実際の API フローを簡略化したものです。詳細な API フローについては、統合ドキュメントを参照してください。
3DS 2.0体験の技術的要件に関する詳細については、EMVCoの3D secure protocol and core functions specificationをご覧ください。
Rapid APIおよび3DS 2.0統合ガイド
SCAをサポートするためには、Rapid API、3DS Connectorと呼ばれる新しいJavaScriptライブラリと統合する必要があります。この2つは、check-outのページで3DS 2.0を提示し、予約を確定するために併用されます。このソリューションは、Expedia Collect と Property Collect の両方の決済モデルをサポートしています。
3DS 2.0で予約をサポートするために必要なAPIコールのシーケンスは、以下のセクションで説明されています:
- JavaScript set-up メソッド
- Rapid Register Payment API
- JavaScript initialize session メソッド
- Rapid Book API
- JavaScript challenge メソッド
- Rapid Complete Payment API
このシーケンスを許可するには、Rapid Partner Supportが個々のパートナープロファイルに対して3DS 2.0を有効にする必要があります。
Rapid API
パートナープロファイルで認証が有効になっている場合、APIレスポンスは3DS 2.0で修正された予約フローを可能にするために異なります。
可用性API
APIリクエストのsales_channel
フィールドの値は、規則で許可されている場合に認証免除を得るためには正確でなければなりません。この値は、他の多くの要素とともに、カードの発行銀行が予約時に審査して決定します。SCAが免除されるのはエージェントツールだけです。これを指定するには、 sales_channel
の値を agent_tool
に設定します。
Price Check API
API レスポンスには、Create Booking API ではなく、Register Payments API へのリンクが含まれます。
3DS 2.0が有効な場合の応答例:
{
"status": "matched",
"occupancies": {
//...(example omitted for length)
},
"links": {
"payment_session": {
"method": "POST",
"href": "/v3/payment-sessions?token=QldfCGlcUAVgBDRwdWXBBL"
}
}
}
Register Payments API
これはSCA予約フローの2番目のステップとなり、JavaScript setup
メソッドの後に行われます。
リクエストには、non-SCA予約フローの一部である支払い詳細と、認証の成功をサポートする新しいフィールドが含まれます。これらのフィールドのうち encoded_browser_metadata
と version
の 2 つは、JavaScript API の setup method
から返されます。
レスポンスには payment_session_id
と encoded_init_config
が含まれます。これらは、JavaScript ライブラリーの initSession
メソッドへの入力として指定します。レスポンスに含まれる予約リンクは、initSession
メソッドの後に使用する必要があります。
リクエストの例 :
{
"version": "1",
"browser_accept_header": "*/*",
"encoded_browser_metadata": "ZW5jb2RlZF9icm93c2VyX21ldGFkYXRh",
"preferred_challenge_window_size": "medium",
"merchant_url": "https://server.adomainname.net",
"customer_account_details": {
"authentication_method": "guest",
"authentication_timestamp": "2018-02-12T11:59:00.000Z",
"create_date": "2018-09-15",
"change_date": "2018-09-17",
"password_change_date": "2018-09-17",
"add_card_attempts": 1,
"account_purchases": 1
},
"payments": [
{
"type": "customer_card",
"card_type": "VI",
"number": "4111111111111111",
"security_code": "123",
"expiration_month": "08",
"expiration_year": "2025",
"billing_contact": {
"given_name": "John",
"family_name": "Smith",
"email": "smith@example.com",
"phone": "4875550077",
"address": {
"line_1": "555 1st St",
"line_2": "10th Floor",
"line_3": "Unit 12",
"city": "Seattle",
"state_province_code": "WA",
"postal_code": "98121",
"country_code": "US"
}
},
"enrollment_date": "2018-09-15"
}
]
}
レスポンスの例 :
{
"payment_session_id": "76d6aaea-c1d5-11e8-a355-529269fb1459",
"encoded_init_config": "QSBiYXNlNjQgZW5jb2RlZCBvYmplY3Qgd2hpY2ggY29udGFpbnMgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gcGVyZm9ybSBkZXZpY2UgZmluZ2VycHJpbnRpbmcgYW5kL29yIDNEUyBNZXRob2Qu",
"links": {
"book": {
"method": "POST",
"href": "/v3/itineraries?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
}
}
}
Create Booking API
これはSCA予約フローの4番目のステップとなり、JavaScript initSession
メソッドの後に行われます。このリクエストには、SCA用の新しいフィールドは含まれません。必要な情報はすべて、Register Payment APIから返される予約リンクのトークンに含まれています。成功した場合、レスポンスには常に itinerary_id
が含まれます。ただし、3DS 2.0認証が必要な場合があるため、これだけでは予約が確定したことにはなりません。
必要な場合は、encoded_challenge_config
. Register Payment API から返された encoded_challenge_config
と payment_session_id
を、JavaScript の challenge
メソッドにパラメータとして渡す必要があります。
レスポンスには、complete_payment_session
への新しいリンクも含まれます。このリンクは、JavaScript ライブラリーの challenge
メソッドの後で使用してください。
3DS 2.0認証が要求されない場合、予約は確定され、レスポンスにはretrieve
、cancel
、およびオプションとしてresume
のリンクが含まれます。
例3DS 2.0認証が必要な場合、予約応答を作成します:
{
"itinerary_id": "8999989898988",
"links": {
"complete_payment_session": {
"method": "PUT",
"href": "/v3/itineraries/8999989898988/payment-sessions?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
}
},
"encoded_challenge_config": "ABElifsiejfacies2@033asfe="
}
Complete Payment Session API
これはSCA予約フローの6番目のステップとなり、JavaScript challenge
メソッドの後に行われます。このAPIは、支払いを完了し、Rapid API、安全な認証の試みが完了したことを通知するために必要です。
リクエストにはSCA用の新しいフィールドは含まれません。
成功した場合、レスポンスには、itinerary_id
と、retrieve
、cancel
、オプションで、resume
のリンクを含む予約の確認情報が含まれます。
レスポンスの例 :
{
"itinerary_id": "8999989898988",
"links": {
"retrieve": {
"method": "GET",
"href": "/v3/itineraries/8999989898988?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
}
}
}
IframeとJavaScriptライブラリの実装
SCA予約ワークフローを使用する場合、check-outページに新しいiframeとJavaScriptライブラリを含める必要があります。3DS iframeと呼ばれるiframeは、3D-Secure 2.0 を使用した認証エクスペリエンスを表示します。JavaScript ライブラリー (別名 3DS Connector ライブラリー) は、カード発行銀行への情報の転送と iframe への銀行コンテンツの読み込みをサポートします。
iframeの追加
3DS iframe はコンテナー内にラップし、コンテナーを当初は非表示にして、支払いの処理でチャレンジ認証を求められたら表示できるようにします。
コンテナーのデザインは、ホスティングページにあわせてカスタマイズできます。ご参考までに、ブートストラップ モーダルを使った実装例を以下に示します。
<div id="threeDsIframeModal" class="modal" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body iframe-container">
<div class="embed-responsive embed-responsive-16by9">
<iframe id="threeDsIframe" src="<<3DS iframe URL>>"> </iframe>
</div>
</div>
</div>
</div>
</div>
iframe の src には、次の 2 つの値のいずれかを設定する必要があります。
URL タイプ | URL | 備考 |
---|---|---|
本番環境 | https://static.pay.expedia.com/3ds/threeDsIframe.html | 本番認証に対応 |
テスト用サンドボックス | https://static.pay.expedia.com/3ds/sandboxThreeDsIframe.html | 認証テストをサポート |
テスト URL はテストに対応しています。このトピックについては、このドキュメント内で後ほどあらためて取り上げます。テスト中にiframeの内容を制限するために、iframeはsandboxで帰属させることができますが、以下のことを許可する必要があります:
sandbox = ’allow-scripts allow-forms allow-same-origin’;
JavaScriptライブラリの追加
3DS connector ライブラリーは 3DS iframe と通信し、iframe コンテンツを提供するカード発行銀行にデータを送信します。以下のサンプルに、ライブラリーをお支払いページに追加する方法の例を示します。
<head>
<script src="<<3DS connector script URL>>" integrity="<<actual integrity value>>"></script>
</head>
script 要素の src と integrity は以下の値に設定する必要があります。
ライブラリーのバージョン | 属性 | 値 |
---|---|---|
1.3.39 | src | https://static.pay.expedia.com/3ds/1.3.39/pay-3ds-js-libs-connector.min.js |
integrity | sha384-par0I4Q5cfljwzqw2mAggM4dKdYzGyj4uZiL4cMviGjI3qVzEgWGuZ2075mYutbT | |
1.3.65 | src | https://static.pay.expedia.com/3ds/1.3.65/pay-3ds-js-libs-connector.min.js |
integrity | sha384-gYopPw6xE5DZwnZXGavkwnvs3NkDOobnHqjroUnSHpGXvs/J9xjHX/8aGzKtSgWI |
注 : ソース URL と integrity は、今後のバージョンの提供に伴い変更されます。バージョン更新は、既存の統合に支障が生じないように行われる予定です。古いバージョンのスクリプトには、引き続きアクセスできます。
3DSとJavaScriptを使ったSCA
ライブラリーでは JavaScript promise を使用する必要があります。ご参考までに、JavaScript メソッドと Rapid の間でデータをやり取りする方法を示す実装例を以下に示します。
// Initialize the library
let connector = new PayThreeDSConnector.ThreeDSConnector("threedsiframe", "https://static.pay.expedia.com");
RapidIntegration.priceCheck(priceCheckLink)
.then(priceCheckResponse => {
paymentSessionLink = priceCheckResponse.links.payment_session.href;
// Setup an authentication session with the library
return connector.setup({ referenceId: ’1000’ })
}).then(setupResponse => {
console.log("Setup Response: ", setupResponse);
// Send information from setup to Rapid’s Register Payments API
return RapidIntegration.registerPayment(paymentSessionLink,
setupResponse);
}).then(paymentSessionResponse => {
console.log("Register Payments Response: ", paymentSessionResponse);
paymentSessionId = paymentSessionResponse.paymentSessionId;
bookLink = paymentSessionResponse.links.book.href;
if (paymentSessionResponse.encoded_init_config) {
// If the payment session response contains an encoded_init_config
// field, initialize an authentication session with the library
// using information returned from Rapid’s Register Payments API
connector.initSession({
paymentSessionId: paymentSessionId,
encodedInitConfig: paymentSessionResponse.encodedInitConfig
}).then(initSessionResponse => {
console.log("Init Session Response: ", initSessionResponse);
// Then create a booking with Rapid’s Book API
return RapidIntegration.createBooking(bookLink,
paymentSessionId);
})
} else {
// Otherwise, create a booking with Rapid’s Book API directly
return RapidIntegration.createBooking(bookLink, paymentSessionId);
}
}).then(createBookingResponse => {
console.log("Create Booking Response: ", createBookingResponse);
itineraryId = createBookingResponse.itinerary_id;
if (createBookingResponse.encoded_challenge_config) {
// If the Create Booking API contains an encoded_challenge_config field,
// display the authentication challenge window
$(’#threeDsIframeModal).modal(’show’);
completePaymentSessionLink = createBookingResponse.links.complete_payment_session.href;
// Perform the challenge using the information returned from Rapid’s Register Payments API
// and Create Booking API
connector.challenge({
paymentSessionId: paymentSessionId,
encodedChallengeConfig: createBookingResponse.encodedChallengeConfig
}).then(challengeResponse => {
console.log("Challenge Response: ", challengeResponse);
// Complete a booking with Rapid’s Complete Payment Session API
return RapidIntegration.completePaymentSession(completePaymentSessionLink, itineraryId);
}).then(completePaymentSessionResponse => {
console.log("Complete Payment Session Response: ", completePaymentSessionResponse);
return completePaymentSessionResponse;
}).finally(() => {
// Close the authentication challenge window
$(’#threeDsIframeModal’).modal(’hide’);
});
} else {
return createBookingResponse;
}
}).then(bookingResponse => {
...
});
注 : RapidIntegration
クラスへの参照は、例の一部であり、3DS connector ライブラリーの一部ではありません。これらの参照は、API への情報転送をサポートするラッパーを例示するためのものです。
この例では、実行時に確定しておくべきパラメータ (referenceId
など) に静的な値を使用しています。
Check-outページデザインガイドライン
3DS認証に対応しているカードブランドは、そのロゴおよびブランド名をガイドラインに従って表示することを要求する場合があります。
カードブランド | 認証ブランディング | ロゴとガイダンス |
---|---|---|
Mastercard | Mastercard Identity Check | https://brand.mastercard.com/debit/mastercard-brand-mark/downloads.html |
Visa | Visa Secure | https://www.merchantsignage.visa.com/brand_guidelines |
注 : 他のカードブランドのロゴとガイダンスは、利用可能になり次第掲載します。
3DS Connector JavaScript ライブラリーのドキュメント
クラス : ThreeDSConnector
コンストラクタ: new ThreeDSConnector(threeDsIFrameId, threeDsIFrameOrigin)
パラメータ :
名前 | タイプ | 説明 |
---|---|---|
threeDsIFrameId | string | 3DS iframe の ID です。 |
threeDsIFrameOrigin | string | 3DS iframe のオリジンです。3DS iframe との通信時に、送信ウィンドウメッセージをターゲットにして受信メッセージを絞り込むために使用されます。 |
設定
画面サイズ、色の濃さなど、バックエンドの3DSサービスが必要とするブラウザに関する基本的な情報を収集し、支払いセッションを設定します。
メソッドの署名: setup(setupRequest)
パラメータ :
名前 | タイプ |
---|---|
setupRequest | SetupRequest |
リターンズ に対する約束 SetupResponse
初期化
3DSで認証するためのセッションを初期化します。初期化の過程で、ブラウザから追加データが収集される場合があります。クレジットカード発行元から求められた場合は、カード発行元のアクセス制御サーバーがブラウザから直接データを収集できるように、3DS メソッドの URL を iframe に読み込みます。クライアントは、完了コールバックが呼び出されるのを待たずに注文を作成できます。
メソッドの署名: initSession(initSessionRequest)
パラメータ :
名前 | タイプ |
---|---|
initSessionRequest | InitSessionRequest |
リターン に対する約束 InitSessionResponse
チャレンジ
カード発行会社が要求する場合は、3DS認証エクスペリエンスをロードします。
メソッドの署名: challenge(challengeRequest)
パラメータ :
名前 | タイプ |
---|---|
challengeRequest | ChallengeRequest |
リターンズ に対する約束 ChallengeResponse
クラス : SetupRequest
setup 呼び出しのリクエスト構造です。
プロパティ :
名前 | タイプ | 説明 |
---|---|---|
referenceId | string | お客様のお支払いセッションを識別するための参照 ID です。ログ作成とトレースに使用されます。アンダースコアで APIKey と Customer-Session-ID を連結して使用します。例 : [APIKey]_[SessionID] |
クラス : SetupResponse
setup 呼び出しからのレスポンスです。
プロパティ :
名前 | タイプ | 説明 |
---|---|---|
version | string | このライブラリーのバージョンです。これはライブラリーへの URL パスに表示されるバージョンと同じです。 |
encodedBrowserMetadata | string | 収集されたブラウザの詳細を含む、エンコードされたオブジェクトです。クライアントは、これを非公開データとして扱い解析せずにバックエンドの支払いサービスに渡す必要があります。 |
クラス : InitSessionRequest
initSession
メソッドのリクエスト構造です。
プロパティ :
名前 | タイプ | 説明 |
---|---|---|
paymentSessionId | string | Rapid Register Payments API によって返される一意の ID です。 |
encodedInitConfig | string | Rapid Register Payments API によって返される、初期化に必要なデータを含む config オブジェクトのエンコード済みリストです。 |
クラス : InitSessionResponse
initSession
メソッドのレスポンス構造です。
プロパティ :
名前 | タイプ | 説明 |
---|---|---|
statusCode | string | initSession 呼び出しのステータスです。 |
message | string | オプションです。失敗の理由を示します。 |
statusCode
が取り得る値 :
値 | 説明 |
---|---|
SUCCESS | 初期化が正常に完了しました。 |
SKIPPED | 初期化は行われませんでした。 |
FAILED | 初期化に失敗しました。メッセージフィールドに、失敗に関する追加情報が記載されています。 |
TIMEOUT | 制限時間内に初期化が完了しませんでした。タイムアウト時間は 10 秒です。 |
注: すべてのinitSessionresponse
statusCode
の値については、Rapid Booking APIに進んでください。
クラス : ChallengeRequest
challenge メソッドのリクエスト構造です。
プロパティ :
statusCode の値 | テストする encoded_Challenge_config の値 | 説明 |
---|---|---|
SUCCESS | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0 | ユーザーと iframe のやり取りなし |
SUCCESS / FAILED | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0 | ユーザーと iframe のやり取りなし |
FAILED | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQ | ユーザーと iframe のやり取りなし |
TIMEOUT | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0 | |
ERROR | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d |
statusCode が取り得る値
値 | 説明 |
---|---|
SUCCESS | 3DS チャレンジが正常に完了しました。 |
SKIPPED | 外部アプリケーションエラーです。 |
FAILED | カード所有者がチャレンジ認証に正しく応答できなかったため、3DS チャレンジが正常に完了しませんでした。 |
TIMEOUT | 制限時間内にチャレンジが完了されませんでした。タイムアウト時間は 1,200 秒です。 |
注:challengeResponse
statusCode
のすべての値については、Rapid APIに進み、支払いセッションを完了してください。
Rapid API、3DS 2.0でテスト。
Rapid API、3DSコネクタメソッドとの統合は、APIがサポートする特定のシナリオに対応する入力パラメータ値でテストできます。
Rapid API
Rapid API, をテストするには、HTTPリクエストにtest
というHTTPヘッダーを追加し、そのAPIでサポートされている値の1つを使用して、サポートされているシナリオをテストします。
SCAの予約フローでは、Rapid APIからのテストレスポンスを使用して、3DSコネクタライブラリのメソッドをテストすることもできます。
支払いの登録
以下の Test ヘッダー値により、さまざまな API レスポンスの encoded_init_config
値と、さまざまな HTTP レスポンスコードを得られます。encoded_init_config
を JavaScript ライブラリーの initSession
呼び出しに渡すと、3DS Connector ライブラリー内のさまざまなテストケースをトリガーできます。
Test ヘッダーの値 | HTTP コードとレスポンス | initSession テストケース |
---|---|---|
standard | 201 – Standard Response | SUCCESS |
init_skip | 201 – Response Without encodedInitConfig | サポート対象外 |
init_fail | 201 – Standard Response | FAILED |
init_timeout | 201 – Standard Response | TIMEOUT |
internal_server_error | 500 – Internal Server Error | |
internal_server_error | 503 – Server Unavailable |
注 : init_skip
は 3DS Connector Library.t_config
内にある各種テストケースをサポートしており、これを initSession
に渡すことで statusCode
の値を強制的に SKIPPED にできます。
予約の作成
non-SCA予約フローのRapid Booking Test Requests で定義されているテストヘッダに加えて、SCAワークフローでは追加のテストヘッダ値がサポートされています。
Test ヘッダー値によりさまざまな encodedChallengeConfig
値が返されます。これらの値を JavaScript ライブラリーの challenge
呼び出しに渡して、さまざまなテストケースをトリガーすることができます。
Test ヘッダーの値 | HTTP コードとレスポンス | initSession テストケース |
---|---|---|
complete_payment_session | 201 – Response with complete payment session link | SUCCESS (ユーザーと iframe のやり取りなし) |
complete_payment_session_show | 201 – Response with complete payment session link | SUCCESS/FAILED (ユーザーと iframe のやり取りあり) |
complete_payment_session_fail | 201 – Response with complete payment session link | FAILED (ユーザーと iframe のやり取りなし) |
complete_payment_session_timeout | 201 – Response with complete payment session link | TIMEOUT |
complete_payment_session_error | 201 – Response with complete payment session link | ERROR |
支払いセッションを完了する
Test ヘッダー値により、支払い完了および予約の確定を試行する際に発生する可能性のあるさまざまなエラーケースを発生させられます。
Test ヘッダーの値 | HTTP コードとレスポンス |
---|---|
payment_declined | 400 - Payment declined response |
price_mismatch | 409 - Price mismatch response |
rooms_unavailable | 410 - Rooms unavailable response |
3DS Connector ライブラリーと iframe
外部依存関係なしで 3DS Connector をテストするには、サポートされているメソッドレスポンスに対応する特定のパラメータ値を使用します。この手法は、テスト用サンドボックスの URL を使用して iframe を読み込む場合のみサポートされます。
セッションの初期化
initSessionRequest encodedInitConfig
を変更することで、サポートされている InitSessionResponse statusCode
の値をテストできます。
statusCode の値 | テストする encodedInitConfig の値 |
---|---|
SUCCESS | W3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d |
FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0= |
TIMEOUT | W3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d |
SKIPPED | 現時点ではサポートされていません。 |
注 : encoded_init_config
の値は、Register Payments API のサポート対象 Test ヘッダーで生成することもできます。
チャレンジ
challengeRequest encondedChallengeConfig
を変更することで、サポートされている challengeResponse statusCode
の値をテストできます。
statusCode の値 | テストする encoded_Challenge_config の値 | 説明 |
---|---|---|
SUCCESS | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0 | ユーザーと iframe のやり取りなし |
SUCCESS / FAILED | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0 | ユーザーと iframe のやり取りなし |
FAILED | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQ | ユーザーと iframe のやり取りなし |
TIMEOUT | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0 | |
ERROR | W3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d |
encodedInitConfig
の値は、Booking APIのSCAフローでサポートされているテストヘッダで生成することもできます。
注意:iframeを使用したユーザー入力に基づくチャレンジステータスコード値SUCCESSまたはFAILEDをテストする場合、チャレンジメソッドのレスポンスは、iframe内のシミュレートされた認証インターフェースの完了を待ちます。
3DS iframe の UI の例 :

使用例
ご参考までに、実装例を以下に示します。この例では、定義済みのパラメータ値を使用して、ユーザーと iframe とのやり取りが不要な状態で 3DS チャレンジ用のライブラリーをテストする方法を示しています。
var c = new PayThreeDSConnector.ThreeDSConnector(’threedsiframe’, ’https://static.pay.expedia.com’); // change to match the 3DS iframe ID
c.setup({ referenceId: ’1000’ })
.then((setupResponse) => {
console.log(’Setup Output: ’, setupResponse);
return c.initSession({
paymentSessionId: 1,
encodedInitConfig: ’ W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d’,
}); // SUCCESS
})
.then((initResponse) => {
console.log(’InitSession Output: ’, initResponse);
$(’#threedsIframeModal’).modal(); // replace with code to show the modal containing the 3DS iframe
return c.challenge({
paymentSessionId: 1,
encodedChallengeConfig:
’ W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0=’,
}); // SUCCESS
})
.then((challengeResponse) => {
console.log(’Challenge Output: ’, challengeResponse);
})
.finally(() => {
$(’#threedsIframeModal’).modal(’hide’); // replace with code to hide the modal containing the 3DS iframe
});
3DS認証と施設コレクト
施設コレクトでのご予約の場合、エクスペディアからカードへの請求はありません。その代わり、施設に送って処理してもらいます。宿泊施設はこの情報を使用して、チェックイン前にカードの有効性を確認できます。にてお支払いください。check-in.
ただし、お客様がチェックインできず、宿泊施設がノーショー料金を請求する場合があります。これらのチャージは、旅行者の不在時にカードにチャージされるため、SCA規制の影響を受ける可能性があります。
取引が影響を受ける場合、決済に失敗するか、請求が規制に準拠していない場合に宿泊施設がカードブランドからペナルティを受ける可能性があります。
宿泊施設との関係を維持し、パートナー様にサービスを提供し続けるために、Expedia Group は規制に準拠するためのオプションを宿泊施設に提供しています。影響を受けるプロパティは、Expedia Groupを活用して認証を代行できるようになりました。これにより、物件はビジネスを保護することができ、Rapid API、これまでと同様に多様な物件を提供し続けることができます。
Rapid APIは、施設コンテンツファイルおよび施設コンテンツ内の<payment_registration_recommended=true>
のフラグを提供します。このフラグは、施設がプロジェクトに関与している可能性がある場合に、その施設を識別するのに役立ちます。
統合への影響
安全な認証を必要とするプロパティを提供したい場合、予約パスは3DSをサポートする必要があります。3DSのサポートがない場合、card-issuing銀行が取引に認証が必要と判断した場合、これらの物件の予約は失敗する可能性があります。
施設, Rapid APIからno-showの手数料が請求された場合、記録上の加盟店となります。カードの請求明細書に記載されるチャージの説明文は、施設ではなく、あなたの組織によって定義されます。このテキストをカスタマイズするには、Rapid パートナーサポートにお問い合わせください。
カードブランドの要件およびRapid APIの開始プロセスに準拠するために、Accepted Payments APIを使用して、以下の場合にcheck-outページにprocessing_country
を表示します。no-show. これは、Rapid APIが記録上の加盟店であるすべての取引に必要です。また、3DSが使用され、no-showが発生した場合にも発生する可能性があります。
統合への影響を軽減する方法
Rapid API、予約フローでセキュア認証をサポートしていない場合、これらのプロパティを販売しないことで、予約失敗のリスクを減らすことができます。Rapid Partner Supportに連絡して、影響を受ける 施設 コレクトレートをAvailability APIレスポンスから削除してもらってください。
エージェントツールを使用する場合、規定に従ってSCAの対象外となります。この証明には、Availability API の sales_channel
フィールドを使用します。
エラー処理
Create Booking API と Complete Payment Session API を使用すると、予約と支払い取引が確定する場合があります。
統合では、金銭的な損失と窓口にお問い合わせいただく事態を避けるために、以下の指示に留意してください。
発生元 | 機能 | 推奨タイムアウト設定 | エラー修復プロセス | 必要な対応 |
---|---|---|---|---|
Rapid API | 支払い登録トークンの予約前料金チェック | 10 秒 | 再試行、または別の宿泊施設、客室、料金を選択 | - |
JavaScript | 3DS Connector の設定 | 10 秒 | 同じリクエストを再試行 | - |
Rapid API | 支払い登録セッション | 10 秒 | Expect: 100-Continue "処理を行わずに、同じリクエストを再試行します。](https://tools.ietf.org/html/rfc7231#section-6.2.1 ’Follow link’) | - |
JavaScript | 支払いセッションの開始 | 10 秒 | 同じリクエストを再試行 | - |
Rapid API | 予約の作成 | 90 秒 | 同じリクエストを再試行 | すべてのエラー : affiliate_reference_id で予約を取得 |
JavaScript | 認証チャレンジを表示 | 10 秒 | 同じリクエストを再試行 | - |
JavaScript | challenge.statusCode を待機 | 180 ~ 1,200 秒 | 支払いセッションの完了をリクエスト | - |
Rapid API | 支払いセッションの完了 | 90 秒 | 同じリクエストを再試行 | すべてのエラー : affiliate_reference_id で予約を取得 |
Rapid API | すべてのエラー : affiliate_reference_id で予約を取得 | 30 秒 | 同じリクエストを再試行 | すべてのエラー : 90 秒待って再試行し、予約の最終ステータスを API レスポンスコード 404 または 200 で確認 |