2021/03/08

[Python]Stripeで日本の消費税(10%)に対応する

pythonstripe

概要

stripeでユーザーが商品を購入した時に、消費税10%をつけて課金する必要があったので、調べて対応しました。

結論から言うと以下のstepが必要でした。

  1. TaxRateの定義を作成する
  2. 商品を購入(チェックアウトや定期購入の作成)するときに、そのTaxRateのIDを指定する

Backendはpythonを使用しているため、Pythonでの手順を残しておきます。

実装内容

TaxRateの定義

import logging
import stripe
stripe.api_key = "your-stripe-secret-key"

logger = logging.getLogger(__name__)


tax_rate = stripe.TaxRate.create(
    display_name="消費税",
    description="消費税",
    country="JP",
    jurisdiction="JP",   # 管轄は日本の国コードを指定
    percentage=10,       # 10%
    inclusive=False,     # 外税を指定(内税の場合はTrue)
)
logger.info("STRIPE_TAX_ID initialized! tax_id: \"%s\"", tax_rate["id"])

税の指定

  • 購入するときに、適用させたいTaxRateを配列で指定する必要がありました。

checkout

success_url = "チェックアウトに成功した時にリダイレクトされるURL"
cancel_url = "チェックアウトをキャンセルした時にリダイレクトされるURL"
tax_rate_id = "step1で定義したTaxRateのID"

session = stripe.checkout.Session.create(
    payment_method_types=["card"],
    line_items=[
        {
            "price": "購入させたい商品の価格ID",
            "quantity": 1,  # 購入数
            "tax_rates": [tax_rate_id],
        },
    ],
    mode="payment",
    success_url=success_url,
    cancel_url=cancel_url,
)

subscription

customer_id = "課金させたいstripeの顧客ID"
tax_rate_id = "step1で定義したTaxRateのID"

add_invoice_items = [{
    "price": "初回にのみ課金される商品の価格ID",
    "quantity": 1,  # 購入数
    "tax_rates": [tax_rate_id],
}] if include_initial else None
items = [{
    "price": "定期購入商品の価格ID",
    "quantity": 1,  # 購入数
    "tax_rates": [tax_rate_id],
}]
subscription = stripe.Subscription.create(
    customer=customer_id,
    items=items,
    add_invoice_items=add_invoice_items,
)

References

詳しくは以下を参照ください。