# 支払い後に支払い情報を保存する

対面支払いを受け付け、顧客が不在のときに使用するための支払い情報を保存します。

> #### Accounts v2 API に対応する
> 
> Terminal SDK は*顧客設定のアカウント* (Account configurations represent role-based functionality that you can enable for accounts, such as merchant, customer, or recipient) に対応していません。対応しているのは `Customer` オブジェクトのみです。顧客コードがすべてサーバー側にあり、SDK を使用していない場合は、Accounts v2 API で Terminal を使用できます。

Stripe Terminal を使用すると、店頭購入の決済の詳細を保存できます。成功した `card_present` 決済では、再利用可能な `card` の `PaymentMethod` が `generated_card` 属性で返されます。ユースケースには次のようなものがあります。

- ジムの顧客が初回セッションと会員制サブスクリプションの支払いを対面で行います。取引により、将来のメンバーシップの自動更新に使用する `generated_card` が設定されます。
- 衣料品店の顧客が、レジで購入するときにメールアドレスを提供します。取引により、顧客レコードと、関連付けられた保存済み `generated_card` が作成されます。これにより、顧客が後でその店のウェブサイトにログインし、同じカードを使用して注文できます。

> 初回の対面決済はカード提示取引です。`generated_card` を使用して行われた後続の支払いはすべてカード非提示 (CNP) 取引であり、カード提示取引で利用できる機能 (*ライアビリティシフト* (With some 3D Secure transactions, the liability for fraudulent chargebacks (stolen or counterfeit cards) shifts from you to the card issuer)や [料金体系](https://stripe.com/terminal#pricing)など) は後続の支払いには適用されません。

# iOS


## 顧客を作成する

将来の決済に備えて決済手段を設定するには、顧客を表すオブジェクトに関連付ける必要があります。顧客がアカウントを作成したとき、または初めて取引したときに、Accounts v2 API を使用して顧客設定の [Account](https://docs.stripe.com/api/v2/core/accounts/create.md) オブジェクト、または Customers API を使用して [Customer](https://docs.stripe.com/api/customers/create.md) オブジェクトを作成します。

#### Accounts v2

```curl
curl -X POST https://api.stripe.com/v2/core/accounts \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview" \
  --json '{
    "contact_email": "jenny.rosen@example.com",
    "display_name": "Jenny Rosen",
    "configuration": {
        "customer": {}
    },
    "include": [
        "configuration.customer"
    ]
  }'
```

作成に成功すると、顧客が設定した [Account](https://docs.stripe.com/api/v2/core/accounts/object.md#v2_account_object-configuration-customer) オブジェクトが返されます。オブジェクトの `id` を確認し、その値を後で取得できるようにデータベースに保存します。

#### Customers v1

```curl
curl https://api.stripe.com/v1/customers \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "name=Jenny Rosen" \
  --data-urlencode "email=jennyrosen@example.com"
```

作成に成功すると、[Customer](https://docs.stripe.com/api/customers/object.md) オブジェクトが返されます。オブジェクトの `id` を確認し、その値を後で取得できるようにデータベースに保存します。

これらの顧客は、ダッシュボードの[顧客](https://dashboard.stripe.com/customers)ページで見つけることができます。

## PaymentIntent を作成する

- [PaymentIntent を作成する](https://docs.stripe.com/api/payment_intents/create.md)

`PaymentIntent` の作成時に [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) の値を指定して、`generated_card` をリクエストします。顧客が決済フロー内にいるときにのみ決済手段を再利用する場合は、`on_session` を使用します。それ以外の場合は、`off_session` を使用します。

#### Accounts v2

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}" \
  -d setup_future_usage=off_session \
  -d amount=1000 \
  -d currency=usd \
  -d "allowed_payment_method_types[]=card_present"
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d setup_future_usage=off_session \
  -d amount=1000 \
  -d currency=usd \
  -d "allowed_payment_method_types[]=card_present"
```

> Visa、Mastercard、アメリカン・エキスプレス、Discover、ブランド提携の eftpos、ブランド提携の Interac、ブランド提携の girocard のカードは、タイプ `card` として保存できる `card_present` 決済手段としてサポートされています。

## 決済手段を収集・処理する

> この機能には、iOS SDK v4.3.0 以降が必要です。

> #### 顧客向け Terminal SDK サポート
> 
> Terminal SDK を使用してクライアント側で `PaymentIntent` を作成および管理する場合は、`Customer` オブジェクトを使用する必要があります。Terminal SDK は Accounts v2 API に対応していません。

- [collectPaymentMethod (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)collectPaymentMethod:delegate:completion:)

顧客が支払う準備ができ、[決済手段の詳細の保存に同意](https://docs.stripe.com/terminal/features/saving-payment-details/save-after-payment.md#compliance)したら、[allow_redisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、`collectPaymentMethod` コールに渡します。値は、顧客の決済フローで決済手段が表示される頻度を示します。

#### Swift

```swift


import UIKit
import StripeTerminal

class PaymentViewController: UIViewController, ReaderDisplayDelegate {
    // Label for displaying messages from the card reader
    let readerMessageLabel = UILabel(frame: .zero)
    var collectCancelable: Cancelable? = nil

    // ...

    // Action for a "Subscribe" button
    func subscribeAction() throws {
        let params = try PaymentIntentParametersBuilder().setCustomer(""{{CUSTOMER_ID}}"").build()
        Terminal.shared.createPaymentIntent(params) { createResult, createError in
            if let error = createError {
                print("createPaymentIntent failed: \(error)")
            } else if let paymentIntent = createResult {
                print("createPaymentIntent succeeded")
                let config = try CollectConfigBuilder().setAllowRedisplay(AllowRedisplay.always).build()
                self.collectCancelable = Terminal.shared.collectPaymentMethod(paymentIntent, config) { collectResult, collectError in
                    if let error = collectError {
                        print("collectPaymentMethod failed: \(error)")
                    } else if let collectPaymentMethodPaymentIntent = collectResult {
                        print("collectPaymentMethod succeeded")
                        // ... Confirm the PaymentIntent
                        Terminal.shared.confirmPaymentIntent(collectPaymentMethodPaymentIntent) { confirmResult, confirmError in
                            if let error = confirmError {
                                print("confirmPaymentIntent failed: \(error)")
                            } else if let confirmedPaymentIntent = confirmResult {
                                print("confirmPaymentIntent succeeded")
                            }
                        }
                    }
                }
            }
        }
    }
}
```

## generated_card にアクセスする

今後の利用に対応する決済手段で決済が成功すると、`PaymentIntent` が `requires_capture` または `succeeded` の状態で返されます。`PaymentIntent` の [latest_charge](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) プロパティを展開し、[payment_method_details.card_present](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present) を確認することで、[generated_card](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-generated_card) 決済手段を取得できます。`PaymentIntent` の作成時に顧客の ID を渡した場合、再利用可能な `PaymentMethod` は顧客に自動的に関連付けられます。それ以外の場合は、別の呼び出しで[手動で関連付けることができます](https://docs.stripe.com/api/payment_methods/attach.md)。

[PaymentIntent.latest_charge](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-latest_charge) に `generated_card` の値が含まれていることを必ず確認してください。デジタルウォレットによる決済、単独ブランドの Interac、eftpos、girocard によるカード決済などの一部の決済では、生成されたカードが作成されない場合があります。このような状況が発生し、再利用可能な決済手段が必要な場合、次の 2 つのオプションがあります。

- [支払いを受けずに決済手段を保存する](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md)フローを使用して、別の決済手段を保存するように顧客に求めます。
- 対面決済を返金し、取引が失敗したことを示し、顧客に別の決済手段を使用するように指示します。

## モバイルウォレットに関する考慮事項

保存済みのモバイルウォレットは、定期的なサブスクリプション決済など、顧客に代わって開始する [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) 決済にのみ使用できます。デジタルウォレットの決済手段を保存すると、`generated_card` には、特定の使用上の考慮事項を示すために `allow_redisplay=limited` が設定されます。

モバイルウォレットへの請求を試みる場合は、`PaymentIntent` を確定するときに `off_session` を true に設定します。顧客が決済フローにいる場合は、代わりに適切なモバイルウォレット連携を使用して、顧客に決済手段の選択を求める必要があります。

## 法令遵守

顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。

決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。

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

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

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

