コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
高度なシステムを構築
アプリ内実装を構築
    概要
    Payment Sheet
      アプリ内での決済を受け付け
      カスタムの支払い方法を追加する
      デザインをカスタマイズする
      サーバーで支払いを確定する
      支払い中に支払い詳細を保存する
      将来の支払いを設定する
      カードブランドを絞り込む
    Embedded Payment Element
    アプリ内購入のリンク
    住所を収集
    アメリカとカナダのカード
決済手段
決済手段を追加
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
アプリ内 Elements
決済シナリオ
カスタムの決済フロー
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
他の Stripe プロダクト
Financial Connections
仮想通貨
Climate
ホーム支払いBuild an in-app integrationPayment Sheet

注

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

将来の支払いを設定する

モバイルアプリに支払い情報を保存し、後で顧客に請求する方法をご紹介します。

ページをコピー

Setup Intents API を使用すると、初回の支払いなしで顧客の支払いの詳細を保存することができます。これは、今すぐ顧客をアカウント登録して支払いを設定し、将来顧客がオフラインのときに請求する場合に役立ちます。

この組み込みを使用して、継続支払いを設定したり、または顧客がサービスを受け取った後など、最終金額が後で決定される 1 回限りの支払いを作成したりします。

Card-present transactions

Card-present transactions, such as collecting card details through Stripe Terminal, use a different process for saving the payment method. For details, see the Terminal documentation.

法令遵守

顧客の支払いの詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がお客様のウェブサイトやアプリを使用していないときに請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。支払い方法の保存をどのように計画しているかを示す規約をウェブサイトやアプリに追加し、顧客が許可できるようにします。

支払い方法を保存する場合、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに支払い方法に請求して、以降の購入に備えたオプションとして保存する場合は、この特定の用途について顧客から明示的に同意を収集する必要があります。たとえば、同意を収集するために「今後の使用に備えて支払い方法を保存する」チェックボックスを使用します。

顧客がオフラインのときに請求するには、規約に以下の内容を含める必要があります。

  • 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意
  • 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いなのか、サブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。
  • 支払い金額の決定方法
  • 支払い方法をサブスクリプションサービスに使用する場合は、キャンセルに関するポリシー

これらの規約に関する顧客の書面による同意の記録を必ず保管してください。

注

手動でのサーバー側の確定を使用する必要がある場合、または実装で支払い方法を別途提示する必要がある場合は、代替方法のガイドをご覧ください。

Integrate Stripe’s prebuilt payment UI into the checkout of your iOS app with the PaymentSheet class. See our sample integration on GitHub.

Stripe をセットアップする
サーバー側
クライアント側

まず、Stripe アカウントが必要です。今すぐ登録してください。

サーバー側

この組み込みには、サーバー上に Stripe API と通信するエンドポイントが必要です。公式ライブラリを使用して、サーバーから Stripe API にアクセスします。

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

クライアント側

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

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

  1. In Xcode, select File > Add Package Dependencies… and enter https://github.com/stripe/stripe-ios-spm as the repository URL.
  2. リリースページから最新のバージョン番号を選択します。
  3. StripePaymentSheet 製品をアプリのターゲットに追加します。

注

For details on the latest SDK release and past versions, see the Releases page on GitHub. To receive notifications when a new release is published, watch releases for the repository.

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

注

Mobile Payment Element は、カード、Bancontact。iDEAL、Link、SEPA ダイレクトデビット、Sofort、アメリカの銀行口座を持つ SetupIntents のみをサポートします。

この組み込みでは、3 つの Stripe API オブジェクトを使用します。

  1. SetupIntent (支払い方法設定インテント) は、将来の支払いに備えて顧客の決済手段を設定するという意図を示すオブジェクトです。SetupIntent には、決済プロセス中に顧客に表示される決済手段も含まれています。ダッシュボードの設定から Stripe が決済手段を自動的に取得できるようにすることも、手動で列挙することもできます。

  2. Customer (顧客)。将来の支払いに備えて支払い方法を設定するには、支払い方法を Customer に関連付ける必要があります。顧客がビジネスでアカウントを作成する際に、Customer オブジェクトを作成します。顧客がゲストとして支払いを行う場合は、支払いの前に Customer オブジェクトを作成し、後でこのオブジェクトを顧客のアカウントを表す独自の内部表現と関連付けることができます。

  3. Customer Ephemeral Key (顧客の一時キー) (オプション)。Customer オブジェクトの情報は機密情報であるため、アプリから直接取得することはできません。Ephemeral Key により、SDK に Customer への一時的なアクセス権が付与されます。

