DGFT Veritrans4G開発ガイド

お問い合わせ
  • TOP
  • MDK(SDK)導入ガイド
  • MDK(SDK)インターフェースガイド
  • クレジットカード決済

本人認証サービス補足資料(3Dセキュア2.0対応版)

本ガイドについて

本ガイドの内容

本ガイドには、VeriTrans4Gの本人認証サービス(3Dセキュア2.0)における処理フロー、
処理結果コード及びそれらによる判定方法等について記載したものとなります。

関連ドキュメント

MDKの導入、システム構築の仕方については、技術マニュアル『MDK インストールガイド』をご参照ください。
Ruby / Java / .NET / PHP8

決済時に指定するパラメータ等につきましては『3Dセキュア(3DS2.0)開発ガイド』をご参照ください。

決済サービスオプションタイプについて

VeriTrans4G本人認証サービスでは、3Dセキュア認証の結果をもとにクレジットカード与信(カード与信)処理まで実施可能です。
カード与信を実施するかしないかの判定ルールは、「決済サービスオプションタイプ(serviceOptionType)」に指定する値によって異なります。

「serviceOptionType」に指定する値は、基本的には加盟店様にてご決定いただくものとなります。
商材によっては、カード会社(アクワイアラ)より『完全認証』でのサービス提供を求められるケースがございます。

全体的な注意点:

VeriTrans4G決済サーバは基本的にカード会社側(ブランド、ACS)の応答内容をベースに処理を行います。
特にステータスA(Attempt)に関しては、どのようなケースで Attempt になるかはわかりません。
契約(マスタ)チェック周りの判定詳細につきましては「A-0 判定フロー(キャッシュ判定)」をご確認ください。

「serviceOptionType」の値と、対応するカード与信処理ルールは以下のようになります。

mpi-none(単体認証)

本人認証(3Dセキュア認証)のみを実施し、カード与信は実施しない。

カード与信の実施の判断と処理(リクエスト)は加盟店様で行います(実装する必要があります)。
カード与信の実施については、mpi-none 以外のモードの判定を参考に実装してください。

mpi-complete(完全認証)

ARes/RReq にてステータス値 Y を受信した場合のみ、カード与信を実施します。

ステータス A (Attempt)のケース、3Dセキュア認証未対応ブランドのカード、加盟店様が3Dセキュアのご利用契約をされていないブランドのカード、
カード発行会社が未対応のカード( ブランドキャッシュ未登録)の場合、カード与信処理は行いません。

mpi-complete でカード与信を実施するケース

ARes Yのみ  ※ARes C の場合は RReq の結果で判定します。
RReq Yのみ

mpi-company(通常認証)

完全認証のカード与信実施ケースに加え、カード与信のチャージバックリスクがイシュアリスク負担となる場合にカード与信を実施します。

3Dセキュア認証未対応ブランドのカード、加盟店様が3Dセキュアのご利用契約をされていないブランドのカードの場合、カード与信は行いません(例外あり)。
また、利用されたカードが通常は問題ないカードの場合でも、3Dセキュア認証処理にてエラーなどが発生した場合もカード与信は行いません。

mpi-company でカード与信を実施するケース

ARes YまたはA  ※ARes C の場合は RReq の結果で判定します。
RReq YまたはA
Dinersブランドに関する補足:
3Dセキュア対応ブランドとして処理されます。
Diners ブランドのオーソリをJCB社に仕向けている加盟店様につきましては、Dinersブランドの設定有無により動作が異なります。
設定あり:3Dセキュア認証を実施し、その結果に従って後続処理を決定
設定なし:加盟店リスクでオーソリを行う(1.0と同じ振る舞い)
詳しくは「A-0 判定フロー(キャッシュ判定)」と「X.JCB仕向けのDinersの提供について」をご確認ください。
三井住友トラストクラブ仕向けの場合は他ブランドと同様の振る舞いとなります。

mpi-merchant(通常認証:加盟店リスクあり)

できる限りカード与信を実施するモードになります。

3Dセキュア認証未対応ブランドのカード、加盟店様が3Dセキュアのご利用契約をされていないブランドのカード、処理中にエラーが発生した場合でも加盟店リスク負担でカード与信を実施します。
ただし、3Dセキュア認証処理が正常に行われ、明確にNG(ステータスN受信ケースなど)の場合、カード与信は行いません。
なお、通常正常に処理されればイシュアリスク負担で3Dセキュア認証されるカードでも、エラーが発生してカード与信を実施したケースは加盟店リスク負担の決済となります。

mpi-merchant でカード与信を実施するケース

ARes Cの場合はチャレンジフロー(*1)に、それ以外の場合はこのタイミングでカード与信実施
RReq 取引が特定できれば判定がエラーとなった場合でもカード与信を実施(判定がN、Rの場合は与信は行わない)
具体的な実施ケースは「B.シナリオ別コード一覧」をご確認ください。

注意事項

*1 チャレンジフローを実施しないフラグを指定した場合、RReqは実施されないため、AResにてチャレンジフロー判定された場合、決済は行われません。

3Dセキュア認証における留意点

本章では、3Dセキュア認証サービスにおける留意点についての説明となります。

3Dセキュア認証は「イシュア」領域の機能(サービス)です

