継続支払いの税金を徴収する
継続支払いの税金を徴収および申告する方法をご紹介します。
継続支払いの税金を計算するために、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 Checkout を使用して新しいサブスクリプションを作成する場合は、Checkout セッションで税金を自動徴収する方法をご確認ください。また、以下の短い動画もご覧いただけます。
税額と合計額を推計するサーバー側
請求書の automatic_tax.status を確認します。ステータスが requires_
の場合は、住所の詳細情報が無効であるか、不備があります。この場合、顧客に住所情報の再入力や、正確な住所情報の提供を求めてください。
請求書のtotal (合計) は顧客が支払う金額で、tax (税金) は請求書のすべての税金金額の合計です。税金の内訳については、total_tax_amounts をご覧ください。金額はすべてセント単位です。
税額ゼロ
tax
がゼロの場合は、顧客の所在地に税務登録があることを確認してください。売上税、VAT、GST の登録方法と税額ゼロとリバースチャージの詳細をご確認ください。
顧客情報を収集するクライアント側
税額と合計額の見積もりができたら、配送先住所 (該当する場合)、請求先住所、支払い情報など、顧客情報の収集を開始します。Stripe Tax を使用する場合は、インテントなしで支払い情報を収集します。最初のステップは、インテントのない Elements オブジェクトを作成することです。
const stripe = Stripe(
); const elements = stripe.elements({ mode: 'subscription', currency: '{{CURRENCY}}', amount:"pk_test_TYooMQauvdEDq54NiTphI7jx", });{{TOTAL}}
次に、Address Element と Payment Element を作成し、その両方をマウントします。
const addressElement = elements.create('address', { mode: 'billing' // or 'shipping', if you are shipping goods }); addressElement.mount('#address-element'); const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element');
その後、Address Element で変更イベントをリッスンできます。住所が変更された場合は、税額と合計額を再見積もりします。
addressElement.on('change', function(event) { // Throttle your requests to avoid overloading your server or hitting // Stripe's rate limits. const { tax, total } = await updateEstimate(event.value.address); elements.update({ amount: total }); // Update your page to display the new tax and total to the user... });
よくある間違い
顧客が住所を入力すると、Address Element はキーストロークごとに change
イベントを起動します。サーバーへの過負荷と Stripe のレート制限への到達を回避するには、最後の change
イベントの後、しばらく待ってから、税金と合計を推計しなおします。
送信を処理するクライアント側
顧客がフォームを送信したら、elements.submit() を呼び出してフォームのフィールドを検証し、ウォレットに必要なデータを収集します。この関数の Promise が解決されるのを待たないと、他の操作は実行できません。
document.querySelector("#form").addEventListener("submit", function(event) { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); const { error: submitError } = await elements.submit(); if (submitError) { // Handle error... return; } const { value: customerDetails } = await addressElement.getValue(); // See the "Save customer details" section below to implement this // server-side. await
(customerDetails); // See the "Create subscription" section below to implement this server-side. const {saveCustomerDetails} = awaitclientSecret(); const { error: confirmError } = await stripe.confirmPayment({ elements, clientSecret, confirmParams: { return_url:createSubscription, }, }); if (confirmError) { // Handle error... return; } // Upon a successful confirmation, your user will be redirected to the // return_url you provide before the Promise ever resolves. });{{RETURN_URL}}
顧客の情報を保存するサーバー側
顧客から収集した詳細情報で Customer
オブジェクトを更新して、Stripe Tax で位置を精密に判定し、正確な結果が得られるようにしてください。
地域的な考慮事項アメリカ
顧客がアメリカに居住している場合は、可能であれば詳細な住所を入力してください。「建物単位の精度」という用語は、顧客の場所を特定の家屋や建物に関連付けることができるという意味で使用されます。これにより、管轄区域の境界が複雑なため、同じ通りに並んでいる 2 つの家で、適用される税率が異なるような場合でも、精度が格段に向上します。
Customer
オブジェクトをまだ作成していない場合 (顧客がウェブサイトで初めて登録したときなど) は、ここで作成できます。
tax.validate_location 列挙値によって、この操作の実行後に顧客の納税場所が有効になる (または有効性を維持している) ことを確認できます。有効でないと、Stripe で customer_tax_location_invalid エラーコードによってお客様のリクエストが失敗します。納税場所が無効な顧客に対しては、税金の自動計算が有効に設定されたサブスクリプションを作成できないため、これは重要になります。前述の推奨に従ってプレビュー請求書の automatic_tax.status を確認している場合は、この追加の検証が失敗することはありませんが、Customer
オブジェクトの作成または更新時は常に、tax[validate_
を設定しておくことをお勧めします。
サブスクリプションを作成するサーバー側
税金の自動徴収を有効にしてサブスクリプションを作成します。
latest_invoice.payment_intent.client_secret は、新しいサブスクリプションの最初の (かつ最新の) 請求書の支払いインテントの client secret です。支払いインテントを確定するには、client secret をフロントエンドに渡す必要があります。
セキュリティのヒント
client secret は保存したり、ログに記録したり、顧客以外に漏洩したりしないでください。client secret が含まれるページはすべて、必ず TLS を有効にしてください。
顧客がデフォルトの支払い方法を使用している場合、サブスクリプションの最初の請求書は自動的に支払われます。これは、サブスクリプションの latest_invoice .statusを使用すると確認できます。決済フローで顧客から収集した新しい支払いの詳細を使用する場合は、最初の請求書が自動的に支払われないようにしてください。サブスクリプションの作成時に payment_behavior に default_
を渡し、表示のように stripe.confirmPayment() を使用して支払いインテントを確定します。詳細は、Billing の回収方法をご覧ください。
Webhook を使用する
サブスクリプションアクティビティの大半は非同期で行われるため、Webhook を使用してサブスクリプションイベントをリッスンすることをお勧めします。
Stripe Tax の使用を開始するときは、必ず invoice.finalization_failed イベントをリッスンしてください。請求書の automatic_tax.status が requires_
の場合は、顧客の住所の詳細が無効であるか、情報に不備があります。この場合、Stripe で税金の計算、請求書の確定、および支払いの回収を行うことはできません。住所情報を入力しなおすか、正確な住所を提供するように顧客に連絡してください。
See Using webhooks with subscriptions to learn more.