# インドの継続支払い

カードと UPI の RBI e-mandate に対応するように、連携を更新する方法をご確認ください。

> 規制では「継続課金」と記載されていますが、ネットワークは_あらゆる_オフセッション、つまり加盟店主導の取引を対象と見なしており、弊社も同様です。

インド準備銀行 (RBI) は、インドで発行されたカードおよび [UPI](https://docs.stripe.com/payments/upi.md) などのその他の決済手段での継続課金に対して追加のセキュリティ対策を導入する[指令](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=11668)を発行しました (その後、[2020 年 12 月](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=12002)と [2021 年 3 月](https://www.rbi.org.in/Scripts/NotificationUser.aspx?Id=12051&Mode=0)に改正)。これらの対策には以下が含まれます:

- 決済代行業者は、カードの場合は *3D セキュア認証 (3DS)* (3D Secure (3DS) provides an additional layer of authentication for credit card transactions that protects businesses from liability for fraudulent card payments)、UPI の場合は UPI 用 PIN などの追加要素認証 (AFA) を使用する 1 回限りのプロセスを通じて、顧客を登録し、*同意書* (An e-mandate is a form of authorization provided by cardholders to issuing banks that grants permission for recurring payments on their card. Any recurring payment arrangements (for example, monthly subscriptions to OTT services) need an associated e-mandate to be successful. The e-mandate needs to be registered and then validated through AFA, such as 3DS)を作成する必要があります。
- 顧客には請求が行われる少なくとも 24 時間前に通知する必要があり、取引をオプトアウトできるようにしなければなりません。
- 15,000 INR (または他の通貨での相当額) を超える継続取引では、毎回 AFA を使用する必要があります。

インドを拠点とする Stripe ユーザーまたは海外 (インド以外) の Stripe ユーザーの場合、顧客がインドのカードまたは UPI を次の用途で使用していると、事業に影響があります。

- *オフセッション* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information)支払い
- `collection_method` が `charge_automatically` に設定されているサブスクリプションまたは請求書