クレジットカードの与信は「アクワイアラ」に対して電文を送信いたしますが、3Dセキュアの認証は「イシュア」によって提供されるサービスとなります。
カード与信が A 社に送信される場合でも、3Dセキュア認証の詳細(なぜXという結果になったのか?)をA 社に問い合わせることで
回答を得ることはできません。
そのため、3Dセキュア認証の結果等について確認したい場合は、消費者様(カードホルダ)よりそのカードの発行元にお問い合わせいただく必要がございます(除く:VeriTrans4G側での障害など)

※この点については、3Dセキュア認証1.0でも同等です。

結果コード(vResultCode)は、各種3Dセキュア電文のステータスとマッピングされています。

3Dセキュア認証の電文には、トランザクションステータス(transactionStatus)という項目があり、結果コード(vResultCode)は
この項目に設定された値とマッピングしております(例えば、AResでNを受信した場合はGE23とする、など。決済サービスオプションタイプに指定した値により、トランザクションステータスの値とのマッピングが変わる(結果コードが異なる)ケースがあります)。
具体的なマッピングにつきましては「5-3.結果判定マトリックス」や「B.シナリオ別コード一覧」をご確認ください。

※この点については、3Dセキュア認証1.0でも同等です。

認可リクエストにおける任意項目について

基本的な補足事項

3Dセキュア2.0では、認可リクエストにカード保有者、請求先、配送先の電話番号や住所といった項目が任意項目として追加されていますが、
これらを指定することが認証結果にどのように作用するかについて、明確な情報は開示されておりません。
そのため、例えば「配送先住所情報」を指定することで認証にどれくらい影響するのか?(チャレンジとなる率が下がるのか?)といった
お問い合わせにご回答することはできません。ご理解くださいますようお願いいたします。

※今後、運用していく中で得られた情報につきましては随時資料に追加いたします

なお、3Dセキュア認証は「イシュア」により提供されております。仮にあるイシュアが X という仕様だということが判明した場合でも、
他のイシュアが必ずしも同じとは限りません。また、海外にもイシュアは存在いたします。

「国」コードのように、ISO xxxx で定義された値を設定となっている項目以外につきましてはブランドDSまたはACS側がどのような
入力チェック仕様となっているか不明な点があります。
リリース前に必ず本番モードで動作確認を実施してください。
DS/ACS側の動作は予告なく変更されることになりますので、データ設定をできるだけ簡潔に変更(設定しないように変更)できるような
形での実装を推奨いたします。

要求パラメータ「消費者IPアドレス」について(本ドキュメントバージョン1.0.4より記載、1.0.5にて更新)

3Dセキュア2.0運用開始後、複数のアクワイアラより「消費者IPアドレス(customerIp)」を電文に設定するように要請を受けております。

決済サーバへの要求電文において、IPアドレスは任意項目となっておりますが、決済サーバ側で収集可能とするように対応いたします。
決済サーバでの収集にあたっては、MAPより加盟店様にて収集機能を有効(ON)にしていただく必要がございます。
決済サーバの収集機能をご利用にあたっては、IPアドレスの収集に関して消費者様から個人情報利用における同意取得を行うことが前提となります。
収集機能を有効にする操作は、個人情報利用における同意取得に対応のうえで実施くださいますようお願いいたします。

MAPからの操作方法は次のようになります。

  1. MAPにログイン
  2. 画面右上の「各種設定変更」をクリック
  3. 各種決済設定変更の「本人認証」で「IPアドレスを自動収集する」にチェックをし(以下参照)、「変更」ボタンを押下し、変更します
MAPからの操作方法

決済フロー

フリクションレスフロー

フロー

フロー

MAPに記録される内容

上記フローにおいて MAP(A)(B)(C)それぞれのタイミングでMAPにレコードが記録されます。

成功時)

成功時)

失敗時

失敗時

チャレンジフロー

フロー

フロー

MAPに記録される内容

上記フローにおいて MAP(A)(B)(C)(D)(E)それぞれのタイミングでMAPにレコードが記録されます。

成功時)

成功時)

失敗時)

失敗時)

フロー(mpi-none)

フロー

MAPに記録される内容(mpi-none)

上記5.2.3のフローにおいて MAP(A)(B)(C)(D)それぞれのタイミングでMAPにレコードが記録されます。

成功時)

成功時)

失敗時)

失敗時)

結果判定マトリックス

ARes

ステータス意味合い後続処理mpi-nonempi-completempi-companympi-merchant
Y認証成功オーソリを実施するG011/success
N認証失敗オーソリ実施しない※1GE23/failure
Cチャレンジ実施要求チャレンジフローを実施する未確定
R認証拒否オーソリ実施しない※1GE24/failure
A試行(Attempt)オーソリを実施する※2GE32/failureG012/success
Uエラー発生オーソリ実施しない※1GE25/failureG004/success
なし-オーソリ実施しない※1GE26 or GE27 or GE28 / failureG005/success

RReq

ステータス意味合い後続処理mpi-nonempi-completempi-companympi-merchant
Y認証成功オーソリを実施するG011/success
N認証失敗オーソリ実施しない※1GE31/failure
R認証拒否オーソリ実施しない(※1)GE31/failure
A試行(Attempt)オーソリを実施する(※2)GE32/failureG012/success
Uエラー発生オーソリ実施しない※1GE33/failureG013/success
なし-オーソリ実施しない※1GE34 or GE35 or GE36/failureG014/success
mpi-none の場合、決済サーバにてオーソリは実施しません

