日本でもクレジットカードの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つ
- 既存のカード ... 2025年4月1日以前に登録されたカードは、認証済みとして扱われる
- 3DSの適用不可 ... Apple Pay、Google Play、デビットカード、プリペイドカードなど
1回限りとサブスクでの流れ
また、1回限りの支払いとサブスク(定期購入)の場合についても記載されている
- 1回払い = 顧客起点の取引 (CIT)
- サブスク = 加盟店起点の取引 (MIT / Stripe Billing を含む)
3DS対応が"不要"な取引/API
以下を利用している場合は、対応が不要らしい
- Stripeが用意する決済画面を利用している場合
- CheckoutやPayment Linksなど
- Stripeが用意したUIコンポーネントを利用している場合
- Payment ElementやCard Elementなど
- + Payment Intent / Setup Intentを利用していること
3DS対応が"必要"な取引/API
なにか修正しないといけないのは、以下の場合っぽい。
3DSに対応していないので、決済エラーになるよう
- Charges APIなど非推奨のAPIを利用している場合
- Payment Intents APIを利用している場合
- 追加入力が必要な支払いに対して、処理がされていない場合は、対応が必要
- Billingを利用していて、APIバージョン 2019-03-04より前の場合
- 2019-03-14 以降にアップグレードするか
payment_behavior
パラメタを使用して、サブスクの初回支払いで認証が必要
実際におこなう3DS認証関連の参考記事
実際に3DS対応をするのに参考になりそうな記事など
- 3D セキュアを使用して認証する | Stripe のドキュメント
- Stripe公式のドキュメント
- Stripeで実装した決済システムが3Dセキュア2 (EMV3DS) に対応しているかを確認する方法 #stripe - Qiita
- Stripeの中の人の記事
- 3D セキュアがリクエストされた場合でも、認証なしで支払いが成功することがあるのはなぜですか? : Stripe: ヘルプ & サポート
- Stripe公式のヘルプ
他にこのあたりの記事も参考になる
- Stripeでカード決済(3Dセキュア対応) #stripe - Qiita
- Stripeでの3Dセキュア対応について
- サーバーサイドでStripe APIを用いた3Dセキュア決済の実装について - giftee Tech Blog
3Dセキュア認証用のテストカード
3Dセキュア用のテストカードも用意されているっぽい
説明 | カード番号 | 詳細 |
---|---|---|
設定がない場合に認証 | 4000002500003155 | 設定前には認証が必要なカード |
常に認証 | 4000002760003184 | 常に認証が必要なカード |
すでに設定 | 4000003800000446 | オフセッションは不要、オンセッションは必要 |
残高不足 | 4000008260003178 | 残高不足で支払いが失敗するカード |
細かいフローを確認する用のテストカードもある
3DS | 結果 | カード番号 |
---|---|---|
必須 | OK | 4000000000003220 |
必須 | 拒否 | 4000008400001629 |
必須 | エラー | 4000008400001280 |
対応 | OK | 4000000000003055 |
対応 | エラー | 4000000000003097 |
対応 | 未登録 | 4242424242424242 |
非対応 | 378282246310005 |
詳しい内容とかはドキュメントの「3D セキュア認証」の章を確認するとよさそう
ざっくり調べてみたけど、なんとなくわかった気がする(*´ω`*)