[Stripe Updates] Customer Portalから定期課金をキャンセルする際に、「キャンセル理由」を聞くことができるようになります

定期課金サービスを提供する上で、「なぜ顧客は解約したか」を知ることはとても重要です。
そのため、さまざまな企業やサービスで、解約時にアンケートを行うシステムを開発・実装しています。

Stripeを利用している場合、Customer Portalを利用することで、この解約理由アンケートを簡単に実装することができます。

# Dashboardから設定する

もっとも簡単な設定方法は、Dashboardからの操作です。
[[設定 > カスタマーポータル](https://dashboard.stripe.com/test/settings/billing/portal)]から、[顧客によるサブスクリプションのキャンセルを許可]を有効化しましょう。

![スクリーンショット 0004-02-03 19.05.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/811bf966-a6d8-597a-471d-94da4a654797.png)

その後、[キャンセル理由を収集する]をオンにします。

![スクリーンショット 0004-02-03 19.05.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/023dfd13-5995-f133-462b-adf0ebfb07f0.png)

[理由を編集]ボタンをクリックすることで、アンケートでユーザーが選択できる項目をカスタマイズできます。

![スクリーンショット 0004-02-03 19.05.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/ad8b1019-9fdd-3177-0492-88265fd4e451.png)

# Customer Portalでのキャンセル理由アンケート画面を確認する

設定した内容の表示を確認してみましょう。 
Stripe CLIを使うことで、簡単にURLを作成できます。

```bash
$ stripe billing_portal sessions create --customer cus_xxxx| jq .url
"https://billing.stripe.com/session/test_xxxxxxx"
```

サブスクリプションをキャンセルしてみましょう。

![スクリーンショット 0004-02-14 19.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/3918da7e-0e8d-d91a-0ec8-ce16b1d72b7e.png)

キャンセルに成功すると、アンケート画面が表示されます。
回答せずに終了することもできる点には注意しましょう。

![スクリーンショット 0004-02-03 19.07.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/aab78e7f-4c1e-1994-c7b3-33b2bf29a642.png)

# アンケートの回答結果を確認する

対象のサブスクリプション詳細ページに移動すると、なぜ解約されたかを確認することができます。

![スクリーンショット 0004-02-03 19.08.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/055f78e2-fd2f-621b-d7ec-ecb2926d7248.png)

データの分析を行う場合、Stripe SigmaでSQLを実行する必要があります。

https://stripe.com/jp/sigma

# APIから設定する

Customer Portalは、APIからも作成できます。
APIから作成する場合の実装は、以下のようになります。

```diff_javascript
      const portal = await stripe.billingPortal.configurations.create({
        business_profile: {
          privacy_policy_url: 'https://example.com/privacy-policy',
          terms_of_service_url: 'https://example.com/terms-of-service',
        },
        features: {
          subscription_cancel: {
            enabled: true,
            mode: 'immediately',
+            cancellation_reason: {
+              enabled:  true,
+              options: [
+                'customer_service',
+                'low_quality'
+              ]
            }
          }
        },
        default_return_url: 'https://example.com'
      })
```

APIから作成した設定を利用してポータルを起動する場合の実装はこちらです。

```diff_javascript
      const portalSesison = await stripe.billingPortal.sessions.create({
+        configuration: "bpc_xxxxx",
        customer: 'cus_xxxx',
      })
```

設定のIDは、`stripe.billingPortal.configurations.create`のレスポンスなどから取得しましょう。

# [2024/04追記] SQLを利用した分析方法などについて

SQLを利用した分析方法や、2023年にリリースされたアップデートを反映した記事を公開しました。

https://qiita.com/hideokamoto/items/e7ae699e20436118d572

こちらも併せてご覧ください。

# おわりに

Stripe BillingとCustomer Portalを活用することで、このようにサービス改善に活かせる新機能などを簡単に導入できるようになります。

この他にも便利な機能を用意していますので、ぜひテストアカウントでお試しください。

https://stripe.com/docs/billing/subscriptions/build-subscription

# 関連ドキュメント


https://stripe.com/docs/billing/subscriptions/integrating-customer-portal

https://qiita.com/hideokamoto/items/c3f8b2b99d34c46cbcb8

https://qiita.com/hideokamoto/items/669d8b02195ac148dd3e


# [PR] Stripe開発者向け情報をQiitaにて配信中！
2021年12月よりQiitaにて、Stripe開発者のためのブログ記事更新を開始しました。

- [Stripe Updates]：開発者向けStripeアップデート紹介・解説
- ユースケース別のStripe製品や実装サンプルの紹介
- Stripeと外部サービス・OSSとの連携方法やTipsの紹介
- 初心者向けのチュートリアル(予定)

など、Stripeを利用してオンラインビジネスを始める方法について随時更新してまいります。

-> [Stripe Organizationsをフォローして最新情報をQiitaで受け取る](https://qiita.com/organizations/stripe)