※ ステータス「なし」は受信した電文からステータスを取得できなかった、または3DS Server内部でエラーが発生した場合

※1 オーソリを実施した場合は加盟店リスクとなります

※2 mpi-none / mpi-complete の場合、mstatusは失敗扱いとなる。mpi-complete の場合オーソリは実施しません

※3 通信がタイムアウトするなどで取得できなかった場合、3DS Server内部でエラーが発生した場合

その他補足事項

ダミーモードの試験について

クレジットカード決済では、あらかじめ決められたカード番号が利用可能です。
エラーは指定するクレジットカードの有効期限によってコントロールします。

本人認証サービスの試験は、3Dセキュア認証で取りうるシナリオ(各電文のステータス値やエラー発生)に対して
カード番号が割り振られており、指定したカード番号により、3Dセキュア認証結果が異なります。
具体的なシナリオ(認証パターン)と、そのシナリオに紐づくテストカード番号は「B.シナリオ別コード一覧」を参照ください。

B.シナリオ別コード一覧」に記載のシナリオは本人認証の動作パターンとなります。
本人認証は成功、その後カード与信NGというパターンを実施したい場合、本人認証のシナリオに合わせたカード番号と、カード決済の
エラーシナリオの有効期限(例:12月/99年)を指定してください。

その他、ダミーモードの動作仕様につきましては、「導入テストガイド」もご確認ください。

verifyTimeout 判定について

決済サーバが決済申込を受信してから3Dセキュア認証結果が確定するまでに一定時間を経過していた場合、3Dセキュア認証の結果が
認証OK(カード会社リスクでカード与信可)の場合でもエラーとするためのパラメータです。

例えば、加盟店サイト側のセッションタイムアウトが15分なのに、認証に20分かかったといったケースでカード与信が行われないように
制御することが可能です(verifyTimeout には加盟店サイトのタイムアウトより短い時間を指定してください)。

この verifyTimeout の判定開始とチェックポイントを「5-1.3Dセキュア2.0決済フロー(フリクションレスフロー)」と
5-2.3Dセキュア2.0決済フロー(チャレンジフロー)」シートに記載しておりますのでご確認ください。

判定の開始ポイント

判定の開始ポイント

時間経過の判定ポイント

時間経過の判定ポイント

本人認証結果確認(MpiGetResult)の運用について(バージョン1.0.5で追記)

決済申込から一定時間経過しても決済申込時に指定したリダイレクションURI(redirectionUri)にアクセスが戻ってこない取引に対してバッチ処理で本人認証結果確認を実施される場合、「これ以上確認しても成立することはない」という時間を経過したあとは本人認証結果確認の対象とならないよう、制御をお願いいたします。
例えば(具体的には)、verifyTimeout に 10(10分)を指定した場合、加盟店様の時間カウントで11または12 分経過して結果が確認できない取引については、その後のバッチで確認対象とならないように配慮をお願いします。

このようなリクエストが確認された場合は、テクニカルサポートより改善のご依頼をさせていただきます。

3D Transaction Status Reason について

認証がNGのケースで、ARes/RReq には 3D Transaction Status Reason というパラメータを受信するケースがあります。
この値により、認証NGとなった理由をある程度予測することは可能です。

3Dセキュアのプロトコルで定義されている値は以下のようになります。
なお、詳細の意味をお問い合わせいただいても回答はできませんので、ご了承ください。

説明
01Card authentication failed
02Unknown Device
03Unsupported Device
04Exceeds authentication frequency limit
05Expired card
06Invalid card number
07Invalid transaction
08No Card record
09Security failure
10Stolen card
11Suspected fraud
12Transaction not permitted to cardholder
13Cardholder not enrolled in service
14Transaction timed out at the ACS
15Low confidence
16Medium confidence
17High confidence
18Very High confidence
19Exceeds ACS maximum challenges
20Non-Payment transaction not supported
213RI transaction not supported
22ACS technical issue
23Decoupled Authentication required by ACS but not requested by 3DS Requestor
243DS Requestor Decoupled Max Expiry Time exceeded
25Decoupled Authentication was provided insufficient time to authenticate cardholder. ACS will not make attempt
26Authentication attempted but not performed by the cardholder
27-79Reserved for EMVCo future use (values invalid untildefined by EMVCo)
80-99Reserved for DS use

結果コードの詳細説明と発生時の対応

決済サーバが返戻する結果コードの大まかな分類と、発生時の対応についてまとめます。
加盟店様の監視ルール検討などで参考にしてください。
以下、「3DS Server」は「決済サーバ」と同義となります。

