くらげになりたい。

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

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 セキュア認証」の章を確認するとよさそう


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