継続支払いの税金を徴収する
継続支払いの税金を計算するために、Stripe は Stripe Tax と Tax Rate を提供します。
Stripe Tax: 有料製品です。税率やルールを定義することなく取引の税金を自動的に計算します。手数料は、税金の計算と納付を登録している場所を 1 カ所以上追加した後にのみ適用されます。詳細は、Stripe Tax をご覧ください。
Tax Rates: 無料の機能です。Checkout を使用したインボイス、サブスクリプション、および 1 回限りの支払いに適用する税率を任意の数だけ定義できます。Stripe がお客様の代わりに税率を作成または管理することはありません。詳細については、Tax Rates およびその使用方法をご覧ください。
Stripe Tax では、Stripe Billing を使用する際、継続支払いで徴収する税金を計算することができます。新規のサブスクリプションを作成するか、または既存のサブスクリプションに Stripe Tax を追加して、顧客の次回のインボイス金額に及ぼす可能性のある影響を確認できます。Stripe Tax は Stripe Billing にネイティブに組み込まれており、料金体系モデル (セント以下、パッケージなど)、比例配分 (日割りおよび秒割り計算) 、割引、トライアルなどに基づき、税金の自動計算を行います。このガイドでは、Stripe Tax と Billing を初めて設定する場合を想定しています。
既存のサブスクリプションを更新するには、既存のサブスクリプションの更新に関するガイドをご覧ください。
商品と価格を更新する
Stripe Tax は、Products API とPrices API に格納された情報を使用して、税金計算で適用する正しい税率とルールを特定します。使用する商品と価格を更新し、以下を含めます。
税金処理: 価格で設定する税金処理は内税または外税のいずれかです。これは、購入者への税金の表示方法を決定します。税金処理を外税に設定すると、価格に指定した小計に税金が加算されます。これはアメリカの市場および B2B 販売で一般的な方法です。内税に設定すると、税率が変わっても購入者が支払う金額は変わりません。これはアメリカ以外の多くの市場の B2C 購入者にとって一般的な方法です。
価格に税金処理を明示的に設定する操作は、Stripe Tax の設定でデフォルトの税金処理を設定している場合はオプションです。価格に税金処理を設定することにより、デフォルトの税金処理を上書きできます。
(オプション) 税コード: 税コードは、Stripe Tax における商品またはサービスの分類であり、正しい税率を取引に適用できるようにします。この例には「オーディオブック」、「ギフトカード」、「サービスとしてのソフトウェア (SaaS)」などが挙げられます。税コードが設定されていない場合、Stripe Tax は事前設定された税金設定を使用します。
注意
tax_behavior
を一度「外税」または「内税」のいずれかに設定すると、変更できません。代わりに、新しい価格を作成して現在の価格をアーカイブできます。
商品と価格を事前に作成しない場合は、subscriptions の作成時に price_data.tax_behavior
および product_data.tax_code
を渡すことができます。
商品、価格、税コード、および税金処理で詳細をご覧ください。
このガイドでは、電子雑誌を継続支払いの商品例にして説明します。
まず、「私の商品」という名前の新しい Product の月額の Price をサーバーに作成します。税金処理のため、以下の 2 つのフィールドを追加します。
tax_behavior
on the Price object. Set toinclusive
orexclusive
. This is a required field if you’re using Stripe Tax with Subscriptions.- Product オブジェクトの
tax_code
。Stripe の税コードであり、商品の税コードにマッピングされます。詳細については、税コードのリストをご覧ください。
当該商品の商品 ID を記録しておきます。これは次のように表示されます。
{ "id": "prod_H94k5odtwJXMtQ",
商品 ID を使用して価格を作成します。
注
price_data.tax_behavior
が exclusive
に設定されている場合は、指定する小計に税金が追加されます。これはアメリカの市場および B2B 販売において一般的な方法です。inclusive
に設定されている場合は、税率が変わっても購入者が支払う金額は変わりません。これはアメリカ以外の多くの市場の B2C 購入者にとって一般的な方法です。
Record the price ID so you can use it in subsequent steps. It looks like this:
{ "id": "price_HGd7M3DV3IMXkC",
顧客を作成するサーバー側
ユーザーがウェブサイトに登録したら、サーバーで Customer (顧客) を作成します。
When creating a customer, you can send us a description and the payment method only. However, the more information you send us, the better the tax calculation can identify the location of your customer and tax them accordingly. We recommend populating the customer.address
field. Expand the tax
field to confirm the location Stripe Tax has identified for your customer.
国と郵便番号のいずれかを追加できます。
または、できれば完全な請求先住所を追加します。
Or, only an IP address:
展開された tax
フィールドは、推定された納税場所を示し (最初に住所を使用し、次に指定された IP アドレスを使用します)、顧客が税金の自動計算を使用できるかどうかを示します。
{ "id": "cus_13729he8947269", "object": "customer", // ... other fields omitted "tax": { "location": {"country": "US", "state": "CA", "source": "billing_address"}, "ip_address": null, "automatic_tax": "supported", } }
automatic_tax
の値は、次の 4 つの状態になる可能性があります。
ステータス | 説明 | 想定されるアクション |
---|---|---|
supported | 税金の自動計算が完全にサポートされています。 | これ以上のアクションは必要ありません。 |
unrecognized_location | この住所は納税場所を判断するのに有効ではありません。 | 顧客に住所の更新を依頼して、customer.address を新しい値に設定します。 |
not_collecting | この住所は、登録が設定されていない場所にあります。 | 納税義務に応じて、このまま引き続き Stripe Tax で税金を評価しないでおくか、顧客が所在する税務管轄区域の登録を新たに追加することができます。 |
failed | Stripe のサーバーでエラーが発生しました。これは稀なケースです。 | リクエストを再試行するか、問題が解決しない場合は Stripe サポートにお問い合わせください。 |
サブスクリプションを作成するサーバー側
税金計算のための顧客の設定が完了しました。顧客と選択したプランを使用して、サーバーでサブスクリプションを作成できます。サブスクリプションでの税金の自動計算を有効にするには、automatic_tax[enabled]
パラメーターを true
に設定します。
このパラメーターを設定すると、後続のインボイスはすべて、税金の自動計算を有効にした状態で作成されます。
最新の税金計算の結果を確認するには、最新のサブスクリプションのインボイスを取得します。これを行うには、上記の例のように、サブスクリプションリクエストの latest_invoice
フィールドを展開します。税額は、最新のインボイスの tax
フィールドと total_tax_amounts
フィールドから、およびラインアイテムごとの tax_amounts
フィールドから取得できます。
顧客の場所を特定するのに十分な情報が Stripe Tax にない場合は、customer_tax_location_invalid エラーが返されます。
支払い情報を収集してサブスクリプションを有効化するクライアント側
最初のインボイスの支払いを完了してサブスクリプションを有効化するには、顧客がフォームを送信するときに stripe.confirmCardPayment
を使用します。
const btn = document.querySelector('#submit-payment-btn'); btn.addEventListener('click', async (e) => { e.preventDefault(); const nameInput = document.getElementById('name'); // Create payment method and confirm payment intent. stripe.confirmCardPayment(clientSecret, { payment_method: { card: cardElement, billing_details: { name: nameInput.value, }, } }).then((result) => { if(result.error) { alert(result.error.message); } else { // Successful subscription payment } }); });
支払いが行われると、サブスクリプションは自動的に active
になります。決済ページの設定の詳細については、Elements を使用したサブスクリプションのガイドをご覧ください。
場所の検証を処理する
Stripe Tax では、税金を計算するために認識されている顧客の場所が必要です。
automatic_tax[enabled]=true
を指定してサブスクリプションまたは 1 回限りのインボイスの下書きを作成または更新する前に、顧客の automatic_tax
ステータスを確認することをお勧めします。
顧客の場所が認識されていない場合に、サブスクリプションやインボイスを作成または更新すると、次のように動作します。
- インボイスと支払いの処理を即時実行するサブスクリプションを作成または更新すると、HTTP ステータス 400 の応答でエラーが発生します。
- インボイスまたは支払いの処理を即時実行しないサブスクリプションを更新すると、HTTP ステータス 200 の応答が返されます。ただし、後でインボイスが確定されるときに、顧客の場所の検証が非同期で発生します。インボイスの確定時に顧客の場所が無効な場合、Stripe は
invoice.finalization_failed
Webhook を送信します。対処しなければ、auto_advance
の値にかかわらず、インボイスはdraft
状態のままになります。 - (サブスクリプションサイクル後の短い期間内、または 1 回限りのインボイスの場合) インボイスの下書きを作成または更新すると、インボイスの
automatic_tax.status
がrequires_location_inputs
に更新されます。次に Customer オブジェクトを更新して、住所を修正してからインボイスを更新または確定するか、税金の自動計算を無効にすることができます。対処しなければ、auto_advance
の値にかかわらず、インボイスはdraft
状態のままになります。
継続的なサブスクリプションのインボイスで、顧客の場所が認識されていないために税金の計算が失敗した場合、Stripe はインボイスを確定する際に invoice.finalization_failed
Webhook を送信します。顧客の場所の詳細を更新する際は、この点に注意してください。
ほとんどのアクティビティーが非同期で発生するため、Webhook を使用してサブスクリプション関連のイベント (インボイスの確定の失敗など) をリッスンすることをお勧めします。
顧客またはサブスクリプションを作成する前に価格をプレビューするオプション
Stripe は、サブスクリプションの次回のインボイスをプレビューするためのエンドポイントも提供しています。このエンドポイントを使用して、新しいサブスクリプションの最初のインボイスをプレビューできます。
まだ顧客を作成していないときに顧客の請求先情報を収集した場合は、顧客 ID の代わりに customer_details
パラメーターを使用できます。
When previewing the first invoice for a subscription, the subscription ID in the response won’t point to a valid subscription.
また、税金が有効化されていない継続的なサブスクリプションがあり、税金の自動計算を有効にしたときの次回のインボイスをプレビューする場合にも、このエンドポイントを使用できます。