セキュリティ上の理由により、アプリでこれらのオブジェクトを作成することはできません。代わりに、サーバー側で以下を行うエンドポイントを追加します。

  1. Customer を取得するか、新規作成する。
  2. Customer の Ephemeral Key を作成する。
  3. Customer ID とともに、SetupIntent を作成する。
  4. SetupIntent の client secret、一時キーの secret、Customer の ID、および貴社の公開可能キーをアプリに返します。

精算時に顧客に表示される支払い方法は、SetupIntent にも含まれています。ダッシュボードの設定から Stripe が支払い方法を自動的に取得できるようにすることも、手動でリスト化することもできます。

支払い方法はダッシュボードで管理できます。Stripe は取引額、通貨、決済フローなどの要素に基づいて、適切な支払い方法が返されるように処理します。

Command Line
curl
# Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -H "Stripe-Version: 2025-05-28.basil" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a SetupIntent curl https://api.stripe.com/v1/setup_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ # In the latest version of the API, specifying the `automatic_payment_methods` parameter # is optional because Stripe enables its functionality by default. -d "customer"="{{CUSTOMER_ID}}" \ -d "automatic_payment_methods[enabled]"=true \

支払い詳細を収集する
クライアント側

メモ

SetupIntent の作成前に Mobile Payment Element を表示するには、インテントを作成する前に支払いの詳細を収集するをご覧ください。

決済画面に Mobile Payment Element を表示するには、Stripe の UI コンポーネントを表示する購入ボタンを追加する必要があります。

アプリの決済画面で、前のステップで作成したエンドポイントから SetupIntent の client secret、Ephemeral Key の secret、Customer ID、公開可能キーを取得します。StripeAPI.shared を使用して公開可能キーを設定し、PaymentSheet を初期化します。