結果コード発生時の対応
GAxx ※後述の具体的な結果コードを除く
単発の発生であれば様子見してください。
発生数が気になる場合はテクニカルサポートまでお問い合わせください。
現状、GA07, GA08 がまれに発生することが確認できておりますが、いずれもACSからの戻り値不正が事由で発生したものであり、単発での発生は一時的なカード会社システムの不具合または通信異常が考えられます。
GA11 verifyTimeoutをご利用の場合で、指定した時間を経過した場合に発生します。
ユーザ操作起因(時間内に認証が完了しなかった)で発生するエラーのため問題ありません。
GA18
※重要
決済は成立していませんので、お客様にはしばらく待ってから再度決済を行っていただくようにご案内してください。このエラーが多発する場合は、テクニカルサポートまでお問い合わせください。
このエラーは、ACSからバックグランドで行われる通信(RReq)が 3DS Server に届かずに画面遷移が行われた場合に発生します。
チャレンジ認証においてインターネット経路(ACS --> DS --> 3DS Server)で通信障害(遅延含む)が発生していた可能性があります。フリクションレスフローでは発生しません。
GE21 発生した場合は決済サーバのマスタ設定状況を要確認となりますので、テクニカルサポートまでお問い合わせください。
なお、ご契約などによって特定条件で発生するケースもございます。
GE23
GE24
GE31
3Dセキュア認証自体は正常に実施されており、カード会社の判定による認証NGとなります。
GE32 3Dセキュア認証自体は正常に実施されており、カード会社の判定による「みなし認証成功(Attempt)」となります。
完全認証(mpi-complete)または認証のみ利用(mpi-none)の場合に発生します。
この結果コードは、カード会社のリスク負担で決済に進むことができることを示しますが、mpi-completeの場合は決済に進むことができません。カード会社から完全認証を求められていない限り、通常認証(mpi-company)に変更すればカード会社リスクで決済に進むことができますので、ご検討ください。
GE25
GE33
単発の発生であれば様子見してください。
消費者環境(User-Agentなどで判定)事由による発生が考えられます。
多発する場合は、カード会社側の問題が考えられますので、テクニカルサポートまでお問い合わせください。
GE28
※重要
AReq送信時、3DS Server --> DS の通信でエラーが発生したときに返戻されます。
このエラーが多発すると何らかの障害が発生している可能性が考えられます。
MAPでこのエラー取引の詳細画面にアクセスすると詳細のメッセージが表示されますので、お問い合わせ前に一度ご確認ください。
発生例としては、DSとの通信でタイムアウトとなるケース、DSまたはACSの障害があげられますが、3DS Server(決済サーバ)の不具合でも発生する可能性はございます。
住所などのパラメータを指定している場合、指定した値のフォーマットの問題で本結果コードが返戻される可能性もあります(重要)。
MAPの表示例
MAPの表示例
GE36
※重要
単発の発生については様子見してください。
RReq で3DS Serverが受信したデータ(電文)解析でエラーが発生した時に返戻される結果コードとなります。
GE28と同様、MAPで該当取引の詳細画面に詳細メッセージが表示されますので、お問い合わせ前にご確認ください。
繰り返し発生する場合は障害が発生している可能性がございます。
過去の発生例:ECIの値(必須)が受信したデータに含まれていなかった
GE26
GE27
GE34
GE35
GH01
何らかのエラー発生時に返戻される結果コードとなります。
単発の発生については様子見してください。
多発する場合は、障害の発生が疑われます。障害発生箇所の特定には詳細の確認が必要になりますので、テクニカルサポートまでお問合せください。
左記GExxの過去の発生事例としては、DSからエラー電文(3Dセキュア電文に合致しない)を受信したケースがあります。
GH01の発生事例はありません。
GE22 mpi-completeでのみ発生します。
3DS Serverで保持しているキャッシュデータにリクエストされたカード情報と合致するデータが存在しない場合に返戻されます。
キャッシュに含まれないのは基本的に3Dセキュア2.0に対応していないことになるため、完全認証(mpi-complete)ではエラーと判定します。
GE29 withChallengeパラメータを指定していなければ発生しません。

以下に続くGBxx、GCxx のエラーはMAPでは確認できない結果コードとなります。
これらの結果コードは加盟店様側でログを監視していないと検知できない結果コードとなりますが、決済サーバ側で監視を行っているため、
加盟店様にて監視しなければならないということではございません(単発の発生で弊社からご連絡するものではありません)。

結果コード発生時の対応
GB10
GB11
GB12
GB22 - GB35
決済サーバの設定と、処理対象のクレジットカード番号の組合せの不整合により発生する可能性があります。
内容確認後となりますが、決済サーバ側の設定変更が必要になる場合があります。
GB12については、ハウスカードなど、3Dセキュア対象外のカードで認証を実施しようとした場合に応答される結果コードとなるため、発生イコール設定不備というわけではございません。
GB13 - GB20 決済サーバ内のデータ不整合が発生した場合に発生しうるコードとなりますが
過去発生したことはございません。
GCxx

※後述の具体的な結果コードを除く

パラメータの入力チェックエラー系の結果コードとなります。
繰返し発生する場合は、そのパターンに何らかの不具合が生じている可能性が考えられます。
GCxx の多くは決済サーバでは問題ないエラーとして監視対象外となります。
GCA0
GCA3
GCA4
単発で発生した場合は様子見してください。
繰返し発生する場合はテクニカルサポートまでお問い合わせください。
今のところ発生は確認されておりません。
GCA2 ブラウザバックなど、ユーザ操作で発生しうるエラーとなります。
多発しなければ特に問題ありません。
GB21
GE01 - GE06
GE11 - GE16
3Dセキュア2.0では発生しない結果コードとなります(3Dセキュア1.0の認証でのみで発生)

A-0.判定フロー(キャッシュ/仕向け判定)

