コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けリソース
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
高度なシステムを構築
アプリ内実装を構築
決済手段
決済手段を追加
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
アプリ内 Elements
決済シナリオ
複数の通貨を扱う
カスタムの決済フロー
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
決済にとどまらない機能
会社を設立する
仮想通貨
Financial Connections
Climate
不正利用について
Radar の不正防止
不審請求の申請の管理
本人確認
    概要
    始める
    本人確認書類を確認
    確認結果を処理
    確認結果へのアクセス
    確認結果を表示
    確認フロー
    検証チェック
    API について
    確認セッション
    本番環境へ移行
    本番環境への移行前
    サポートするユースケース
    Identity に関する説明
ホーム支払いVerify identities

注

このページはまだ日本語ではご利用いただけません。より多くの言語で文書が閲覧できるように現在取り組んでいます。準備が整い次第、翻訳版を提供いたしますので、もう少しお待ちください。

ユーザーの本人確認書類を確認する

セッションを作成して、本人確認書類を収集します。

このガイドでは、Stripe Identity を使用して、身分証明書を安全に収集し、確認する方法について説明します。

はじめに

  1. 本番環境利用の申請を行う。
  2. Stripe Identity 申請書にご記入ください。
  3. (オプション) ブランディング設定ページでブランド設定をカスタマイズする。

 

注

Identity iOS SDK を利用するには、Identity 設定ページにアクセスして、有効にするをクリックします。

iOS でユーザーの本人確認を行うには、自社のアプリケーションに確認画面を表示します。このガイドでは、以下の手順を説明します。

  1. Stripe を設定します。
  2. サーバーエンドポイントを追加します。
  3. 確認画面を表示します。
  4. 確認イベントを処理します。

このガイドの手順は、サンプルアプリ と サンプルバックエンドサーバー で完全に実装されています。

設定
サーバー側
クライアント側

注

この SDK を Stripe Identity サービスで使用する場合、この SDK を改変してはいけません。Stripe の書面による承認を得ずに、改変された SDK を Stripe Identity サービスで使用することは Stripe との契約に違反することになり、Stripe アカウントが閉鎖される場合があります。

SDK をインストールする クライアント側

Stripe iOS SDK はオープンソースです。詳細なドキュメントが提供されており、iOS 13.0 以降をサポートするアプリと互換性があります。

SDK をインストールするには、以下のステップに従います。

  1. Xcode で、File (ファイル) > Add Package Dependencies… (パッケージ依存関係を追加) を選択し、リポジトリー URL として https://github.com/stripe/stripe-ios-spm を入力します。
  2. リリースページから最新のバージョン番号を選択します。
  3. StripeIdentity 製品をアプリのターゲットに追加します。

注

SDK の最新リリースおよび過去バージョンの詳細については、GitHub の Releases (リリース) ページをご覧ください。リポジトリのリリースをウォッチして、新しいリリースの公開時に通知を受け取ることも可能です。

カメラの使用許可を設定する クライアント側

Stripe Identity iOS SDK では、デバイスのカメラにアクセスして本人確認書類をキャプチャーする必要があります。アプリがカメラの使用許可をリクエストできるようにするには、以下の手順に従います。

  1. Xcode で、プロジェクトの Info.plist を開きます。
  2. NSCameraUsageDescription キーを追加します。
  3. アプリにカメラへのアクセスの許可が必要な理由をユーザーに説明する文字列値を追加します。

このアプリは、カメラを使用して本人確認書類の写真を撮影します。

カメラ認証のリクエストについて、詳細は Apple のドキュメントを参照してください。

サーバーに Stripe をインストールする サーバー側

まず、Stripe アカウントを登録します。

次に、アプリケーションから Stripe API へアクセスするためにライブラリをインストールします。

Command Line
Ruby
Python
PHP
Java
Node
Go
.NET
No results
# Available as a gem sudo gem install stripe
Gemfile
Ruby
Python
PHP
Java
Node
Go
.NET
No results
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

サーバーエンドポイントを追加する
サーバー側

VerificationSession を作成する

VerificationSession は、本人確認をプログラムで示したものです。確認のタイプに関する詳細 (実行するチェックの内容など) が含まれています。確認済みの出力フィールドを拡張して、確認済みのデータの詳細を表示できます。

システムをシンプルにする

本人確認フローには、再利用可能な設定を使用できます。この設定は、verification_flow パラメーターに渡されます。詳しくは、本人確認フローガイドをご確認ください。

