くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Stripeの3Dセキュア対応について調べてみた

日本でもクレジットカードの3Dセキュア(3DS)の導入が義務化され、
Stripeを使っている場合でも対応が必要となったらしい

日本における 3DS の導入の義務化について : Stripe: ヘルプ & サポート

2025年3月31日までに対応が必要らしいので、
3Dセキュアに関していろいろ調べてみたときの備忘録(*´ω`*)

ざっくり把握するのにこのスライドがわかりやすい

3Dセキュアとは

Visa Secure、Mastercard Identity Check、American Express SafeKeyなど、
不正使用を減らし、オンライン決済の安全性を高めることを目的の3Dセキュア規格らしい

「3Dセキュア1」と「3Dセキュア2」の2つのバージョンがあり、「3Dセキュア2」への対応の話

上記のドキュメントに書かれてるフローだとこんな感じで、
「フリクションレス認証」「チャレンジ認証」「従来のリスクベースの認証」の
3つのパターンがあるよう

支払い認証フロー

  • フリクションレス認証
    • 3DS2対応のカードで、フリクションレス認証が利用できる場合
    • 信用するのに十分なデータがあれば、追加入力なしで認証が完了できる
  • チャレンジ認証
    • 3DS2対応のカードで、追加の情報が必要な場合、
    • 支払いの認証のために、パスワードや生体認証など顧客が入力する必要がある
  • 従来のリスクベースの認証
    • 3DS2には非対応だが、3DS1対応している場合
    • 顧客に追加情報を求めるか、もしくは、自動承認される

3DSを実施するタイミング

「カード保存時」と「最初の支払時」の2箇所っぽい

  • 「カード保存時」は、必須ではないが、任意で要求可能
  • まだ3DSが実行されてない場合は、「最初の支払時」に要求される

3DSが実行されている場合でも、取引ごとに不正リスク判断が行われ、
その結果、必要になった場合は、3DSによる認証を行う必要もあるっぽい

3DS必須化の例外となるカード

原則全ての取引で必要だが、いくつかの場合、3DSを強制しないらしい

特につかいそうなものとしては、以下の2つ

1回限りとサブスクでの流れ

また、1回限りの支払いとサブスク(定期購入)の場合についても記載されている

  • 1回払い = 顧客起点の取引 (CIT)
    • ECサイトなど、ユーザ自身が決済する場合
    • 最初の支払時に3DSが必要。カード保存時にも3DSを実施可能
  • サブスク = 加盟店起点の取引 (MIT / Stripe Billing を含む)
    • サブスクなど、顧客が直接支払いを決定せず、決済する場合
    • usage=off_sessionを指定してカードを保存する場合には3DSが必須
    • 保存されたカードが3DS認証後であれば、そのカードでの支払いに3DSは不要
    • サブスクの内容変更があった場合は、CITになるため、3DSを要求する必要がある

3DS対応が"不要"な取引/API

以下を利用している場合は、対応が不要らしい

  • Stripeが用意する決済画面を利用している場合
    • Checkoutã‚„Payment Linksなど
  • Stripeが用意したUIコンポーネントを利用している場合
    • Payment Elementã‚„Card Elementなど
    • + Payment Intent / Setup Intentを利用していること

3DS対応が"必要"な取引/API

なにか修正しないといけないのは、以下の場合っぽい。
3DSに対応していないので、決済エラーになるよう

  • Charges APIなど非推奨のAPIを利用している場合
    • 3DSに対応してないので、Payment Intents APIなどへの移行が必要
  • Payment Intents APIを利用している場合
    • 追加入力が必要な支払いに対して、処理がされていない場合は、対応が必要
  • Billingを利用していて、APIバージョン 2019-03-04より前の場合
    • 2019-03-14 以降にアップグレードするか
    • payment_behaviorパラメタを使用して、サブスクの初回支払いで認証が必要

実際におこなう3DS認証関連の参考記事

実際に3DS対応をするのに参考になりそうな記事など

他にこのあたりの記事も参考になる

3Dセキュア認証用のテストカード

3Dセキュア用のテストカードも用意されているっぽい

説明 カード番号 詳細
設定がない場合に認証 4000002500003155 設定前には認証が必要なカード
常に認証 4000002760003184 常に認証が必要なカード
すでに設定 4000003800000446 オフセッションは不要、オンセッションは必要
残高不足 4000008260003178 残高不足で支払いが失敗するカード

細かいフローを確認する用のテストカードもある

3DS 結果 カード番号
å¿…é ˆ OK 4000000000003220
必須 拒否 4000008400001629
必須 エラー 4000008400001280
対応 OK 4000000000003055
対応 エラー 4000000000003097
対応 未登録 4242424242424242
非対応 378282246310005

詳しい内容とかはドキュメントの「3D セキュア認証」の章を確認するとよさそう


ざっくり調べてみたけど、なんとなくわかった気がする(*´ω`*)