A-0.判定フロー(キャッシュ/仕向け判定)

A-1.判定フロー(mpi-none/mpi-complete)

A-1.判定フロー(mpi-none/mpi-complete)

A-2.判定フロー(mpi-company)

A-2.判定フロー(mpi-company)

A-3.判定フロー(mpi-merchant)

A-3.判定フロー(mpi-merchant)

B.シナリオ別コード一覧

下記の一覧表は、決済サービスオプションタイプごとに各シナリオ(電文の応答パターン)と結果コード(vResultCode)のマッピングをまとめたものとなります。
決済フラグの設定(決済無し/完全認証/通常認証(カード会社リスク負担)/通常認証(マーチャントリスク負担)/未参加ブランド)とチャレンジ認証の実施フラグの設定(チャレンジ認証を行う/チャレンジ認証を行わない)によって処理が異なります。

3DS2.0補足資料 シート名「B.シナリオ別コード一覧」(zip形式/475kb)
リスク負担 テストカード 認可(MDKコマンド処理) 検証(決済サーバー内部処理)
No シナリオ カード会社/
加盟店
カード番号 決済サービスオプションタイプ 決済無し
(mpi-none)
完全認証
(mpi-complete)
通常認証
(mpi-company)
通常認証
(mpi-merchant)
決済サービスオプションタイプ 決済無し
(mpi-none)
完全認証
(mpi-complete)
通常認証
(mpi-company)
通常認証
(mpi-merchant)
リスク負担 - カード会社 カード会社 カード会社
or 加盟店
リスク負担 - カード会社 カード会社 カード会社
or 加盟店
3D未対応ブランド決済可否 × × × 3D未対応ブランド決済可否 × × ×
キャッシュ登録 mStatus※1 vResultCode ARes
Status
RReq
Status
mStatus※1 vResultCode
1-1 本人認証失敗
AResステータスN
(決済不可) 378282246310005 success G0010000 G0010000 G0010000 G0010000 N failure GE230000 GE230000 GE230000 GE230000
1-2 本人認証失敗
AResステータスR
(決済不可) 5105105105105100 success G0010000 G0010000 G0010000 G0010000 R failure GE240000 GE240000 GE240000 GE240000
1-3 本人認証失敗
チャレンジ認証実施
RReqステータスN、R
(決済不可) 5555444455554442
5111111111111118
success G0010000 G0010000 G0010000 G0010000 C N
R
failure GE310000 GE310000 GE310000 GE310000
2-1 本人認証成功
AResステータスY
(チャレンジ不要)
カード会社 4111111111111111
36111111111111
371449635398431
success G0010000 G0010000 G0010000 G0010000 Y success G0110000 G011A001 G011A001 G011A001
2-2 本人認証成功
RReqステータスY
(チャレンジ認証で成功)
カード会社 377752749896404
2222222222222224
success G0010000 G0010000 G0010000 G0010000 C Y success G0110000 G011A001 G011A001 G011A001
3-1 本人認証成功
AResステータスA
カード会社 5555555555554444 success G0010000 G0010000 G0010000 G0010000 A failure 又は
success
GE320000 GE320000 G012A001 G012A001
3-2 本人認証成功
RReqステータスA
カード会社 371111111111114 success G0010000 G0010000 G0010000 G0010000 C A failure 又は
success
GE320000 GE320000 G012A001 G012A001
4-1 本人認証実行不可
(未対応・未契約ブランド※2)
加盟店 3528000000000007 なし failure 又は
success
GE210000 GE210000 GE210000 G0020000 G002A001
4-2 本人認証実行不可
(未対応・未契約ブランド※2)
加盟店 36363636363632 failure 又は
success
GE210000 GE210000 G0020000 G0020000 G002A001 G002A001
5 本人認証実行不可
(ブランドキャッシュ未登録※3)
- *3 3530111333300000 なし failure 又は
success
G0070000 GE220000 G0070000 G0070000 A ※3 G012A001 ※3 G012A001 ※3
6-1 本人認証失敗
AResステータスU
加盟店 36666666666660 success G0010000 G0010000 G0010000 G0010000 U failure 又は
success
GE250000 GE250000 GE250000 G004A001
6-2 本人認証失敗
ARes電文解析エラー
加盟店 3528000000000023 success G0010000 G0010000 G0010000 G0010000 Error failure 又は
success
GE260000 GE260000 GE260000 G004A001
6-3 本人認証失敗
RReqステータスU
(チャレンジ認証実施)
加盟店 3528000000000015 success G0010000 G0010000 G0010000 G0010000 C U failure 又は
success
GE330000 GE330000 GE330000 G013A001
6-4 本人認証失敗
RReq電文解析エラー
(チャレンジ認証実施)
加盟店 341111111111111 success G0010000 G0010000 G0010000 G0010000 C Error failure 又は
success
GE340000 GE340000 GE340000 G013A001
7-1 異常終了
(AReq処理で通信
またはシステムエラー)
加盟店 5500000000000004 success G0010000 G0010000 G0010000 G0010000 不定 failure 又は
success
GE270000
GE280000
GE270000
GE280000
GE270000
GE280000
G005A001
7-2 異常終了
(RReq処理で通信または
システムエラー)
加盟店 2342342342342341 success G0010000 G0010000 G0010000 G0010000 C 不定 failure 又は
success
GE350000
GE360000
GE350000
GE360000
GE350000
GE360000
G014A001
凡例:
加盟店リスクで決済

