Stripe Payment Linksで在庫のある商品などの「支払い件数を制限する」支払いに対応する方法

商品やサービスを販売する場合、「**提供できる量以上の注文を受け付けない**」ようにする仕組みは重要です。必要以上の注文と支払いを受け付けた場合、キャンセルに伴う返金処理の手間や、カード会社・決済プロバイダに支払った決済手数料の損失が生まれます。

Stripeのノーコードで支払いURLを発行できる、[Payment Links](https://docs.stripe.com/payment-links/)を利用した場合、支払いできる件数を制限することができます。

この記事では、ダッシュボードとAPIから、支払い件数を制限する仕組みを紹介します。

## 注文できる数量を指定する方法

StripeのPayment Linksで支払い件数を制限する方法は、ダッシュボードとAPIの２つあります。

### ダッシュボードから数量を指定する

Stripeダッシュボードで設定する場合、支払いリンクの作成・編集画面から設定を行います。設定画面の[オプション]に[支払い件数を制限]という項目がありますので、ここで数量や終売後のメッセージを設定します。

![スクリーンショット 2024-02-16 13.06.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/401bcd98-9420-e938-957c-7d8d0aeafcdf.png)

### APIから数量を指定する

APIから数量を指定する場合、`restrictions[completed_sessions][limit]`に合計の支払い件数を数字で指定します。また、`inactive_message`を指定することで、終売後のメッセージもカスタマイズできます。

```diff
curl https://api.stripe.com/v1/payment_links \
  -u "{sk_から始まるシークレットキー}:" \
  -d "line_items[0][price]"={{PRICE_ID}} \
  -d "line_items[0][quantity]"=1 \
+  -d "restrictions[completed_sessions][limit]"=1\
+  -d "inactive_message"="Sorry, we are out of stock for now!"
  ```

## 注文を行うと、利用可能数が減っていく

支払い件数・販売数量の制限を設定した支払いリンクでは、「どれくらい支払いがあって、あと何件支払いを受け付けることができるか」を確認することができます。

ダッシュボードでは、支払いリンクの詳細ページから確認できます。

![スクリーンショット 2024-02-16 13.29.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/1c68c927-ddf6-2446-ec0a-9643c430bc15.png)

また、APIを利用した場合には、完了した件数を`count`、受け付けることができる件数の上限を`limit`から取得できます。

```js
{
  "restrictions": {
    "completed_sessions": {
      "count":3,
      "limit":4,
    },
  },
  ...
}

```

## 既定の販売数に到達すると、支払いリンクが無効化される

設定した数量が全て売れ切ると、自動的に支払いリンクが無効化されます。

![スクリーンショット 2024-02-16 13.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/a30fe14c-0817-a8b4-663e-af17b779c2ab.png)

Buy Buttonを埋め込んでいる場合は、ボタンが「売り切れ」表示に切り替わります。

![スクリーンショット 2024-02-16 13.20.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/05b3ba4e-edf7-d9fe-2ab0-c7f4b9c9e3be.png)

## 数量を超えて注文してみるとどうなるか

人気のショップや商材では、支払いリンクに短時間で多くのアクセスが集まります。
もし支払い件数の上限に達成した状況で、URLに直接アクセスがあった場合はどうなるでしょうか？

### 規定数到達後にURLにアクセスした場合

支払いリンクのURLに直接アクセスがあった場合、販売終了のメッセージ(`inactive_message`の値)が画面に表示されます。

![スクリーンショット 2024-02-16 13.06.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/9e744189-9671-3cbb-fa84-56aff3494e33.png)

### すでに決済フォームにアクセスしている場合

もし支払いリンクへのアクセスに成功した後、フォームを送信するまでの間に販売が終了した場合はどうなるでしょうか？この場合、[支払う]ボタンをクリックしても以下の画像のようなエラーが表示されるようになります。

![スクリーンショット 2024-02-16 13.06.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/56c29d39-1de3-2f91-0b22-4ac1ae5fc1b7.png)

## 追加の販売を行う方法

お客様理由のキャンセルなどで、追加で販売が可能になった場合、支払い件数の数値を更新することで、支払いリンクのURLを有効化できます。支払いリンクの詳細ページにある[有効化する]ボタンをクリックしましょう。

![スクリーンショット 2024-02-16 13.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/a30fe14c-0817-a8b4-663e-af17b779c2ab.png)

支払い件数の上限を変更するか確認する画面が表示されますので、「追加で販売する数を合算した数」を入力して有効化しましょう。

![スクリーンショット 2024-02-16 13.09.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/22ddd416-2fec-86fd-8c87-b5a925f85235.png)

有効化が完了すると、QRコードや購入ボタンを表示するボタンが支払いリンクの詳細画面に表示されます。

![スクリーンショット 2024-02-16 13.09.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/b478242a-6538-1e3e-580e-c254684f8e5b.png)

## まとめ

このように、販売件数や支払い件数を制限したい、ECサイトのようなユースケースでも、Stripe Payment Linksを利用したノーコードでの決済フローを提供することが可能です。ノーコードで提供できることから、ウェブサイトを持たないSNS上でのマーケティング・販売活動や開発工数の削減、そして実験的なサービスの提供やテストの開始など、さまざまなビジネス上のメリットも生まれてきます。

カスタマーポータルやその他のノーコード機能を組み合わせることで、お金や請求に関する要件をより少ないコードで実現することも可能です。ぜひStripeのドキュメントやQiitaの記事を参考に、Stripeを使った効率的な開発方法を体験してみてください。

https://docs.stripe.com/no-code/customer-portal

https://docs.stripe.com/no-code

## 関連記事・追加の学習リソース

https://stripe.com/docs/payment-links/customer-info
 
このドキュメントは、支払いリンクの使用数を制限する方法について詳細に説明しています。これは商品の在庫が限られている場合や、リンクを一回限りで使用したい場合などに役立つ情報です。

https://stripe.com/docs/payment-links/api

APIを用いて支払いリンクを作成し、顧客が購入する商品数量を可変に設定する方法について詳しく説明しています。これにより、特定の販売数量を制限するためのプログラム的な設定方法を理解することができます。

https://stripe.com/docs/payment-links

このドキュメントは、支払いリンクとその利用方法を概観します。そして限定の在庫や一度限りの決済を必要とするような場合に、支払い数の制限を行う早期アクセスを申請する方法も述べられています。

https://support.stripe.com/questions/how-to-accept-donations-through-stripe

ここでは、Payment Linkを通じて寄付を受け付ける方法について説明されています。「顧客が支払額を選択する」というモデルを使って、支払いリンクを寄付の収集ツールとして使用する方法も触れられています。

https://stripe.com/docs/payments/accept-a-payment

ここでは、商品と価格を作成し、その基にチェックアウトセッションを設定することで、寄付を受け付けたり、自由に価格を設定した商品やサービスを販売することについて説明しています。