商品および価格を管理する
商品と価格を管理する方法をご紹介します。
ダッシュボードまたは API を使用して、商品と価格の作成と更新を行うことができます。
変動料金の作成といった高度なユースケースでは、API を使用する必要があります。商品や料金が多数ある場合や、Elements でカスタムの導入を構築する場合は、API を使用します。
- コードの記述を避けたい場合や、商品と価格が少ない場合は、ダッシュボードを使用して商品と価格を作成・管理します。サンドボックスで料金体系モデルを設定し、商品詳細ページの本番環境にコピーボタンをクリックします。
- 商品および価格を作成・管理するには、API または Stripe CLI を使用します。API は本番環境向けの直接的な方法です。一方、Stripe CLI は、端末から直接 Stripe の導入を作成、テスト、管理する開発者向けツールです。
次の API ステップでは、例としてプロジェクト管理ダッシュボードを基本商品とする架空の SaaS コラボレーションツール (Togethere)を使用します。
商品を作成する
商品を編集する
商品をアーカイブする
商品を無効にして新しい請求書またはサブスクリプションに追加できないようにする場合は、その商品をアーカイブすることができます。商品をアーカイブしても、その商品を使用する既存のサブスクリプションは、キャンセルされるまで有効なままになりますが、その商品を使用する既存の決済フォームへのリンクは無効化されます。価格が関連付けられている商品を削除することはできませんが、アーカイブすることはできます。
商品を削除する
価格が関連付けられていない商品のみを削除できます。あるいは、商品をアーカイブすることができます。
料金を作成する
1 つの商品に対して 1 つまたは複数の価格を作成できます。たとえば、Togethere の「スターター」レベルを月額 10 USD、年額 100 USD、または 1 回限りの購入額 9 EUR で提供することができます。
注
価格の作成後は、その metadata
、nickname
、active
フィールドのみを更新できます。
デフォルトの価格を設定する
商品のデフォルトの価格は、顧客に提示する最も標準の価格です。たとえば、1 つの商品にシーズンセールの価格が複数設定される場合がありますが、デフォルトは、通常の (セール用ではない) 価格を表します。商品の価格が 1 つのみである場合は、必然的にその価格がデフォルトの価格と見なされます。デフォルトの価格は、active (有効) な Price である必要があります。
インライン価格を作成する
インライン価格を作成するには、1 回限りの支払いまたはサブスクリプションを作成するときに price.
ではなく price_
を渡します。たとえば、顧客をインライン価格の月次サブスクリプションに登録するには、次の手順に従います。
これにより基本サービスの月額 $50 継続価格が設定されます。インライン価格は作成後の更新・再利用ができません。price_
で作成された価格は標準で非活性化されます (active=false
)。price_
は、Checkout Sessions、インボイスアイテム、および サブスクリプションスケジュール でも使用できます。
多通貨価格を作成する
多通貨の価格は、API またはダッシュボードで作成できます。
クーポン、プロモーションコード、配送料も価格と同様に多通貨に対応しています。
多通貨価格を表示する
顧客に現地通貨で価格を表示するには、多通貨の Price を取得して、その currency_options.<currency>.unit_amount フィールドを確認します。デフォルトでは、API の応答に currency_
は含まれません。レスポンスにこのフィールドを含めるには、currency_
フィールドを拡張します。
注
遅延を改善してレート制限に伴う問題を避けるには、顧客がサイトを訪れるたびに価格を再取得するのではなく、キャッシュするようにします。
多通貨価格を使用する
各購入では、システムでの価格の適用方法に応じて、他通貨価格がサポートする通貨のいずれかが使用されます。
単一通貨価格から多通貨価格に移行する
単一通貨の価格が既存の場合、ダッシュボードで、後からその価格に複数の通貨を追加できます。
Checkout または Payment Links を使用している場合、多通貨の Price が自動的に有効になります。価格が顧客の現地通貨をサポートしていることを Stripe が検出すると、その通貨が自動的に使用されます。1 回の購入で複数の価格、クーポン、プロモーションコード、または配送料金が使用されている場合、そのすべてが顧客の現地通貨に対応していて、そのデフォルト通貨がすべて同じである必要があります。
サブスクリプションを直接作成した場合、多通貨の Price は currency
パラメーターを渡すまで有効になりません。currency
パラメーターを渡さない場合、サブスクリプションは常に価格にデフォルト通貨を使用します。
検索キー
企業の多くは、ウェブサイトに価格情報を掲示しています。これらの価格がハードコード化されていて、価格の変更を必要とする場合、その変更プロセスはたいてい手作業であり、新しいコードのデプロイが必要になります。このようなシナリオを管理しやすくするために、Price オブジェクトで lookup_key 属性を使用します。このキーを使用することで以下の処理が可能になります。
- フロントエンドでさまざまな価格をレンダリングする。
- レンダリングされた価格を使用して顧客に請求する。
価格を作成する際に、lookup_
を渡すことができます。
料金体系ページで月額 10 USD などのテキストをハードコード化してバックエンドで価格 ID を使用するのではなく、standard_
キーを使用して料金をクエリし、その結果をフロントエンドに表示できます。
注
パフォーマンスを改善するため、キャッシングレイヤーを追加して、価格の再読み込みは必要な場合のみ行うことをお勧めします。
顧客が登録や支払いのボタンをクリックしたら、上記の GET
リクエストからの価格を Subscriptions API に渡します。
これにより、複数の料金を表示できるようになります。新規ユーザーに対する請求を毎月 10 USD ではなく 20 USD に変更した場合、新しい料金を作成し、transfer_lookup_key=true を使用して検索キーをその新しい料金に転送するだけで済みます。
切り捨て/切り上げ
切り捨て/切り上げは、請求書のラインアイテムレベルで行われます。たとえば、unit_
で料金を作成し、その[料金]で quantity = 30
として月次サブスクリプションを作成した場合、数量に小数の金額を乗じた後に切り捨て/切り上げが適用されます。この例の場合、ラインアイテムで算出される金額は、0.
となり、2 セントに切り上げられます。複数のラインアイテムが存在する場合は、請求書の合計金額の計算前に、それぞれのラインアイテムで切り捨て/切り上げが行われます。これにより、小数は料金にのみ適用されることになり、顧客への請求は整数単位の金額で行われます。
外税は、税率に応じて各ラインアイテムの金額に加算されます。税金の自動計算を有効にしている場合、外税は、請求書ごとの割引を含めた合計額に対して適用され、端数処理されます。ラインアイテムごとまたは請求書ごとのいずれかで税率を手入力する場合、端数処理の適用方法を選ぶことができます。ダッシュボード内の請求書設定ページで、個々のラインアイテムまたは請求書の小計に対して、税金の適用と端数処理を設定します。
料金を編集する
ダッシュボードまたは API で、価格に関する複数のプロパティを更新できます。たとえば、価格を有効にしたり解除したり、価格のメタデータを変更することができます。
API では価格の金額を変更できないことに注意してください。代わりに、新たな金額で新しい価格を作成し、その新しい価格の ID に切り替えて、古い価格を更新して無効にすることをお勧めします。
料金をアーカイブする
価格を無効にして、新しい請求書またはサブスクリプションに追加できないようにする場合は、その価格をアーカイブできます。価格をアーカイブする場合、その価格を使用する既存のサブスクリプションは、キャンセルされるまで有効なままになります。また、その商品を使用する既存の決済フォームへのリンクは無効化されます。
料金を削除する
使用されたことがない価格のみを削除できます。あるいは、価格をアーカイブすることができます。
料金体系情報を表示する
商品と料金を作成した後、ウェブサイトに料金表を埋め込み、料金体系の情報を顧客に表示することができます。顧客がサブスクリプションを選択すると、決済フローに直接移動します。コードを記述することなく、ダッシュボードで設定、カスタマイズ、更新を直接行うことが可能です。
商品および価格をインポートする
商品カタログが非常に大きい場合は、Products API を使用して、カタログをプログラムでインポートします。商品カタログを Stripe にインポートする場合、商品管理システムや CSV ファイルなど、任意の開始データソースを使用できます。
Products API を使用して、システム内の各製品に対して Stripe で製品を作成します。システム内の商品を Stripe 内の商品にマッピングするには、インポートする各商品に一意の id を割り当てます。商品ごとに、Prices API を使用して対応する価格を作成します。新しく作成した価格の id
を必ず保存してください。この id
は、実装で商品と価格を使用するときに渡す必要があります。
ダッシュボードを確認するか、API を使用して List all products (すべての商品をリスト) することで、インポートを確認します。
インポートした価格を削除する
開発中は、テストのためにこのスクリプトを複数回実行する必要がある場合があります。同じ製品 ID を使用すると、その ID の製品が既に存在することを示すエラーが表示されます。製品をまだ使用していない場合は、Stripe ダッシュボードを使用して削除できます。
商品のダッシュボードに移動して、商品を見つけます。
料金体系セクションで、価格の隣にあるオーバーフローメニュー () をクリックして、料金を削除を選択します。
ページの上部にあるオーバーフローメニュー () をクリックして、商品を削除を選択します。
商品と価格を同期する
場合によっては、インポートを複数回実行する必要があります。インポートをテストするスクリプトを作成し、必要に応じて元のデータ ソースを Stripe と同期できます。スクリプトをべき等にしてエラーに対する回復性を持たせるには、まず製品を作成してみるのが安全であり、製品が既に存在する場合は更新しても構いません。
商品カタログと Stripe との同期を維持するには、Webhook またはその他のメカニズムを使用して、Stripe で商品の更新をトリガーします。プログラムで商品を更新するには、次のパターンを使用します。
最初に、List all prices (すべての価格をリスト) API を使用して、商品に関連付けられている既存の価格を見つけ、価格がデータソースと一致していることを確認します。各商品には有効な価格が 1 つだけ設定されている必要があります。
次に、価格の小数点以下の金額が変更されているかどうかを確認します。unit_
フィールドには、単価がセント単位で表示されます。
金額が一致しない場合は、新しい価格を作成する必要があります。新しい価格を作成する際、元の商品の product
ID、currency
、および更新後の unit_
価格を指定します。
古い価格を更新して active=false
とマークします。
導入で商品と価格を使用する
商品と価格は、複数の異なる Stripe 導入パスで使用できます。
テスト
テスト環境から本番環境に商品をコピーすると、再作成する必要がなくなります。商品に関連付けられている価格もコピーされます。ダッシュボードの商品詳細ページで、右上隅にある 本番環境にコピー をクリックします。
テスト製品を本番環境にコピーできるのは一度だけです。コピー後にテスト製品を更新した場合、本番製品に変更は反映されません。