VerificationSession を作成するには、サーバー側のエンドポイントが必要です。サーバー側で VerificationSession を作成することにより、悪意のあるユーザーによる確認オプションの上書き、およびお客様のアカウントでの支払いの処理の偽装を防止できます。セッションのメタデータにユーザー参照を含めるか、データベースにセッション ID を保存することで、このエンドポイントに認証を追加します。

セキュリティ上の理由から、モバイルクライアントから直接アクセス可能な VerificationSession を作成しないでください。代わりにお客様のサーバーが SDK に一時キーを提供します。このキーは、VerificationSession への制限付きアクセス権が付与された一時的な API キーです。一時キーは、セッションとして考えることができ、そのセッションの間は SDK が特定の VerificationSession オブジェクトを取得して更新することが許可されます。

VerificationSession と一時キーを作成したら、その VerificationSession の ID と一時キーシークレットをクライアントに送信し、書類のアップロード画面を表示します。

注

このエンドポイントの実行中の実装を こちら で迅速なテスト用に見つけることができます。

server.js
Node
Ruby
Python
PHP
Java
Go
.NET
No results
// Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')(
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
); // In the route handler for /create-verification-session: // Authenticate your user. // Create the session. const verificationSession = await stripe.identity.verificationSessions.create({ type: 'document', provided_details: { email: 'user@example.com', }, metadata: { user_id: '{{USER_ID}}', }, }); // Create an ephemeral key for the VerificationSession const ephemeralKey = await stripe.ephemeralKeys.create( {verification_session: verificationSession.id}, {apiVersion: '2025-07-30.basil'} ); // Return only the ID and ephemeral key secret to the frontend. const verficationSessionId = verificationSession.id; const ephemeralKeySecret = ephemeralKey.secret;

注意

一時キーシークレットは VerificationSession にバインドされており、これによりアプリは機密データである本人確認情報 (書類や顔写真のファイルなど) を収集できるようになります。使用できるのは 1 回限りで、1 時間後に有効期限が切れます。一時キーシークレットは、記録したり、URL に埋め込んだり、対象のユーザー以外に公開したりしないでください。一時キーシークレットを返すエンドポイントで必ず TLS を有効化します。本人確認の設定や結果の漏洩を防止するため、一時キーシークレットのみをアプリに送信してください。

Web サーバー (localhost:4242 など) を起動し、curl で VerificationSession を作成する POST リクエストを送信して、エンドポイントをテストします。

Command Line
curl -X POST -is "http://localhost:4242/create-verification-session" -d ""

端末に次のようなレスポンスが表示されます。

Command Line
HTTP/1.1 200 OK Content-Type: application/json { id: "vs_QdfQQ6xfGNJR7ogV6", ephemeral_key_secret: "ek_YWNjdF8xRm..." }

確認画面を表示する
クライアント側

確認画面を表示するボタンをセットアップします。このボタンをタップすると、ユーザーはパスポート、運転免許証、または国民 ID をキャプチャーしてアップロードできます。

開始する前に、確認ページで以下を行う必要があります。

  • 本人確認が必要な理由をユーザーに説明します。
  • Stripe の UI を表示する本人確認ボタンを含めます。

ボタンを追加する

まず、タップアクションと読み込みインジケータを持つ、ボタン付きのビューコントローラーを作成します。

VerifyViewController.swift
import UIKit class VerifyViewController: UIViewController { @IBOutlet weak var verifyButton: UIButton! @IBOutlet weak var activityIndicator: UIActivityIndicatorView! }

StripeIdentity SDK をインポートする

StripeIdentity をビューコントローラーに追加します。

VerifyViewController.swift
import UIKit import StripeIdentity class VerifyViewController: UIViewController { @IBOutlet weak var verifyButton: UIButton! @IBOutlet weak var activityIndicator: UIActivityIndicatorView! }

確認ボタンにアクションを追加する

VerificationSession を作成するためのボタンとエンドポイントが準備できたため、次にボタンを変更して、ボタンがタップされたら、書類のアップロード画面が表示されるようにします。

次のためのコールを追加します。

  • エンドポイントから、VerificationSession ID と一時キーシークレットを取得します。
  • ブランドロゴで IdentityVerificationSheet をインスタンス化し、ユーザーに提示します。
  • VerificationResult で、顧客が本人確認フローを完了したかを把握できます。
