税金の徴収
Stripe Tax API を使用して、カスタムのシステムに税額計算を実装します。
Stripe Tax API を使用すると、カスタム決済フローで税金を計算できます。顧客が決済を完了した後で、取引を記録して Stripe Tax のレポートに表示されるようにします。このガイドの例では Stripe の Payment API を使用していますが、任意の決済代行業者や複数の決済代行業者で Tax API を使用することもできます。
ほとんどの統合では、Checkout Sessions API with Stripe Tax を使用することをお勧めします。
あるいは、Stripe Tax を Payment Links、Checkout、Billing、Invoicing に導入することもできます。ノーコードまたはローコードの設定です。
Stripe Tax API を使用すると、カスタム決済フローで税金を計算できます。顧客が決済を完了した後で、取引を記録して Stripe Tax のレポートに表示されるようにします。このガイドの例では Stripe の Payment API を使用していますが、任意の決済代行業者や複数の決済代行業者で Tax API を使用することもできます。
カスタム決済フローが Payment Intents API を使用している場合は、カスタム決済フローでの税金計算を参照してください。この導入は自動債務追跡、領収書、ダッシュボードに対応しています。
あるいは、Stripe Tax を Payment Links、Checkout、Billing、Invoicing に導入することもできます。ローコードの設定です。
始める
この短い動画では、Payment Intents API と Payment Element を使用する Stripe Tax API の導入手順を説明しています。
オプション顧客住所を収集するクライアント側
ほとんどの場合、回収する税金は顧客の場所によって決まります。顧客の住所全体を収集することで、税金の計算の正確性を確実に向上させることができます。住所の収集前に、IP アドレス に基づく見積もりを顧客に示すことができます。
メモ
以下の例では単純なカスタム住所フォームを使用していますが、Address Element を使用して、オートコンプリートやローカライゼーションの機能によって顧客から住所を収集することもできます。
以下のフォームにより、詳細な住所が収集されます。
<form> <label for="address_line1">Address Line 1</label> <input type="text" id="address_line1" /> <label for="address_city">City</label> <input type="text" id="address_city" /> <label for="address_state">State</label> <select id="address_state"> <option value="WA">Washington</option> <!-- add more states here --> </select> <label for="address_postal_code">Postal code</label> <input type="text" id="address_postal_code" /> <label for="address_country">Country</label> <select id="address_country"> <option value="US">United States</option> <option value="DE">Germany</option> <option value="IE">Ireland</option> <!-- add more countries here --> </select> </form>
サーバーエンドポイントに住所を渡すには、以下のようにします。
const address = { line1: document.getElementById('address_line1').value, city: document.getElementById('address_city').value, state: document.getElementById('address_state').value, postal_code: document.getElementById('address_postal_code').value, country: document.getElementById('address_country').value, }; var response = fetch('/preview-cart', { method: 'POST', body: JSON.stringify({address: address}), headers: {'Content-Type': 'application/json'}, }).then(function(response) { return response.json(); }).then(function(responseJson) { // Handle errors, or display calculated tax to your customer. });
税金を計算するために必要な住所情報は、顧客の国 によって異なります。
- アメリカ: 少なくとも顧客の郵便番号が必要です。最も正確な税金の計算結果を得るには、正確な住所を指定することをお勧めします。
- カナダ: 顧客の郵便番号または州が必要です。
- その他の国: 顧客の国コードのみが必要です。
税額計算サーバー側
課税 するタイミングと頻度を選択できます。たとえば、以下を実行できます。
- 顧客が決済フローに 顧客の IP アドレス に基づく]税金の見積もりを表示する
- 顧客が請求先住所または配送先住所を入力するときに税金を再計算する
- 顧客が住所の入力を完了したときに、徴収する最終的な税額を計算する
Stripe は課税する税金計算の API コールごとに手数料を請求します。課税する税金計算の API コールを抑制して、コストを管理できます。
下記の例は、さまざまなシナリオで税金を計算する方法を示しています。Stripe Tax では、税金を徴収するために登録した管轄区域の税金のみを計算し、ダッシュボードで 登録を追加 する必要があります。
計算の応答 には、顧客に表示し、支払いを受けるのに使用できる金額が含まれます。
| 属性 | 説明 |
|---|---|
| amount_total | 課税した後の合計。顧客への支払いに PaymentIntent の金額 を設定します。 |
| tax_amount_exclusive | ラインアイテムの金額と配送料金に追加される税金の金額。この税額は amount_ を増額します。これを使用して、取引の小計に追加される税額を顧客に示します。 |
| tax_amount_inclusive | 項目の金額と配送料金に含まれている税金の金額 (内税価格を使用している場合)。この税額は amount_ を増額しません。これを使用して、決済金額の合計に含まれている税金を顧客に示します。 |
| tax_breakdown | 国や州の税率ごとに分類された税額のリスト。これを使用して、徴収している特定の税金を顧客に示します。 |
顧客の場所エラーの処理
顧客の住所が無効な場合や、税金の計算に使用できるほど精度が高くない場合は、計算で customer_ エラーが返されます。
{ "error": { "doc_url": "https://docs.stripe.com/error-codes#customer-tax-location-invalid", "code": "customer_tax_location_invalid", "message": "We could not determine the customer's tax location based on the provided customer address.", "param": "customer_details[address]", "type": "invalid_request_error" } }
このエラーを受け取った場合は、顧客に入力した住所を確認し、入力ミスを修正するように求めます。
別の代行業者で計算を使用する
Stripe 外で取引を処理する場合は、次の手順をスキップして、計算を外部で処理された取引に適用できます。
税取引を作成するサーバー側
Creating a tax transaction records the tax you’ve collected from your customer, so that later you can download exports and generate reports to help with filing your taxes. You can create a transaction from a calculation until the expires_at timestamp, 90 days after it’s created. Attempting to use it after this time returns an error.
メモ
取引は create_ が呼び出された日付に有効であると見なされ、税額は再計算されません。
税取引を作成する際は、税取引とラインアイテムごとの一意の reference を指定する必要があります。この参照番号は、税金のエクスポート結果に表示され、徴収した税金をシステムの注文と照合するのに役立ちます。
たとえば、税取引の参照番号が pi_、ラインアイテムの参照番号が L1 と L2、配送料金がある場合、項目別の税金のエクスポートは次のようになります。
| ID | line_item_id | タイプ | 通貨 | transaction_date |
|---|---|---|---|---|
| pi_123456789 | L1 | 外付けの | USD | 2023-02-23 17:01:16 |
| pi_123456789 | L2 | 外付けの | USD | 2023-02-23 17:01:16 |
| pi_123456789 | 配送 | 外付けの | USD | 2023-02-23 17:01:16 |
顧客が決済する際に、計算 ID を使用して徴収した税金を記録します。これを行うには 2 つの方法があります。
- 顧客が注文を送信するエンドポイントがサーバーにある場合は、注文が正常に送信された後で税取引を作成できます。
- payment_intent.succeeded Webhook イベントをリッスンします。PaymentIntent
メタデータから計算 ID を取得します。
以下の例では、取引を作成して、PaymentIntent ID を一意の参照番号として使用します。
後で返金を記録するために、tax transaction ID を保存します。取引 ID は、データベースまたは PaymentIntent のメタデータに保存できます。
返金を記録するサーバー側
顧客への売上を記録するために税取引を作成した後で、返金の記録が必要になる場合があります。これらは、type=reversal の税取引としても表されます。差戻し取引は、逆の符合の金額を指定することで前の取引を相殺します。たとえば、50 USD の売上を記録した取引に、後から -50 USD の全額差戻しを指定できます。
返金を発行 (Stripe を使用、または Stripe の外部で) する際には、一意の reference を指定して税の差戻し取引を作成する必要があります。一般的には以下のような方法があります。
- 元の参照番号にサフィックスを追加します。たとえば、元の取引の参照番号が
pi_の場合は、参照番号123456789 pi_の差戻し取引を作成します。123456789-refund - Stripe 返金 する ID、またはご使用のシステムの返金する ID を使用します (
re_や3MoslRBUZ691iUZ41bsYVkOg myRefund_など)。456
顧客の注文を 課税するエクスポート と照合するための最適な方法を選択します。
売上を全額返金する
システムで売上を全額返金するには、mode=full を指定して差戻し取引を作成します。
以下の例の tax_ は、顧客への売上を記録する税金取引です。
これにより、作成された全額差戻し取引が返されます。
{ "id": "tax_1MEFtXI6rIcR421e0KTGXvCK", "object": "tax.transaction", "created": 1670866467, "currency": "eur", "customer": null, "customer_details": { "address": { "city": null, "country": "IE",
Fully reversing a transaction doesn’t affect previous partial reversals. When you record a full reversal, make sure you fully reverse any previous partial reversals for the same transaction to avoid duplicate refunds.
売上を一部返金する
顧客に 返金し たら、mode=partial を指定して税の差戻し課税する取引を作成します。これにより、返金されたラインアイテムの金額を指定して一部返金を記録できます。売上ごとに最大 30 件の一部差戻しを作成できます。徴収した税額より多く差戻すと、エラーが返されます。
以下の例では、元の取引の最初のラインアイテムのみの返金が記録されます。
これにより、作成された一部差戻し取引が返されます。
{ "id": "tax_1MEFACI6rIcR421eHrjXCSmD", "object": "tax.transaction", "created": 1670863656, "currency": "eur", ... "line_items": { "object": "list", "data": [ {
差戻されるライン項目のそれぞれについて、差戻される amount と amount_ を指定する必要があります。元の計算のライン項目が内税だった場合、amount は内税です。
amount と amount_ は以下のように状況によって決定されます。
- 取引のラインアイテムが常に 1 件のみの場合は、代わりに 全額差戻しを 使用します。
- 常にラインアイテム全体を返金する場合は、マイナス記号を指定して元の取引ラインアイテムの
amountとamount_を使用します。tax - ライン項目の一部を返金する場合は、返金額を計算する必要があります。たとえば、
amount=5000とamount_の販売取引では、ライン項目の半分を返金した後で、tax=500 amount=-2500とamount_のライン項目で一部差戻しを作成します。tax=-250
一部返金で課税するレポート
合計課税する額が小計に比例しなくなるような課税するを返金すると、課税する申告書の信頼性が低下する可能性があります。課税対象の対象額と課税対象外額が自動的に調整されること主張が認められたなく、課税するの差戻しの理由 (商品非課税、顧客非課税、リバースチャージなど) 主張が認められた反映されません。項目の課税するの一部を返金しないことをお勧めします。代わりに、取引を無効にし、正確な課税する計算のために適切な入力で新しい税額を作成します。
売上を定率で一部返金する
また、税額適用後に返金する定率を指定して、mode=partial を設定した差戻しを作成することもできます。金額は、それぞれに対する返金の残額に応じて、各ライン項目と配送料金に比例配分されます。
下記の例の取引には 2 つのラインアイテムがあります。1 つは 10 USD のアイテムで、もう 1 つは 20 USD のアイテムで、いずれも税率 10% で課税されています。取引の合計額は 33.00 USD です。定率の 16.50 USD の返金が記録されています。
これにより、作成された一部差戻し取引が返されます。
{ "id": "tax_1NVcQYBUZ691iUZ4SBPukGa6", "object": "tax.transaction", "created": 1689780994, "currency": "usd", ... "line_items": { "object": "list", "data": [ {
元の取引の各ライン項目と配送料に対して、返金額と税金が以下のように計算されます。
- まず、返金に利用できる取引の残額の合計を計算します。この取引には他に差戻しが記録されていないため、合計金額は 33.00 USD です。
- 次に、各アイテムに対する返金額の合計を計算します。この計算は返金に利用できる額と取引の残額合計の比率を基準にします。たとえば、10 USD のアイテムは、返金対象の残額合計が 11.00 USD であり、取引の残額合計の 33.33% に相当するため、返金される合計金額は
-16.となります。50 USD * 33. 33% = -5. 50 USD - 最後に、返金対象の合計金額が
amountとamount_に分割されます。これについても、ラインアイテムでと返金対象の残額合計を比較して返金に利用できる税額に応じて比例的に計算されます。10 USD のアイテムを例にすると、税金 (1.00 USD) は返金対象の残額合計 (11.00 USD) の 9.09% に相当するので、tax amount_はtax -5.となります。50 USD * 9. 09% = -0. 50 USD
最初に記録されていた額ではなく、取引の返金対象の_残額_に応じて一定額が配分されます。たとえば、定額の 16.50 USD の返金を記録するのではなく、まず 10 USD の項目の合計額の部分差戻しを記録する場合を考えてみましょう。
この後に、16.50 USD の定率の金額の差戻しを記録します。
これで部分差戻し取引が返されます。
{ "id": "tax_1NVxFIBUZ691iUZ4saOIloxB", "object": "tax.transaction", "created": 1689861020, "currency": "usd", ... "line_items": { "object": "list", "data": [ {
取引で残っている金額の合計が 22.00 USD であり、10 USD のアイテムが全額返金されているため、16.50 USD の全体が 20 USD のアイテムに配分されます。次に、16.50 USD がステップ 3 のロジックを使用して、amount = -15. と amount_ に配分されます。一方、取引の 10 USD のアイテムには 0 USD の返金が記録されます。
一部返金を取り消す
税金取引は変更できませんが、full reversal を作成することで一部返金をキャンセルできます。
この処理が必要になる状況を以下に示します。
- 支払いの 返金に失敗 し、顧客に商品やサービスを提供していない場合
- 誤った注文が返金されたか、誤った金額が返金された場合
- 元の売上が全額返金され、一部返金が無効になった場合
以下の例の tax_ は一部返金を表す取引です。
これにより、作成された全額差戻し取引が返されます。
{ "id": "tax_1MEFADI6rIcR421e94fNTOCK", "object": "tax.transaction", "created": 1670863657, "currency": "eur", ... "line_items": { "object": "list", "data": [ {
テスト
本番環境と同じ応答構造である サンドボックス を使用して、本番環境へ移行する前に導入が正しく機能することを確認します。
警告
テスト環境では、計算が最新の税金結果を返すことを保証していません。税金計算は 1 日あたり 1,000 件に制限されています。上限を引き上げる必要がある場合は、Stripe サポート にお問い合わせください。テスト環境における自動テストとレート制限を回避するための戦略に関するガイダンスについては、自動テスト を参照してください。
オプション導入の例
決済手段の詳細を収集して PaymentIntent を作成 する前に、顧客の税金を計算できます。たとえば、顧客が郵便番号を指定したときにショッピングカートの合計を表示できます。
以下の例では、クライアント側のフォームから顧客の住所が送信される宛先の /preview-cart エンドポイントをサーバー側で定義しています。サーバーでは、カートのラインアイテムと顧客の住所を組み合わせて税金が計算されます。
決済を受ける準備が整ったら、税金の計算結果から PaymentIntent を作成します。PaymentIntent の metadata または独自のデータベースに税金計算 ID を保存することで、顧客が決済を完了したときに税金取引を作成できます。
以下の例は、税金を計算し、PaymentIntent を作成 (または更新) し、クライアントに結果を返すサーバーエンドポイントを示しています。その後、顧客に税金を表示できます。client_ を使用して支払いを受け ます。
導入で支払い Element を使用している場合は、PaymentIntent の更新後に サーバーから更新 を取得します。
オプション配送料金の税金を計算するサーバー側
配送料金の税金を計算するには、shipping_ パラメーターを使用します。
既存の ShippingRate の ID を渡して、その amount、課税する tax_、課税する tax_ を使用します。
オプションIP アドレスを使用して税金を見積もるサーバー側
顧客の IP アドレス を指定すると、Stripe はその地理的な位置を特定し、その場所を顧客の所在地として使用します。これにより、顧客が郵便番号を入力する前に税金の見積もりを表示できます。
注意
IP アドレスの場所は顧客の実際の場所から離れている可能性があるため、徴収する 最終的な 税額を決定するのに IP アドレスを使用することはお勧めしません。
オプション顧客の Tax ID を収集するサーバー側
国外へのサービスの提供など、顧客に リバースチャージ に基づく税金の必要が生じる場合があります。税金を回収せず、代わりに「差戻し請求で支払われる税金」という文言を指定して請求書を発行する必要があります。これにより、購入に関連する納税が顧客の責任であることを顧客に伝えることができます。
顧客の納税者番号を指定して、リバースチャージが適用される状況を自動的に判別するには、以下のようにします。
無効な形式の納税者番号を指定すると、計算で tax_ エラーコードが返されます。
{ "error": { "code": "tax_id_invalid", "doc_url": "https://docs.stripe.com/error-codes#tax-id-invalid", "message": "Invalid value for eu_vat.", "param": "customer_details[tax_ids][0][value]", "type": "invalid_request_error" } }
Tax API では、納税者番号を政府のデータベースで自動的に検証しません。税金の計算前に納税者番号を検証するには、customer tax ID validation を使用する必要があります。
オプション内税価格サーバー側
デフォルトでは、指定したライン項目と配送料の金額に加算して税金が計算されます。価格に含まれる税金を計算するには、line item または shipping cost の tax_ を inclusive に設定します。
以下の例では、顧客は常に 100 EUR を決済します。
レスポンスでは税込み価格が返されます。
{ ... "amount_total": 10000, ... "tax_amount_exclusive": 0, "tax_amount_inclusive": 1870, "tax_breakdown": [ { "amount": 1870, "inclusive": true, "tax_rate_details": { "country": "IE", "percentage_decimal": "23.0", "state": null, "tax_type": "vat" }, "taxability_reason": "standard_rated", "taxable_amount": 8130 } ], ... }
オプション既存の Customer オブジェクトを使用するサーバー側
Customer オブジェクトを指定すると、Stripe は、顧客の住所と納税者番号を自動的にコピーして計算に使用します。
- 顧客の
shippingが存在する場合は、customer_にコピーされます。details. address - そうでない場合は、顧客の
addressが存在していれば、それがcustomer_にコピーされます。details. address - そうでない場合は、顧客の
tax.が存在していれば、それがip_ address customer_にコピーされます。details. ip_ address - そうでない場合は、顧客の
tax.が存在していれば、それがtax_ exempt customer_にコピーされます。details. taxability_ override
顧客の 納税者番号 が customer_ にコピーされます。
オプション顧客の課税対象を上書きするサーバー側
顧客が非課税である場合など、特定のケースでは税金を徴収する必要はありません。taxability_override パラメーターを使用して、Stripe Tax に税金免除を指定できます。
顧客の課税対象の上書きを計算に指定するには、以下のようにします。
リバースチャージ
欧州連合などの一部の地域は、顧客がビジネスとして購入する場合に課税対象となる「リバースチャージ」スキームを実装しています。Stripe Tax が正確な税金処理を適用できるように、顧客から Tax IDs を収集することをお勧めします。顧客の納税者番号を収集できない場合や、リバースチャージスキームの適用を別途決定している場合があります。そのような場合は、taxability_ を使用して、Stripe Tax でリバースチャージスキームを強制的に適用できます。
顧客の課税対象の上書きを計算に指定するには、以下のようにします。
オプション配送元住所を指定するサーバー側
主たるビジネス拠点以外の場所から商品を配送する場合、配送元住所を登録して税金計算に使用できます。
発送元の所在地を指定するには、ship_ パラメータを使用します。この例では、ユーザーはフロリダ州に拠点を置き、顧客はイリノイ州スプリングフィールドにおり、商品はイリノイ州ネイパービルから発送されています。
このレスポンスでは、配送先 (イリノイ州スプリングフィールド) または売り手のビジネス拠点ではなく、注文の配送元 (イリノイ州ネイパービル) に基づいて計算された税金が返されます。
{ ... "amount_total": 1078, ... "tax_amount_exclusive": 78, ... "tax_breakdown": [ { "amount": 78, "inclusive": true, "tax_rate_details": { "country": "US", "percentage_decimal": "7.75", "state": "IL", "tax_type": "sales_tax" }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ], ... }
これらのシナリオにおける税金の計算方法については、Stripe Tax のドキュメント をご覧ください。
オプション小売業配送手数料の計算サーバー側
Stripe Tax は、ミネソタ州とコロラド州の小売業配送手数料の計算をサポートしています。
サポートされている州で state_ タイプの税務登録を追加すると、小売業の配送手数料が税金計算で計算されます。
小売業の配送手数料を計算するには、衣料品と履物を表す txcd_ などの 物品商品税コード を使用して税金計算 API を呼び出します。
すべての物品が小売業の配送手数料の計算をトリガーするわけではありません。税金が適用されるタイミングについては、州のドキュメントをご覧ください。
レスポンスは、コロラド州の小売業配送手数料で計算された税金を返します。これは tax_ オブジェクトの追加エントリーであり、tax_ は flat_ に設定されています。
{ ... "amount_total": 2165, ... "tax_amount_exclusive": 165, ... "tax_breakdown": [ { "amount": 88, "inclusive": false, "tax_rate_details": { "percentage_decimal": "8.81", "rate_type": "percentage", "tax_type": "sales_tax", ... }, "taxability_reason": "standard_rated", "taxable_amount": 1000 }, ... { "amount": 29, "inclusive": false, "tax_rate_details": { "flat_amount": { "amount": 29, "currency": "usd" }, "percentage_decimal": "0.0", "rate_type": "flat_amount", "tax_type": "retail_delivery_fee", ... }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ], ... }
オプションライン項目の詳細な税金の内訳サーバー側
最上位の tax_breakdown は常に返され、Checkout 時または領収書に税金のリストを表示するのに適したシンプルな内訳が表示されます。
taxability_reason を使用して、導入の構築時に税金が適用されない理由を把握できます。たとえば、not_ では、税金を徴収する国または州で税金が徴収されません。アカウント設定に tax registrations を追加すると、Stripe に税金を徴収する場所が示されます。ワシントン州の登録を追加した場合、結果に表示される課税対象の理由は standard_ になり、これは商品が標準税率で課税されることを示します。
ライン項目の tax_breakdown 属性を展開すると、地方税や各税金の理由を説明する属性など、詳細な内訳が表示されます。
- 課税する
rate_の tax_type フィールドは、課税する税金の種類を示す上位レベルであり、レポートや取引のエクスポートで返されるタイプとは必ずしも一致しない場合があります。たとえば、アメリカ売上税とアメリカ使用税を区別しません。details - Checkout フローの tax_rate_details の
display_フィールドを使用して、すべての税金を表示します。税金は、顧客の場所と商品の税金情報に基づいてローカライズされます。例えば、txcd_10103001: Software as a Service (SaaS) for Business Use のように、顧客がドイツに所在して、商品が仕向地で課税されるため、ドイツに VAT が適用される場合、name Umsatzsteuer (USt)と表示されます。これは、VAT のドイツ語表記です。txcd_20030000: General - Services のように、本社の住所がフランスに設定され、商品が起点で課税されるため、フランスに VAT が適用される場合、Taxe sur la valeur ajoutée (TVA)と表示されます。これは、VAT のフランス語表記です。
{ ... "tax_breakdown": [ { "amount": 103, "inclusive": false, "tax_rate_details": { "country": "US", "percentage_decimal": "10.25", "state": "WA", "tax_type": "sales_tax" }, "taxability_reason": "standard_rated", "taxable_amount": 1000 } ],
オプション一般的なエラーのトラブルシューティングサーバー側
税務インテグレーションのエラーをトラブルシューティングするには、以下のステップに従います。
無効な課税するコードのエラーを解決する
Invalid tax code エラーが表示された場合は、Product tax codes を参照して、利用可能な税コードのリストを確認してください。次に、以下の手順に従って問題を解決します。
税コードを確認する: 利用可能な税コードのリスト から、有効な税コードを使用していることを確認してください。よくある間違いは次のとおりです。
- 課税するコードとして空の文字列または
nullを使用する - 課税するコードのスペルミス
- 存在しない課税するコードを使用する
- 課税するコードとして空の文字列または
コードを更新:
TaxCalculationを作成する際には、必ず有効な課税コードを渡してください。以下に例を示します。デフォルトの税コードを使用: Stripe Tax は、商品または税金計算リクエストに特定の税コードが指定されていない場合、計算にデフォルトの税コードを使用します。税金設定でデフォルト値を表示および更新できます。
API を使用して、デフォルトの税コードを更新します。
商品カタログのレビュー: Stripe 商品カタログの商品に関連付けられた税コードを使用する場合は、税コードが商品に正しく割り当てられていることを確認してください。
データの不整合の確認: 税コードがデータベースまたはフロントエンドから、Stripe への API コールを行うサーバー側のコードに正しく渡されることを確認します。
課税する税額を正確に計算するには、商品またはサービスに適用される最も具体的な税コードを使用します。課税するコードが不明な場合は、課税する税コードのドキュメント をご覧ください。
問題が続く場合は、課税する API ドキュメント をレビューしてください。