※赤字は主に前のバージョンからの変更点となります

※1 応答コードが「GExx」の場合は "failure"(失敗)、「G0xx」の場合は "success"(成功)となります。

※2 判定ルールについては「A-0 判定フロー(キャッシュ判定)」を参照

※3 シナリオ5は、テストシナリオとしては、ARes = A の動作となりますが、本番取引ではAReqを実行する、という意味合いで、必ずしもその応答が A になる保証があるわけではありません。
そのため、リスク負担もシナリオ 5の前半だけで決まるものではなく、サービスオプションタイプの指定とARes、そのあとの処理結果に従います。テストシナリオの結果に限れば「カード会社」リスクとなります。

<成功系・認可処理>
G001=本人認証実行可能です。
G002=決済実行可能です。(条件付成功)
G004=決済実行可能です。(条件付成功)
G005=決済実行可能です。(条件付成功)
G007=本人認証実行可能です。(条件付成功)

<成功系・検証処理>
G011=本人認証に成功しました。
G012=本人認証に成功しました。(条件付成功)
G013=本人認証に成功しました。(条件付成功)
G014=本人認証に成功しました。(条件付成功)

<失敗系・認可処理>
GE21=本人認証実行不可です。(利用契約なしマスタ未登録)
GE22=本人認証実行不可です。(DSキャッシュなし)

GE23=本人認証実行不可です。(認証失敗AResステータスN)
GE24=本人認証実行不可です。(認証拒否AResステータスR)
GE25=本人認証実行不可です。(技術的要因などAResステータスU)
GE26=本人認証実行不可です。(異常応答ARes)
GE27=本人認証実行不可です。(センタ接続通信エラーが発生({0}))
GE28=本人認証実行不可です。(本人認証ライブラリでエラー発生)
GE29=本人認証実行不可です。(チャレンジが必要) 

