📑

Stripe Identityを実装する上での4つの注意事項

2024/07/18に公開

本日7月18日、Stripeが日本では長く招待制ベータでサービスしていた本人確認サービス「Stripe Identity」を一般提供開始しました。Stripe Identityは、本人確認を簡単に実装できるサービスで、StripeのSDKを使って、本人確認を行うことができます。

https://stripe.com/jp/identity

私は昨年11月に招待を受けて、実際に運用しているサービスでStripe Identityを導入しました。そこで気づいた実装する上での注意事項がいくつかあったので、その中から4つをピックアップして紹介します。

4つの注意事項

Stripe Identityは、Validation毎の請求になります。ですので、ユーザが本人確認を失敗すれば、プロダクトについての機会損失・ユーザ体験の低下だけではなく、Stripe Identityの請求も発生します。そのため、本人確認を実装する際には、以下の4つの注意事項を押さえておくことが重要です。

https://support.stripe.com/questions/billing-for-stripe-identity

1. ユーザに本人確認用の書類を明示する

Stripe Identityでは、利用可能な本人確認に使う書類を以下のようにユーザに提示しています。

けれど実際、日本では「マイナンバーカード」「運転免許証」「パスポート」「在留証明書」の4つの書類しか利用できません。例えば障がい者手帳は利用できません。いや、確かに障がい者手帳は政府ではなく、都道府県、指定都市又は中核市が発行してるものなので、この表現は正確なのですが、ユーザが区別がついているかは別問題です。

ですので、ユーザがStripe Identityを立ち上げる前に、ユーザに利用できる書類を明示しておくことが重要です。

2. マイナンバーカードは保護ケースから取り出すように案内する

マイナンバーカードの初期配布時には、目隠し・スキミング防止を目的にした保護ケースが用意されていました(現在、配布廃止)。また、いろいろな保護ケースが売りに出されてるので、ユーザがそれを使っている可能性もあります。

ケースにいれたままだと、Stripe Identityの自動検証チェックの書類の分析でエラーが発生する可能性が高くなります。ユーザからすると「顔写真と住所がわかったら十分で、マイナンバー自体はわからなくていいはず」とケースにいれたまま撮影するパターンが多くみられましたので、マイナンバーカードを使う場合は、保護ケースから取り出すように案内することが重要です。

3. 撮影環境の案内をする

多くのユーザは明るい場所で撮影しますが、一部ユーザは「文字が認識できたら本人確認は通るはず」と、暗い環境で撮影を行うことがあります。その場合、Stripe Identityの自動検証チェックの書類の分析でエラーが発生する可能性が高くなります。画質が粗くなるので、何かしらの改ざんを行ってる可能性が高くなります。そりゃそうですよね。

暗くなく、光が反射しない場所で撮影してください

というような案内をいれることが重要です。

4. 検証失敗は即座にユーザに通知しない

これだけやっても、目視ではどう考えても問題ない書類が検証に失敗することがあります。その場合、即座にユーザに通知すると、 ユーザは「なんでだよ!」となる上に、何度も失敗されると都度請求が行われます。ですので、検証成功は即座にユーザに通知することはユーザ体験をあげるために可能ですが、検証失敗の通知は慎重に検討する必要があります。おすすめの方法は、以下のような案内をだすことです。

書類のデータが正しく読み込まれなかったため、検証に時間がかかります。しばらくお待ちください。

その上で、検証スタッフが目視で確認を行い、検証成功にするのか、最終的にInvalidにするのかを決定することをおすすめします。特に現在、検証失敗のエラー通知の種類が少なく、多くの失敗が「unverified_other」で通知されるため、ユーザにも「こう改善して」という案内ができないんですよね。ですので、検証失敗通知の設計は、Stripe Identityを使う上でとても重要です。

https://docs.stripe.com/identity/selfie#document-failure

ちなみに、通知の種類は以下の通りです。

export const translateIdentityStatus = (): Record<string, string> => ({
  processing: '本人確認の検証フローを開始しました。',
  verified: '本人確認のすべてを正常に完了し、本人確認の特典を受け取りました。',
  abandoned: '途中で終了したため、本人確認検証フローは完了しませんでした。再度お試しください。',
  consent_declined: '必要な本人確認確認に対する同意を拒否したため、検証は失敗しました。再度お試しください。',
  country_not_supported: '本人確認をサポートしている国の身分証ではなかったため、検証は失敗しました。再度お試しください。',
  device_not_supported: 'デバイスにカメラ機能がないため、本人確認に失敗しました。再度お試しください。',
  document_expired: '身分証明書は期限切れであるため、本人確認に失敗しました。再度お試しください。',
  document_type_not_supported: '身分証明書がサポート外のため、本人確認に失敗しました。再度お試しください。',
  document_unverified_other: '身分証明書に問題があったため、本人確認に失敗しました。再度お試しください。',
  id_number_insufficient_document_data:
    '身分証明書に確認に必要なデータが含まれていなかったため、本人確認に失敗しました。再度お試しください。',
  id_number_mismatch: '身分証明書のID番号は、要求された身元確認のID番号と一致しなかったため、本人確認に失敗しました。再度お試しください。',
  id_number_unverified_other: '身分証明書のID番号に問題があったため、本人確認に失敗しました。再度お試しください。',
  selfie_document_missing_photo: '身分証明書に、身元確認に必要な写真が含まれていなかったため、本人確認に失敗しました。再度お試しください。',
  selfie_face_mismatch: 'ユーザーの顔は、要求された身元確認の身分証明書の顔と一致しません。再度お試しください。',
  selfie_manipulated: 'ユーザーの顔は、要求された身元確認の身分証明書の顔と一致しません。再度お試しください。',
  selfie_unverified_other: 'ユーザーの顔は、その他の理由で検証されませんでした。再度お試しください。',
  under_supported_age: 'ユーザーは、要求された身元確認の年齢要件を満たしていません。再度お試しください。',
});

まとめ

多くの日本での本人確認サービスが、料金は非公開(資料取り寄せによってはじめて判明)、そして基本料金がかかる中、Stripe Identityの明快に提示された料金、そして従量課金のみというのは魅力的です。ただ、上記のような留意事項もありますので、どのように運用していくかの設計を行うことが重要です。

それではまた。

Discussion