VerifyViewController.swift
import UIKit import StripeIdentity class VerifyViewController: UIViewController { @IBOutlet weak var verifyButton: UIButton! @IBOutlet weak var activityIndicator: UIActivityIndicatorView! override func viewDidLoad() { super.viewDidLoad() verifyButton.addTarget(self, action: #selector(didTapVerifyButton), for: .touchUpInside) } @objc func didTapVerifyButton() { // Disable the button while the request is made verifyButton.isEnabled = false activityIndicator.startAnimating() // Make request to your verification endpoint var urlRequest = URLRequest(url: URL(string: "https://{{YOUR_SERVER_BASE_URL}}/create-verification-session")!) urlRequest.httpMethod = "POST" let task = URLSession.shared.dataTask(with: urlRequest) { [weak self] data, response, error in DispatchQueue.main.async { [weak self] in // Re-enable button self?.verifyButton.isEnabled = true self?.activityIndicator.stopAnimating() guard error == nil, let data = data, let responseJson = try? JSONDecoder().decode([String: String].self, from: data), let verificationSessionId = responseJson["id"], let ephemeralKeySecret = responseJson["ephemeral_key_secret"] else { // Handle error print(error as Any) return } self?.presentVerificationSheet(verificationSessionId: verificationSessionId, ephemeralKeySecret: ephemeralKeySecret) } } task.resume() } func presentVerificationSheet(verificationSessionId: String, ephemeralKeySecret: String) { // Configure a square brand logo. Recommended image size is 32 x 32 points. let configuration = IdentityVerificationSheet.Configuration( brandLogo: UIImage(named: "{{YOUR_BRAND_LOGO}}")! ) // Instantiate and present the sheet let verificationSheet = IdentityVerificationSheet( verificationSessionId: verificationSessionId, ephemeralKeySecret: ephemeralKeySecret, configuration: configuration ) verificationSheet.present(from: self, completion: { result in switch result { case .flowCompleted: // The user has completed uploading their documents. // Let them know that the verification is processing. print("Verification Completed!") case .flowCanceled: // The user did not complete uploading their documents. // You should allow them to try again. print("Verification Canceled!") case .flowFailed(let error): // If the flow fails, you should display the localized error // message to your user using error.localizedDescription print("Verification Failed!") print(error.localizedDescription) } }) } }

確認画面をテストする

確認ボタンで書類のアップロード画面が表示されるかどうかテストします。

  • 本人確認ボタンをタップします。
  • エラーメッセージが表示されないことを確認します。

構築したシステムが機能しない場合:

  1. VerificationSession ID と一時キーシークレットを取得する場所にブレークポイントを配置します。
  2. ネットワークエラーがないこと、およびエンドポイントが VerificationSession ID と一時キーシークレットを返すことを確認します。

確認イベントを処理する

書類確認は通常、ユーザーがサイトにリダイレクトするとすぐに完了し、API からすぐに結果を取得できます。まれに、ドキュメント検証の準備ができておらず、非同期的に続行する必要があります。このような場合、検証結果の準備ができたときに Webhook を通じて通知されます。処理が完了すると、VerificationSession のステータスが processing から verified に変わります。

セッションのステータスに変化があると、Stripe は以下のイベントを送信します。

イベント名説明次のステップ
identity.verification_session.verifiedすべての本人確認チェックの処理が完了し、確認のすべてが成功しました。アプリケーションで関連するアクションをトリガーします。
identity.verification_session.requires_inputすべての本人確認チェックの処理が完了し、少なくとも 1 つの確認が失敗しました。アプリケーションで関連するアクションをトリガーするとともに、ユーザーに本人確認の再試行を許可できます。

Webhook ハンドラを使用してこれらのイベントを受信し、確定メールの送信、自社データベース内の確認結果の更新、アカウント登録ステップの完了などのアクションを自動化します。ダッシュボードに確認イベントを表示することもできます。

イベントを受信して、ビジネスアクションを実行する

コード使用

Webhook ハンドラを構築してイベントをリッスンし、非同期型のカスタムの確認フローを作成します。Stripe CLI を使用して、ローカルで Webhook の組み込みのテストとデバッグを行います。

カスタム Webhook を作成する

コードなし

ダッシュボードを使用してすべての本人確認を表示し、収集されたデータを調査して、確認の失敗について把握します。

ダッシュボードでテストの確認を表示する

このページはお役に立ちましたか。
はいいいえ
  • お困りのことがございましたら 、サポートにお問い合わせください。
  • 早期アクセスプログラムにご参加ください。
  • 変更ログをご覧ください。
  • ご不明な点がございましたら、お問い合わせください。
  • LLM ですか?llms.txt を読んでください。
  • Powered by Markdoc