従量課金ベースのレートカードのサブスクリプションに対する税金の徴収非公開プレビュー
従量課金ベースのレートカードのサブスクリプションに対する税金を計算して徴収する方法について紹介します。
プライベートプレビュー
レートカードは現在プライベートプレビュー版でのみ利用可能であり、すべての Stripe ユーザーを対象とした一般提供が開始されるまでに、機能や実装手順が変更される可能性があります。プライベートプレビュー版へのアクセスをご希望の場合は、こちらで登録を行ってください。
Stripe Tax を使用して、レートカードサブスクリプションの継続支払いの税額を計算できます。顧客の支払い準備が整ったときに税金の計算を自動的に処理するには、レートカードサブスクリプションを作成する際に顧客の場所の詳細を設定します。
顧客情報を収集するクライアント側
税額と合計額の見積もりができたら、次のような顧客情報を収集できます。
- 配送先住所 (該当する場合)
- 請求先住所
- 支払いの詳細
Stripe Tax は Setup Intent を作成せずに支払い情報を収集します。最初のステップは、インテントのない 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}}
顧客の情報を保存するサーバー側
Stripe Tax が顧客の正確な場所を判断して正確な結果が得られるように、顧客から収集した詳細情報を使って Customer オブジェクトを更新してください。
地域的な考慮事項アメリカ
顧客がアメリカに居住している場合は、可能であれば詳細な住所を入力してください。「建物単位の精度」という用語は、顧客の場所を特定の家屋や建物に関連付けることができるという意味で使用されます。これにより、管轄区域の境界が複雑なため、同じ通りに並んでいる 2 つの家で、適用される税率が異なるような場合でも、精度が格段に向上します。
Customer オブジェクトをまだ作成していない場合 (たとえば、顧客が貴社のウェブサイトに初めて登録したときなど) は、ここで作成できます。
tax.validate_location 列挙型値は、この操作の結果として顧客の納税場所が有効になる (または引き続き有効なままとなる) ようにするのに役立ちます。有効でない場合、リクエストは customer_tax_location_invalid エラーコードで失敗します。納税場所が無効な顧客に対しては、税金の自動徴収を有効にしたサブスクリプションを作成できないため、これは重要です。これまでプレビュー版の請求書の automatic_tax.status を advised としてチェックしていた場合は、この追加の検証が失敗することはありません。ただし、Customer オブジェクトを作成または更新するときは必ず tax[validate_
を設定することをお勧めします。
顧客をレートカードに登録する
レートカードを作成したら、顧客のサブスクリプションを開始できます。
顧客をレートカードに登録する際に、請求頻度 (顧客への請求書を作成する頻度) も定義しておきます。請求頻度を作成するときに、徴収方法 (自動請求するか、請求書を送信するか) を指定します。自動請求する場合は、請求書が作成され、顧客のデフォルトの決済手段に対して請求が行われます。請求書を送信する場合は、顧客に請求書が届き、その代金を顧客が手動で支払う必要があります。