> 同意書のカスタマイズオプションを含む、UPI 固有の継続課金の詳細については、[継続課金 (UPI AutoPay)](https://docs.stripe.com/payments/upi/upi-autopay.md) を参照してください。

## 電子同意書を使用する支払いの仕組み

Stripe はパートナープラットフォームと連携して、同意書の登録と顧客への引き落とし前通知の送信に対応しています。これはカード決済と UPI 決済の両方に適用されます。

> 現時点では、メキシコの Stripe ユーザーは電子同意書をご利用いただけません。

Stripe との実装方法によっては、同意書を設定するために Stripe に追加情報を送信する必要がある場合があります。顧客は同意書を登録するために AFA (カードの場合は 3DS、UPI の場合は UPI PIN) を完了する必要があります。

サブスクリプションの後続のオフセッション決済または自動引き落としには、大きな変更があります。顧客は、実際の決済の少なくとも 24 時間前に、正確な引き落とし金額が記載された引き落とし前通知を受け取る必要があります。引き落とし前通知には、決済に関する情報と、同意書をキャンセルするためのオプションが含まれます。カード決済の場合、決済金額が 15,000 INR または同意書の最大金額を超えると、引き落とし前通知に、AFA (3DS) を実行して決済をオーソリするためのリンクが含まれます。UPI は現在、15,000 INR を超える金額の継続取引に対応していません。

カード決済の場合、Stripe はパートナープラットフォームと連携しているため、決済リクエストを受信してから 26 時間待って顧客に請求します (Stripe は下流の問題の可能性に備えてバッファを追加しており、そのため 26 時間前の通知が必要です)。つまり、Stripe はカード決済の回収を 26 時間遅らせます。UPI 決済の場合、Stripe は引き落とし前通知を送信し、1 日後に顧客に請求します。

オフセッションの支払いの同意書がない場合、支払いは拒否されます。

## 実装

### 引き落としの事前通知

オフセッション PaymentIntent が [confirmed](https://docs.stripe.com/api/payment_intents/confirm.md) されると、銀行が顧客に引き落とし前通知を送信します。PaymentIntent は引き落とし前通知期間 (26 時間) の全体を通じて `processing` 状態に遷移し、その間はキャンセルできません。

```json
{
  "object": "payment_intent",
  ...
  "processing": {
    "card": {
      "customer_notification": {
        "approval_requested": true,
        "completes_at": 1677307005
      }
    },
    "type": "card"
  },
  ...
  "status": "processing",
  ...
}
```

[processing.card.customer_notification.approval_requested](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-processing-card-customer_notification-approval_requested) が `true` の場合、顧客は銀行から送信された引き落とし前通知を使用して決済を認証する必要があります。

[processing.card.customer_notification.completes_at](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-processing-card-customer_notification-completes_at) 属性は、Stripe が決済手段に請求を試みる時刻を指定します。決済を正常に処理するために顧客の承認が必要な場合、顧客は指定された時刻までに決済を認証する必要があります。

### エラーおよび拒否コード

以下のシナリオではエラー[コード](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code) が返されます。

| エラーコード | 説明 |
| --- | --- |
| `payment_intent_mandate_invalid` | 無効な同意書を使用して継続支払いを試行するとこのコードが返されます。支払いを試行する前に同意書のステータスを確認することで、これを防ぐことができます。 |
| `india_recurring_payment_mandate_canceled` | 無効な同意書を使用して継続支払いを試行するとこのコードが返されます。この時点で同意書がキャンセルされていることのみが明らかな場合に、発生する可能性があります。 |
| `processing_error` | (通常は一時的な) 処理中のエラーが見つかると、このコードが返されます。 |

電子同意書では、特定の[拒否コード](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-last_payment_error-decline_code)に、[一般的なシナリオ](https://docs.stripe.com/declines/codes.md)よりも具体的な説明が含まれる可能性が高くなります。

| 拒否コード | 説明 |
| --- | --- |
| `transaction_not_approved` | 顧客が自動引き落としの権限を一時停止したか、必要な時点で支払いを認証していない場合に、後続の支払いを試行するとこのコードが返されます。 |

## テスト

これらの[テストカード番号](https://docs.stripe.com/testing.md#testing-interactively)を使用して、さまざまなカード同意書シナリオをシミュレーションできます。

*サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)では、オフセッション PaymentIntent が `processing` ステータスから移行するのに約 15 分かかります。初回支払いのオンセッション PaymentIntent が `processing` ステータスになることはありません。

#### クレジットカード番号

| 番号 | シナリオ |
| --- | --- |
| 4000003560000123 | 同意書の正常な設定と更新をシミュレーションします。 |
| 4000003560000297 | 任意の金額の同意書に対するオフセッション決済について、顧客がキャンセルまたは一時停止のための引き落とし前通知を受け取るシナリオをシミュレーションします。 |
| 4000003560000248 | 任意の金額の同意書に対するオフセッション決済中に、銀行が顧客への引き落とし前通知の送信に失敗するシナリオをシミュレーションします。 |
| 4000003560000263 | 顧客が任意の金額の同意書をキャンセルするシナリオをシミュレーションします。 |

#### PaymentMethods

| PaymentMethod | シナリオ |
| --- | --- |
| `pm_card_indiaRecurringMandateSetupAndRenewalsSuccess` | 同意書の正常な設定と更新をシミュレーションします。 |
| `pm_card_indiaRecurringPaymentFailureAfterPreDebitNotification` | 任意の金額の同意書に対するオフセッション決済のキャンセルまたは一時停止のために、顧客が事前引き落とし通知を受け取るシナリオをシミュレーションします。 |
| `pm_card_indiaRecurringPaymentFailureUndeliveredDebitNotification` | 任意の金額の同意書に対するオフセッション決済中に、銀行が顧客への引き落とし前通知の送信に失敗するシナリオをシミュレーションします。 |
| `pm_card_indiaRecurringPaymentFailureCanceledMandate` | 顧客が任意の金額の同意書をキャンセルするシナリオをシミュレーションします。 |

### 同意書の設定失敗をシミュレートする

> #### API バージョン要件
> 
> This simulation is available for API versions `2026-09-30.endive` and later.

実装でインドの継続支払いの同意書設定の失敗をどのように処理するかをテストするには、テスト環境で以下のカード番号を使用し、ローカルパートが以下のパターンのいずれかに一致する請求先メールアドレスを指定します。パターンには、任意のプレフィックスとドメインを指定できます。
4000003560000032
| 請求先メールアドレスのパターン | 無効の理由 |
| --- | --- |
| `{prefix}issuer_not_supported@{domain}` | `issuer_not_supported` |
| `{prefix}currency_not_supported@{domain}` | `currency_not_supported` |
| `{prefix}card_not_supported@{domain}` | `card_not_supported` |
| `{prefix}processing_error@{domain}` | `processing_error` |
| `{prefix}undetermined@{domain}` | `undetermined` |
| `{prefix}canceled@{domain}` | `canceled` |
| `{prefix}expired@{domain}` | `expired` |

たとえば、`issuer_not_supported` の理由をシミュレートするには、請求先メールアドレスとして `customer_issuer_not_supported@example.com` を使用します。作成された同意書は `inactive` ステータスになり、選択した [`inactive_reason`](https://docs.stripe.com/api/mandates/object.md#mandate_object-payment_method_details-card-india-inactive_reason) が設定されます。請求先メールアドレスがこれらのパターンに一致しない場合、カードは通常のテスト環境のフローに従います。

## 制限事項

以下の制限事項にご注意ください。

- Stripe は、2021 年 10 月 1 日以降に作成されたサブスクリプションでのみ同意書の自動作成を試みます。それより前に作成されたサブスクリプションがある場合は、サブスクリプションをキャンセルして新しいサブスクリプションを作成して、同意書が作成されるようにします。
- [Charges](https://docs.stripe.com/api/charges.md)および [Sources](https://docs.stripe.com/api/sources.md) API を使用して同意書を作成することはできません。
- INR 以外の通貨のサブスクリプションでは、サブスクリプションの作成時にインドの決済手段が顧客に関連付けられている場合にのみ、同意書が登録されます。決済手段なしで INR 以外のサブスクリプションを作成し、後からインドのカードを追加しても、同意書は作成されません。同意書を適切に作成するには、サブスクリプションを作成する前にインドの決済手段を関連付けてください。
- 既存の同意書をサブスクリプションに渡すことはできません。
- 同意書はキャンセルや更新ができません。
- UPI は現在、15,000 INR を超える継続取引に対応していません。