import UIKit import StripePaymentSheet class CheckoutViewController: UIViewController { @IBOutlet weak var checkoutButton: UIButton! var paymentSheet: PaymentSheet? let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint override func viewDidLoad() { super.viewDidLoad() checkoutButton.addTarget(self, action: #selector(didTapCheckoutButton), for: .touchUpInside) checkoutButton.isEnabled = false // MARK: Fetch the SetupIntent client secret, Ephemeral Key secret, Customer ID, and publishable key var request = URLRequest(url: backendCheckoutUrl) request.httpMethod = "POST" let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any], let customerId = json["customer"] as? String, let customerEphemeralKeySecret = json["ephemeralKey"] as? String, let setupIntentClientSecret = json["setupIntent"] as? String, let publishableKey = json["publishableKey"] as? String, let self = self else { // Handle error return } STPAPIClient.shared.publishableKey = publishableKey // MARK: Create a PaymentSheet instance var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "Example, Inc." configuration.customer = .init(id: customerId, ephemeralKeySecret: customerEphemeralKeySecret) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. configuration.allowsDelayedPaymentMethods = true self.paymentSheet = PaymentSheet(setupIntentClientSecret: setupIntentClientSecret, configuration: configuration) DispatchQueue.main.async { self.checkoutButton.isEnabled = true } }) task.resume() } }

顧客が購入ボタンをタップしたら、present を呼び出して PaymentSheet を表示します。顧客が支払いを完了したら、Stripe は PaymentSheet を閉じ、PaymentSheetResult とともに完了ブロックを呼び出します。

@objc func didTapCheckoutButton() { // MARK: Start the checkout process paymentSheet?.present(from: self) { paymentResult in // MARK: Handle the payment result switch paymentResult { case .completed: print("Your order is confirmed") case .canceled: print("Canceled!") case .failed(let error): print("Payment failed: \(error)") } } }

PaymentSheetResult が .completed の場合は、ユーザーに通知します (注文確認画面を表示するなど)。

allowsDelayedPaymentMethods を true に設定すると、アメリカの銀行口座などの 遅延通知型の支払い方法を使用できます。これらの支払い方法では、PaymentSheet が完了した時点では最終的な支払いステータスが判明せず、後になって成功または失敗が確定します。このようなタイプの支払い方法に対応する場合は、注文が確定済みであることを顧客に通知し、支払いが成功した場合にのみ注文のフルフィルメント (商品の発送など) を実行するようにします。

戻り URL を設定する
サーバー側

The customer might navigate away from your app to authenticate (for example, in Safari or their banking app). To allow them to automatically return to your app after authenticating, configure a custom URL scheme and set up your app delegate to forward the URL to the SDK. Stripe doesn’t support universal links.

SceneDelegate.swift
Swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect") func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } let stripeHandled = StripeAPI.handleURLCallback(with: url) if (!stripeHandled) { // This was not a Stripe url – handle the URL normally as you would } }

Additionally, set the returnURL on your PaymentSheet.Configuration object to the URL for your app.

var configuration = PaymentSheet.Configuration() configuration.returnURL = "your-app://stripe-redirect"

保存した支払い方法に後で請求する
サーバー側

法令遵守

顧客の支払いの詳細を保存する際、お客様は適用されるすべての法律、規制、ネットワークの規則に準拠する責任があります。将来の購入に備えて顧客に過去の決済手段を提供する際は、必ず、特定の将来の使用に備えて決済手段の詳細を保存することについての同意を顧客から収集した決済手段をリストアップします。顧客に関連付けられた決済手段のうち、将来の購入用の保存済みの決済手段として顧客に提示できるものと提示できないものを区別するには、allow_redisplay パラメーターを使用します。

購入者にオフセッションで請求する準備ができたら、Customer ID と PaymentMethod ID を使用して、PaymentIntent を作成します。請求する決済手段を見つけるには、顧客に関連付けられた決済手段を一覧表示します。この例ではカードが一覧表示されますが、サポートされているすべてのタイプを一覧表示できます。

Command Line
cURL
curl -G https://api.stripe.com/v1/payment_methods \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d type=card

Customer ID と PaymentMethod ID を取得したら、支払いの金額と通貨を使用して PaymentIntent を作成します。その他のいくつかのパラメーターを設定して、オフセッションの支払いを行います。

  • off_session を true に設定して、支払いの試行時に購入者が決済フローを実行中でないことと、カード発行会社、銀行、その他の決済機関などのパートナーからの認証リクエストに対応できないことを示します。決済フローの実行時にパートナーが認証をリクエストした場合、Stripe は前回のオンセッション取引の顧客情報を使用して免除をリクエストします。免除の条件を満していない場合は PaymentIntent からエラーが返されることがあります。
  • PaymentIntent の confirm プロパティの値を true に設定します。これにより、PaymentIntent が作成されると直ちに確定されます。
  • payment_method を PaymentMethod の ID に設定し、customer を Customer の ID に設定します。
Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d amount=1099 \ -d currency=usd \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d return_url="https://example.com/order/123/complete" \ -d off_session=true \ -d confirm=true

組み込みをテストする

決済手段シナリオテスト方法
クレジットカードカードの設定は成功し、認証は必要ありません。クレジットカード番号 4242 4242 4242 4242 と、任意の有効期限、セキュリティーコード、郵便番号を使用してクレジットカードフォームに入力します。
クレジットカードこのカードは初期設定時に認証が必要であり、それ以降は支払いに成功します。クレジットカード番号 4000 0025 0000 3155 と、任意の有効期限、セキュリティーコード、郵便番号を使用してクレジットカードフォームに入力します。
クレジットカードこのカードは、初期設定時も、以降の支払いでも認証が必要です。クレジットカード番号 4000 0027 6000 3184 と、任意の有効期限、セキュリティーコード、郵便番号を使用してクレジットカードフォームに入力します。
クレジットカード設定中にカードは拒否されます。クレジットカード番号 4000 0000 0000 9995 と、任意の有効期限、セキュリティーコード、郵便番号を使用してクレジットカードフォームに入力します。

オプションApple Pay を有効にする

オプションカードスキャンを有効にする

オプションシートをカスタマイズする

オプションUI で支払いを完了する

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