10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Stripe Checkoutで事前に料金を登録せず(アドホック)に決済ページを作成する

Last updated at Posted at 2022-03-14

今回の記事では、オーダーメイドな製品やパーソナライズした商品など、顧客によって価格や商品内容が異なるケースでのCheckoutの利用方法を紹介します。

Checkoutでは、料金データを利用する

Stripe Checkoutを利用することで、簡単に決済ページを組み込むことができます。

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_2366300_6bcc3c66-7ca7-0d89-e178-12e01b586307.png

サンプルコードでは、一般的に「事前に作成した料金のID」を設定してCheckoutのセッションを開始します。

const session = await stripe.checkout.sessions.create({
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/cancel',
  customer_creation: 'if_required',
  line_items: [
    {
       price: 'price_xxx',
       quantity: 2
     },
  ],
  mode: 'payment',
});

ですが、オーダーメイドなサービス・製品を提供する場合には、前もって料金を登録することができません。

そのため、アドホックに料金・商品を登録する方法で実装する必要があります。

顧客ごとに、アドホックに料金を作成して処理する

Checkoutセッションを作成する際に料金を登録するには、line_items.price_dataを利用します。

この中に、料金をAPIから作成する際に設定する値を入れることで、そのセッション用の料金を作ることができます。

await stripe.checkout.sessions.create({
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/cancel',
  customer_creation: 'if_required',
  line_items: [{
-    price: 'price_xxx',
+    price_data: {
+      currency: 'jpy',
+      product: "prod_xxxx",
+      unit_amount: 1000,
+    },
    quantity: 1
  }],
  mode: 'payment',
})

作成した料金は、処理完了後にアーカイブされる

アドホックに作成した料金データは、Dashboardでは表示されません。

これは、自動的に料金のアーカイブまで行われるためです。

$ stripe prices retrieve price_xxxxx
{
  "id": "price_xxxxx",
  "object": "price",
  "active": false, # active=falseなのでアーカイブ済み

アドホックに商品データも作成する

先ほどのサンプルでは、料金に紐づける商品データは事前に作成済みでした。
ですが、商品データについてもアドホックに作成することができます。

await stripe.checkout.sessions.create({
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/cancel',
  customer_creation: 'if_required',
  line_items: [{
    price_data: {
      currency: 'jpy',
-      product: "prod_xxxx",
+      product_data: {
+        name: "アドホックな料金"
+      },
      unit_amount: 1000,
    },
    quantity: 1
  }],
  mode: 'payment',
})

商品についても、自動的にアーカイブされます。
そのため、セッション数が増えることでによってDashboardで商品・料金データの数が増えて探しにくくなることもありません。

サブスクリプションにも対応

サブスクリプションについても、アドホックに商品・料金を登録して処理できます。

await stripe.checkout.sessions.create({
  success_url: 'https://example.com/success',
  cancel_url: 'https://example.com/cancel',
  line_items: [{
    price_data: {
      currency: 'jpy',
      product_data: {
        name: "アドホックな料金"
      },
      unit_amount: 1000,
      recurring: {
        interval: "month",
      }
    },
    quantity: 1
  }],
  mode: 'subscription',
})

オーダーメイドECやパーソナライズしたサービス提供にお使いください

アドホックな料金登録を利用することで、顧客に応じて料金の変わるオーダーメイド・パーソナライズ商品・サービスの提供がより簡単になります。

自動でアーカイブできるなど、料金・商品の登録APIを利用するよりも便利なケースがありますので、ご活用ください。

参考記事

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?