# Stripe Billing を使用してCommercetools のサブスクリプションを有効にする Commercetools 製品のサブスクリプションを有効にするために、コンポーザブルコマースの Stripe アプリを設定します。 > このガイドは、コンポーザブルコマース向けの Stripe アプリにのみ適用され、決済アプリの導入には対応していません。 Commercetools の加盟店センターの商品カタログセクションで必要な属性とバリアントを定義することで、任意の Commercetools 商品の[サブスクリプション](https://docs.stripe.com/api/subscriptions.md)を有効にできます。顧客がサブスクリプション商品を購入すると、統合により Stripe Billing を使用して、その注文に対する継続支払いを登録します。Stripe はこのサブスクリプションを管理し、Commercetools のサブスクリプション設定に基づいて決済の回収を定期的に試行します。決済が失敗した場合、Stripe は顧客に通知して請求先情報の更新を依頼できます。これは [サブスクリプションとメールの設定](https://dashboard.stripe.com/settings/billing/automatic)で設定できます。決済が成功すると、ウェブサイトは Stripe から [webhook](https://docs.stripe.com/webhooks.md) 通知を受け取ります。モジュールは、更新のたびに Commercetools 内で新しい注文を自動的に作成します。このアプリは、個々の継続サブスクリプション商品の配送料と税額を各イテレーションの前に再計算します。 ## Before you begin - コンポーザブルコマースの Stripe 決済アプリをインストールしました。 - Stripe アカウントで Stripe Billing が有効になっています。 - 関連する商品とそのバリエーションは、payment-app-subscription-information というアプリによって生成された商品タイプを使用して作成しました。 - [Webhook エンドポイントは、次のイベントを](https://docs.stripe.com/webhooks.md#example-endpoint)処理します。 - `invoice.paid` - `invoice.payment_failed` ![](https://b.stripecdn.com/docs-statics-srv/assets/stripe-composable-subscription-variants.25d631216cf8d4e5e31f75784f4a6cb6.png) 製品バリエーションの設定 ## サブスクリプションを有効化および設定する方法 [サブスクリプション](https://docs.stripe.com/subscriptions.md)は、継続商品が Commercetools ストアフロントで公開されると自動的に有効になります。商品は Commercetools 加盟店センターで 1 回限りおよび継続として設定されます。商品バリアントをサブスクリプションとしてマークするには、**payment-app-subscription-information** カスタムタイプを適用し、以下のフィールドを定義します。 | フィールド | 説明 | | ------------------------------------- | ------------------------------------------------------------------- | | `description` | サブスクリプションの説明 | | `recurring_interval` | 請求の頻度を定義します (`day`、`week`、`month`、`year`) | | `recurring_interval_count` | 請求間の間隔数を指定します | | `off_session` | サブスクリプションをオフセッションで使用できるかどうか | | `collection_method` | 決済回収方法 (`charge_automatically` または `send_invoice`) | | `days_until_due` | 請求書の期日までの日数 (オプション) (回収方法が `send_invoice` の場合にのみ適用) | | `cancel_at_period_end` | 現在の期間の終了時にキャンセルするオプションのフラグ | | `cancel_at` | サブスクリプションをキャンセルする特定の日時 (オプション) | | `billing_cycle_anchor_day` | 請求の任意の日付 | | `billing_cycle_anchor_time` | 請求の任意の時刻 | | `billing_cycle_anchor_date` | 請求アンカーの特定の日時 (オプション) | | `trial_period_days` | オプションのトライアル期間 (日数) | | `trial_end_date` | トライアル終了の日時 (オプション) | | `missing_payment_method_at_trial_end` | トライアル終了時に決済手段がない場合のオプションの動作 (`cancel`、`create_invoice`、または `pause`) | | `proration_behavior` | 変更時の比例配分のオプションの動作 (`none`、`create_prorations`、または `always_invoice`) | ## コアコンポーネント概要 Stripe のサブスクリプション管理は、主に以下の主要サービスによって管理されます。 - **StripeSubscriptionService**: サブスクリプション業務のメインオーケストレーター - **CtPaymentCreationService**: CommerceTools の決済作成を処理します - **StripePaymentService**: 決済処理と注文作成を管理します - **SubscriptionEventConverter**: Stripe イベントを CT 取引に変換します ## 比例配分の処理 ![](https://b.stripecdn.com/docs-statics-srv/assets/stripe-composable-subscriptions-proration.1155519547863ecf624f8aa9398f3a0e.png) 比例配分の処理 このアプリは、Commercetools 製品カタログセクション内の製品バリエーション設定に基づいて、[比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md)を自動的にサポートします。有効にすると、以下のようになります。 - ダウングレードの場合、返金は自動的に作成され、元の注文の一部として記録されます。 - 追加の決済が必要なアップグレードの場合、新しい注文の作成が残りの請求期間の比例配分された金額でトリガーされます。 ## 利用可能なサービス この構成可能なコマースアプリは、混在カートや注文作成のサポートなど、サブスクリプション管理のためのコアロジックを提供します。このアプリは、サブスクリプションコマースのユースケースを拡張するために必要な必須の API エンドポイント、サブスクリプションの作成と管理、顧客のサブスクリプションリストの取得、他の commercetools 製品によるサブスクリプションの更新、サブスクリプションのキャンセルを提供します。パッケージ化された事前構築済みのサービスを使用して、アプリを拡張できます。 | エンドポイントサービス | メソッド | 説明 | | ----------------------------------------------- | ------ | ------------------------------------------------------------ | | `/setupIntent` | POST | トライアルモードで使用できます。トライアルモードでは、決済手段をキャプチャーして、将来の決済回収に備えることができます。 | | `/subscription/withSetupIntent` | POST | Commercetools 製品のトライアル設定を使用してサブスクリプションを作成する | | `/subscription` | POST | サブスクリプションを作成する (トライアルなし) | | `/subscription/confirm` | POST | サブスクリプションの決済を確定して完了する | | `/subscription-api/:customerId` | GET | 特定の顧客のすべてのサブスクリプションを取得する | | `/subscription-api/:customerId` | POST | 新しい commercetools 製品のアップグレードまたはダウングレードによる顧客のサブスクリプションの更新 | | `/subscription-api/:customerId/:subscriptionId` | DELETE | 顧客の特定のサブスクリプションをキャンセルする |