<失敗系・検証処理>
GE31=本人認証に失敗しました。(チャレンジ失敗RReqステータスNまたはRReqステータスR
GE32=暫定的に認証成功とみなされました。(認証試行AResステータスAまたはRReqステータスA
GE33=本人認証に失敗しました。(技術的要因などRReqステータスU)
GE34=本人認証に失敗しました。(異常応答RReq)
GE35=本人認証に失敗しました。(センタ接続通信エラーが発生({0}))
GE36=本人認証に失敗しました。(本人認証ライブラリでエラー発生)

C.mpi-none についての補足

mpi-none について

mpi-none は、3Dセキュア認証のみ行うモードとなります。
3Dセキュアの認証結果をもとにカード決済を実施するかどうかは加盟店様にて判断する必要があります。

mpi-none モードの判定ルールは、基本的にはmpi-complete と同じとなります(G007となるケースを除く)。

そのため、mpi-company モードと同様のルールでカード与信をコントロールする場合、mpi-none の判定結果がNG(mstatus=failure)と
なった場合でも vResultCode の値をもとにカード決済を行うという判定が必要となります。

3Dセキュア認証の結果をクレジットカード与信に設定する

3Dセキュア認証の結果が認証OKの場合でも、その結果をカード与信(電文)に設定しなければ、その与信のリスクは加盟店リスクとなります。

3Dセキュア認証の結果をカード与信に設定する場合、「カードオプションタイプ(cardOptionType)」に "mpi" を設定し、3Dセキュア関連のパラメータ(dddEci など、ddd で始まるパラメータ)に値を設定します。

具体的なパラメータは以下になります(クレジットカード決済の開発ガイドも参照ください)

パラメータ名(カード決済)応答フィールド名(本人認証サービス)
フィールド名項目名詳細パラメータ連携Search結果/ResponseDto
メッセージバージョンdddMessageVersiondddMessageVersionres3dMessageVersion
DSトランザクションID (*1)dddDsTransactionIddddDsTransactionIdres3dDsTransactionId
3DSサーバトランザクションID (*1)dddServerTransactionIddddServerTransactionIdres3dServerTransactionId
トランザクションステータスdddTransactionStatusdddTransactionStatusres3dTransactionStatus
CAVVdddCavvdddCavvres3dCavv
ECIdddEcidddEcires3dEci
CAVVアルゴリズムdddCavvAlgorithmdddCavvAlgorithmres3dCavvAlgorithm
トランザクションID(*2)dddTransactionIddddTransactionIdres3dTransactionId

(*1) 3Dセキュア2.0で追加された項目

(*2)オーソリ仕向け先がJCBのAMEX取引においては dddTransactionId を設定する必要があります。決済サーバから返戻された場合は設定するように実装してください。
※ v1.0.3 補足:将来的に dddTransactionId は応答しないようになります。
※ v1.0.6 補足:JCB社からの要請によりあらためて dddTransactionIdを応答するように変更されます。

上記パラメータはカードオプションタイプに "mpi" を指定した場合に指定可能となりますが、必須項目は「ECI」のみとなります。
そのため、ECIの値が取得できないケースでもカード与信を行う場合(リスク負担は加盟店様になります)、カードオプションタイプに "mpi" を指定しない通常のカード決済を行うか、ECI に "07" という固定値を指定してください。
認証パターン、ブランドにより値が返戻されないケースもあるため、設定されていれば(取得できれば)指定してください。

必ず値が返戻される前提の実装はしないでください。

補足
カードセンターを介してカード会社(アクワイアラ)に連携される与信電文には、3Dセキュアの項目を設定する箇所があります。
3Dセキュア2.0の開始に伴い、上記(*1)のパラメータが追加されました。
決済サーバは dddMessageVersion の値が 2.x.x の場合に (*1) のパラメータ電文に設定します。
(*1)のパラメータが設定されるケースは dddMessageVersion の値も返戻されますので、値の設定が漏れないようご注意ください。

mpi-none と MDKトークンについて

トークンサーバから取得したMDKトークンの値は 1度だけ利用できます(1度利用すると使えなくなります)。
mpi-none モードで 3Dセキュア認証とカード与信を分けて実行する場合、MDKトークンが 2つ必要となります。
トークン取得処理を 2度実行し、取得した2つのトークンの値を加盟店様サーバに連携し、1つを3Dセキュア認証、もう 1つをカード与信の電文に設定するという実装が必要となります。

D.3DS Method から AReq が実行されるまでの処理フロー

VeriTrans4Gでは、決済申込の応答に含まれる「応答コンテンツ」の内容(HTML)をクライアントのブラウザにロードさせる流れとなりますが、
本資料は「応答コンテンツ」がブラウザにロードされた際(ブランドのロゴとスピナーが表示されている間)の処理フローの補足となります。
AReq が処理されるまでの処理フローとなるため、フリクションレスフロー、チャレンジフローで共通の流れになります。
なお、実際にブラウザに表示されるブランドごとのロゴやスピナーファイルの取得といった部分は省略しております(すべての処理を記載しているわけではありません)。
また、この部分のフロー(HTMLの構成やタイムアウト値など含む)は予告なく変更する可能性があります。

3DS Method が定義されたカード情報の場合

3DS Method が定義されたカード情報の場合

3DS Method 未定義

3DS Method 未定義

3DS Method処理でタイムアウト

3DS Method処理でタイムアウト

X. JCB仕向けDinersの提供について

本項にて記載している内容は3Dセキュア2.0には直接関係する内容ではございません。

ご注意事項:

決済サーバが払い出す「トランザクションID」について、その値の大小がトランザクションの順番を保証するものとはならないため、Searchをご利用の加盟店様は実装をご確認ください。
本人認証の結果判定の観点では、「リクエストID」を検索条件に含めているかをご確認ください。

対応:

トランザクションIDで順番をチェックしているロジックがある場合、取引日時(txnDatetime)の値でチェックする形に修正してください。
または、チェックしたいトランザクションの条件(例えば「売上」の「成功」トランザクションを探す)をご調整ください。
ご不明な点につきましてはテクニカルサポートまでお問い合わせください。

補足:

詳細パラメータ連携を利用されていない場合、本人認証(+カード決済)完了時のリダイレクトで加盟店様に連携されるパラメータは「取引ID」と「リクエストID」となります。

MDKサンプルの実装では検索パラメータに「リクエストID」を指定して検索(Search)を行う実装となっておりますが、
その後の流れでトランザクションIDが最新のものを判定する実装例が含まれております。
検索パラメータとして「リクエストID」を指定した場合、応答に含まれるトランザクション情報は最大で2つとなります。
うち 1つが本人認証の結果(トランザクション種別・txnKind が "mpi")、もう1つがカード決済の結果(同 "card")です。

そのため、サンプル実装(具体的なロジックの説明は後述)でも誤判定されることはありませんが3Dセキュア2.0対応に合わせて改めてご確認をお願いいたします。

該当するサンプルの実装ロジック

Java版)

・・・ (略 62行目前後)・・・
long txnIdMPI = 0;
…
long txnIdCard = 0;
for (int i = 0; i < index; i++) {
    bufTxnId = Long.valueOf(transactionInfo[i].getTxnId()).longValue();
    bufMStatus = transactionInfo[i].getMstatus();
    bufVResultCode = transactionInfo[i].getVResultCode();

    …

    // MPI~カード決済までが実行された場合
    // このタイミングでリクエストIDによる検索を実行すると
    // txnKindが"mpi"と"card"のレコードがそれぞれ1件取得できる

    // MPI認証結果(複数件ある場合は最新の一件を取得)
    if (bufTxnKind != null && bufTxnKind.equals("mpi")) {
        if (bufTxnId > txnIdMPI) {
            mStatusMPI = bufMStatus;
            vResultCodeMPI = bufVResultCode;
            txnIdMPI = bufTxnId;
        }
    }

    // カード決済結果(最新の一件を取得)
    if (bufTxnKind != null && bufTxnKind.equals("card")) {
        if (bufTxnId > txnIdCard) {
            mStatusCard = bufMStatus;
            vResultCodeCard = bufVResultCode;
            txnIdCard = bufTxnId;
        }
    }
}
…

.NET版)

CoreMvcApplication.Controllers
MpiController

・・・ (略 163行目前後)・・・

