This is an auto-generated translation

強固な顧客認証規制への準拠

オンラインクレジットカード決済の認証規制を理解します。

概要

規制当局やカードネットワークは、オンライン決済のセキュリティを強化し、消費者を詐欺から守るための新たな要件を導入しています。このような規制の多くには、オンライン決済に強固な顧客認証(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つのステップで構成されています:

  1. check-outページにiframe を追加し、旅行者のために発行銀行の認証エクスペリエンスをホストするために使用します。統合ドキュメントでは、これは3DS iframeと呼ばれています。
  2. また、ブラウザのデータを収集し、iframeと通信し、iframe内にSCA体験を表示するために使用される新しいclient-side JavaScriptライブラリをcheck-outページにインクルードします。統合ドキュメントでは、これは3DS Connector Libraryと呼ばれています。
  3. Rapid APIは、銀行の支払者情報を受け付け、安全な認証が完了した後に予約を完了します。

JavaScriptとRapid APIを併用する場合、SCAによる予約フローは予約APIを呼び出す前後にいくつかの追加ステップを含むようになりました。下の図に、この新しい予約フローを示します。

予約の準備では、Rapid API での支払いの登録と JavaScript API でのデータの収集を行います。次のステップは、Rapid API での予約です。最後に、完全な予約のステップはJavaScript API上のSCA表示から始まり、次に# API上の完全な予約となります。Rapid 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 の呼び出しがどちらも含まれています。

最初に JavaScript ライブラリーを初期化してから、Rapid API を使用して支払いセッションを作成します。その後再び JavaScript で支払いセッションを初期化し、Rapid API を使用して予約を行います。認証が必要ない場合、予約は完了です。認証が必要な場合は、JavaScriptを使用して3DS 2.0をiframeで表示し、# を使用して支払いセッションを完了します。Rapid API.

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

下の図に、保留と再開を使用するときに必要になる API 呼び出しの流れを示します。

まず JavaScript ライブラリーを初期化してから、Rapid API を使用して支払いセッションを作成します。次に、JavaScript API を使用して支払いセッションを初期化し、Rapid API を使用して予約を行います。認証が不要な場合は、Rapid API、予約を再開してください。認証が必要な場合は、3DS 2.0をJavaScript API経由でiframeで表示し、Rapid API, で支払いセッションを完了し、Rapid 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コールのシーケンスは、以下のセクションで説明されています:

  1. JavaScript set-up メソッド
  2. Rapid Register Payment API
  3. JavaScript initialize session メソッド
  4. Rapid Book API
  5. JavaScript challenge メソッド
  6. 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_metadataversion の 2 つは、JavaScript API の setup method から返されます。

レスポンスには payment_session_idencoded_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_configpayment_session_id を、JavaScript の challenge メソッドにパラメータとして渡す必要があります。

レスポンスには、complete_payment_session への新しいリンクも含まれます。このリンクは、JavaScript ライブラリーの challenge メソッドの後で使用してください。

3DS 2.0認証が要求されない場合、予約は確定され、レスポンスにはretrievecancel、およびオプションとして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 と、retrievecancel、オプションで、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.39srchttps://static.pay.expedia.com/3ds/1.3.39/pay-3ds-js-libs-connector.min.js
integritysha384-par0I4Q5cfljwzqw2mAggM4dKdYzGyj4uZiL4cMviGjI3qVzEgWGuZ2075mYutbT 
1.3.65srchttps://static.pay.expedia.com/3ds/1.3.65/pay-3ds-js-libs-connector.min.js
integritysha384-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認証に対応しているカードブランドは、そのロゴおよびブランド名をガイドラインに従って表示することを要求する場合があります。

カードブランド認証ブランディングロゴとガイダンス
MastercardMastercard Identity Check https://brand.mastercard.com/debit/mastercard-brand-mark/downloads.html
VisaVisa Securehttps://www.merchantsignage.visa.com/brand_guidelines

注 : 他のカードブランドのロゴとガイダンスは、利用可能になり次第掲載します。

3DS Connector JavaScript ライブラリーのドキュメント

クラス : ThreeDSConnector

コンストラクタ: new ThreeDSConnector(threeDsIFrameId, threeDsIFrameOrigin)

パラメータ :

名前タイプ説明
threeDsIFrameIdstring3DS iframe の ID です。
threeDsIFrameOriginstring3DS iframe のオリジンです。3DS iframe との通信時に、送信ウィンドウメッセージをターゲットにして受信メッセージを絞り込むために使用されます。

設定

画面サイズ、色の濃さなど、バックエンドの3DSサービスが必要とするブラウザに関する基本的な情報を収集し、支払いセッションを設定します。

メソッドの署名: setup(setupRequest)

パラメータ :

名前タイプ
setupRequestSetupRequest

リターンズ に対する約束 SetupResponse

初期化

3DSで認証するためのセッションを初期化します。初期化の過程で、ブラウザから追加データが収集される場合があります。クレジットカード発行元から求められた場合は、カード発行元のアクセス制御サーバーがブラウザから直接データを収集できるように、3DS メソッドの URL を iframe に読み込みます。クライアントは、完了コールバックが呼び出されるのを待たずに注文を作成できます。

メソッドの署名: initSession(initSessionRequest)

パラメータ :

名前タイプ
initSessionRequestInitSessionRequest

リターン に対する約束 InitSessionResponse

チャレンジ

カード発行会社が要求する場合は、3DS認証エクスペリエンスをロードします。

メソッドの署名: challenge(challengeRequest)

パラメータ :

名前タイプ
challengeRequestChallengeRequest

リターンズ に対する約束 ChallengeResponse

クラス : SetupRequest

setup 呼び出しのリクエスト構造です。

プロパティ :

名前タイプ説明
referenceIdstringお客様のお支払いセッションを識別するための参照 ID です。ログ作成とトレースに使用されます。アンダースコアで APIKey と Customer-Session-ID を連結して使用します。例 : [APIKey]_[SessionID]

クラス : SetupResponse

setup 呼び出しからのレスポンスです。

プロパティ :

名前タイプ説明
versionstringこのライブラリーのバージョンです。これはライブラリーへの URL パスに表示されるバージョンと同じです。
encodedBrowserMetadatastring収集されたブラウザの詳細を含む、エンコードされたオブジェクトです。クライアントは、これを非公開データとして扱い解析せずにバックエンドの支払いサービスに渡す必要があります。

クラス : InitSessionRequest

initSession メソッドのリクエスト構造です。

プロパティ :

名前タイプ説明
paymentSessionIdstringRapid Register Payments API によって返される一意の ID です。
encodedInitConfigstringRapid Register Payments API によって返される、初期化に必要なデータを含む config オブジェクトのエンコード済みリストです。

クラス : InitSessionResponse

initSession メソッドのレスポンス構造です。

プロパティ :

名前タイプ説明
statusCodestringinitSession 呼び出しのステータスです。
messagestringオプションです。失敗の理由を示します。

statusCode が取り得る値 :

説明
SUCCESS初期化が正常に完了しました。
SKIPPED初期化は行われませんでした。
FAILED初期化に失敗しました。メッセージフィールドに、失敗に関する追加情報が記載されています。
TIMEOUT制限時間内に初期化が完了しませんでした。タイムアウト時間は 10 秒です。

注: すべてのinitSessionresponse statusCode の値については、Rapid Booking APIに進んでください。

クラス : ChallengeRequest

challenge メソッドのリクエスト構造です。

プロパティ :

statusCode の値テストする encoded_Challenge_config の値説明
SUCCESSW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0ユーザーと iframe のやり取りなし
SUCCESS / FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0ユーザーと iframe のやり取りなし
FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQユーザーと iframe のやり取りなし
TIMEOUTW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0
ERRORW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d

statusCode が取り得る値

説明
SUCCESS3DS チャレンジが正常に完了しました。
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 テストケース
standard201 – Standard ResponseSUCCESS
init_skip201 – Response Without encodedInitConfigサポート対象外
init_fail201 – Standard ResponseFAILED
init_timeout201 – Standard ResponseTIMEOUT
internal_server_error500 – Internal Server Error
internal_server_error503 – 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_session201 – Response with complete payment session linkSUCCESS (ユーザーと iframe のやり取りなし)
complete_payment_session_show201 – Response with complete payment session linkSUCCESS/FAILED (ユーザーと iframe のやり取りあり)
complete_payment_session_fail201 – Response with complete payment session linkFAILED (ユーザーと iframe のやり取りなし)
complete_payment_session_timeout201 – Response with complete payment session linkTIMEOUT
complete_payment_session_error201 – Response with complete payment session linkERROR

支払いセッションを完了する

Test ヘッダー値により、支払い完了および予約の確定を試行する際に発生する可能性のあるさまざまなエラーケースを発生させられます。

Test ヘッダーの値HTTP コードとレスポンス
payment_declined400 - Payment declined response
price_mismatch409 - Price mismatch response
rooms_unavailable410 - Rooms unavailable response

3DS Connector ライブラリーと iframe

外部依存関係なしで 3DS Connector をテストするには、サポートされているメソッドレスポンスに対応する特定のパラメータ値を使用します。この手法は、テスト用サンドボックスの URL を使用して iframe を読み込む場合のみサポートされます。

セッションの初期化

initSessionRequest encodedInitConfig を変更することで、サポートされている InitSessionResponse statusCode の値をテストできます。

statusCode の値テストする encodedInitConfig の値
SUCCESSW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d
FAILEDW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0=
TIMEOUTW3sicHJvdmlkZXJJZCI6IDAsICJz YW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d
SKIPPED現時点ではサポートされていません。

注 : encoded_init_config の値は、Register Payments API のサポート対象 Test ヘッダーで生成することもできます。

チャレンジ

challengeRequest encondedChallengeConfig を変更することで、サポートされている challengeResponse statusCode の値をテストできます。

statusCode の値テストする encoded_Challenge_config の値説明
SUCCESSW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0ユーザーと iframe のやり取りなし
SUCCESS / FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlNIT1cifV0ユーザーと iframe のやり取りなし
FAILEDW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQユーザーと iframe のやり取りなし
TIMEOUTW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmd lT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0
ERRORW3sicHJvdmlkZXJJZCI6IDA sICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d

encodedInitConfigの値は、Booking APIのSCAフローでサポートされているテストヘッダで生成することもできます。

注意:iframeを使用したユーザー入力に基づくチャレンジステータスコード値SUCCESSまたはFAILEDをテストする場合、チャレンジメソッドのレスポンスは、iframe内のシミュレートされた認証インターフェースの完了を待ちます。

3DS iframe の UI の例 :

3DS iframe の例

使用例

ご参考までに、実装例を以下に示します。この例では、定義済みのパラメータ値を使用して、ユーザーと 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 秒再試行、または別の宿泊施設、客室、料金を選択-
JavaScript3DS 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 秒同じリクエストを再試行-
JavaScriptchallenge.statusCode を待機180 ~ 1,200 秒支払いセッションの完了をリクエスト-
Rapid API支払いセッションの完了90 秒同じリクエストを再試行すべてのエラー : affiliate_reference_id で予約を取得
Rapid APIすべてのエラー : affiliate_reference_id で予約を取得30 秒同じリクエストを再試行すべてのエラー : 90 秒待って再試行し、予約の最終ステータスを API レスポンスコード 404 または 200 で確認
このページは役に立ちましたか ?
このコンテンツに改善が必要な点があれば、
サービス向上にご協力いただきありがとうございます。