SCAとは、Strong Customer Authentication のことで、強力な顧客認証と翻訳できます。
PSD2というEU圏でのオンライン決済認証を厳格化する法令の中で、義務付けられたもの。
3Dセキュアとは、SCAに対応するための具体的な方法となります。
SCAと3Dセキュアについて、またSTRIPEは、これらにどう対応しているのか。
LaravelにStripeを入れる際に知っておいたほうが良いポイントをまとめてお伝えしますね。
SCAや3Dセキュアとは? LaravelへSTRIPE導入時に知っておきたい金融知識
まずはSCAについて、もう少し背景を説明します。
SCA施行の現在の状況
SCAは、2019年9月14日にEEA(欧州経済領域)で義務付けられました。
2020年12月31日までに施行されることになっていますが、例外もあります。
また、既にスタートしている銀行もあります。
対応は大変そう・・・
SCAのために3Dセキュアが必要
SCAを行うためには、クレジットカードを使う際、次の3つの認証方法の中の2つの方法で、カードの名義人あると証明せねばなりません。
- 顧客が知っていること(パスワード認証など)
- 顧客が持っているもの(電話番号など)
- 顧客自身にあるもの(指紋認証など)
パスワードだけの認証は、もうムリってことですね。
ルールに合わない場合、銀行が支払いを受け付けないことになります。
上記に対応するために、3Dセキュアというテクノロジーが使用されます。
SCAという言葉はあまり聞きませんが、「3Dセキュア」は、聞いたことがありませんか?
実は日本でも、3Dセキュアによるオンライン決済のための認証強化が進められているのです。
3Dセキュアの2つのバージョン
3Dセキュアには、3DS1と3DS2があります。
簡単に言うと、3DS1はユーザー自身が追加の質問に答えねばならず、ユーザーに負担がかかる認証方法。
追加質問はメンドウなので、ユーザーの離脱率(かご落ち)が高くなるという問題があります。
そこで、新たに3DS2ができました。
3DS2は通常はユーザーに見えない形で認証が実施され、リスクが高い場合にのみ、追加の確認がユーザーに要求されます。
Stripeの3Dセキュアへの対応
Stripeは最新版の3DS2に対応しています。
それでは具体的に、どのような仕組みになっているのか。
Stripeの決済の仕組みを2ステップで簡単に解説します。
①Payment Intentsの作成
まずユーザーが決済フォームを開いた時 、Stripe API によってPayment Intents が作成されます。
このなかにclient_secretという記号が含まれます。
②支払い時にPayment Intentsを送信
その後、ユーザーがクレジットカード情報を入力し、支払いを行います。
この時点で、先ほど作成した Payment Intents内のclient_secretをStripe側に受け渡します。
ユーザーがコードを打ち直した場合にも、同じclient_secretが送られます。
これによって、Stripeは同じユーザーであると判断できます。
不正な支払いを防止できるってことですね。
STRIPEのSCA・3Dセキュア対応API
Stripeは3Dセキュアに対応するため、新しくAPIを開発しました。
これに伴い、既存の古いAPIからの移行を推奨しています。
STRIPEのサイトには次のように書かれています。
StripeはSCAの要件を満たせるよう、事前に構築されたカスタマイズ可能なソリューションをご提供しています。
これまでのSCA非対応のAPIを使っていると、SCA施行を開始した銀行から、支払い拒否される可能性が大いにあります。
Stripe provides prebuilt and customizable solutions to help you meet SCA requirements. Integrations that are not SCA-ready, like ones using the Charges API, will see high rates of declines as banks begin enforcing SCA.
*引用元:Stripe Docs
LaravelはCashier10からStripeの新API対応
Laravel側でも、この新しいStripe APIに対応をしています。
Laravelでは、Cashierパッケージを使うと、Stripeと便利に連携できるようになっています。
Cashierは2019年8月、新しいSTRIPE APIに対応するため、バージョン10にアップグレードしました。
このときのLaravelのツイートがこちら。
Cashier10のリリースをお知らせします。
これによって、推奨Stripe APIと、ヨーロッパのSCA規制をサポートできるようになりました。
発者の皆さんのご尽力に感謝します!
We’re happy to announce the release of Cashier 10.0, which provides support for the currently recommended Stripe APIs and European SCA regulations. This is a major upgrade. Thank you to all the hard work by Laravel developer @driesvints! https://t.co/D3IC23wOZs 💰
— Laravel (@laravelphp) August 13, 2019
LaravelとStripe連携で、古いコードが使えなくなった
Laravelも、新しいStripeAPIに対応していて安心。
なのですが、ここで、ひとつ問題がおきます。
Cashierをアップグレードすると、以前のコードのままでは使えない事態が発生します。
また、以前の書き方をそのままとりいれると動かない、といったことも。
わたしも経験しました
SCA対応のStripe APIについては、こちらの文書にリンクがあります。(英語です)
本ブログでも、2020年11月現在、最新版に対応した方法を紹介しています。
今後の変更も要チェック
クレジットカード利用時の認証が厳しくなったことで、決済システムも変化しています。
日本はSCA対象国ではないですが、3Dセキュア化は進んでいます。
今後も、これまでのシステムが使えなくなったり、ルールにあわなくなる、ということが起こりえます。
システムを作っている側は、がんばって対応していかねばなりません。
メンドウですが、必要な変化はチェックしていきましょう^^;
重要な最新動向だけは追っておきたいですね。
本ブログでも、また取り上げていきます。