[HttpPost]
public IActionResult Search([FromForm(Name = "orderId")] string orderId,
    ...

    var mpiTxnId = "";
    ...
    var cardTxnId = "";
    ...

    var txnId = info.TxnId;
    ...

    // MPI認証結果を取得(複数件の場合最新をチェックする)
    if (!string.IsNullOrWhiteSpace(txnId) && txnKind == "mpi")
    {
        if (string.IsNullOrWhiteSpace(mpiTxnId) || Convert.ToInt64(txnId) > Convert.ToInt64(mpiTxnId))	
        {	
            mpiStatus = mStatus;
            mpiVResultCode = vResultCode;
            mpiTxnId = txnId;
        }	
    }
    // カード決済結果を取得(複数件の場合最新をチェックする)
    if (!string.IsNullOrWhiteSpace(txnId) && txnKind == "card")
    {
        if (string.IsNullOrWhiteSpace(cardTxnId) || Convert.ToInt64(txnId) > Convert.ToInt64(cardTxnId))	
        {	
            cardStatus = mStatus;
            cardVResultCode = vResultCode;
            cardTxnId = txnId;
        }
    }
…

PHP版)

web/mpi/SearchExec.php

・・・ (略 114行目前後)・・・
$txn_id = 0;
$mpi_txn_id = 0;
$card_txn_id = 0;

for($i = 0; $i < count($transaction_info_list); $i++) {
	...
	$txn_id = $transaction_info_list[$i]->getTxnId();
	...
	// MPI認証結果を取得(複数件の場合最新をチェックする)
	if (isset($txn_id) && "mpi" == $txn_kind) {
		if ($txn_id > $mpi_txn_id) {
			$m_status_mpi = $m_status;
			$v_result_code_mpi = $v_result_code;
			$mpi_txn_id = $txn_id;
		}
	}
	// カード決済結果を取得(複数件の場合最新をチェックする)
	if (isset($txn_id) && "card" == $txn_kind) {
		if ($txn_id > $card_txn_id) {
			$m_status_card = $m_status;
			$v_result_code_card = $v_result_code;
			$card_txn_id = $txn_id;
		}
	}
…

Ruby版)

web/app/controllers/web/mpi/authorize_controller.rb

※re_authorize_controller.rbも同様の実装

・・・ (略 254行目前後)・・・
@txn_id = "";
@mpi_txn_id = 0;
@card_txn_id = "";
…

@transaction_info_list.each do |info|
	@txn_id = info.txn_id
…

	# MPI認証結果を取得(複数件の場合最新をチェックする)
	if @txn_id != "" && "mpi" == @txn_kind
		if @mpi_txn_id == "" || @txn_id.to_i > @mpi_txn_id.to_i
			@m_status_mpi = @m_status	
			@v_result_code_mpi = @v_result_code
			@mpi_txn_id = @txn_id
		end
	end
	# カード決済結果を取得(複数件の場合最新をチェックする)
	if @txn_id != "" && "card" == @txn_kind
		if @card_txn_id == "" || @txn_id.to_i > @card_txn_id.to_i
			@m_status_card = @m_status
			@v_result_code_card = @v_result_code
			@card_txn_id = @txn_id
		end
	end
…

X. JCB仕向けDinersの提供について

はじめに

本章は、「JCB社によるDinersの3Dセキュア2.0オーソリの受け入れ」の開始前に、その他国際ブランドの3Dセキュア2.0への移行完了
または利用開始済みの加盟店様が、新たにDinersの3Dセキュア2.0をJCB仕向けで導入される際にご注意いただきたい内容を説明しています。

三井住友トラストクラブ仕向け(カード会社コード01)でDinersの取引を実施されている加盟店様には関連「しない」内容となります。

本章の想定の読者:

Dinersの決済を JCB社に仕向けるご契約となっている加盟店様で、かつ、JCB社がDinersの3Dセキュア2.0のオーソリを受け入れる前に
3Dセキュア2.0のご利用を始めた加盟店様。

システム的な動作としては、Dinersのカード番号を使って3Dセキュア認証を実施した場合に、「B.シナリオ別コード一覧」に記載のパターンにおける「シナリオ4-2」の動作となっている加盟店様。

※以下、「加盟店様」は上記の条件に合致している前提の記載となりますのでご留意ください。

何がかわるのか?

決済サーバの設定としては、JCB仕向けDinersの場合に 3Dセキュア認証で利用する「アカウント情報」を加盟店様のマスタに追加設定いたします。
以下、どのように動作が変わるのかについてご説明いたします。

現在(設定前)、加盟店様よりDinersのカード情報とともに3Dセキュア認証の決済リクエストを受信した場合、次のような判定の流れになります(「A-0 判定フロー(キャッシュ判定)」より抜粋)

このような動作をしている中で、JCB仕向けDinersのための「アカウント情報」が登録されると、以下のように流れが変わります。

ご利用開始前に実施しておくべきこと

決済サーバにアカウント情報が設定されると上記のように即座に動作がかわります。
しかしながら、加盟店様のマーチャントIDに同設定を行うタイミングはご指定「できません」

そのため、動作確認で問題がないことをご確認いただいたうえで、弊社に登録のご依頼をお願いいたします。

確認方法

ダミーモードにて以下のカードでテストを行い、Dinersブランドでシナリオ 4 以外となるケースで問題がないことをご確認ください。

36111111111111

本カードを指定した場合、「B. シナリオ別コード一覧」のシナリオ「2-1(ARes = Y)」で動作するようになっています。