AIで作った980円の商品、決済手数料を一律3.6%で見積もると残額を読み違える

AIで作った980円の商品、決済手数料を一律3.6%で見積もると残額を読み違える

980 円のテンプレートを 10 本売ったら、手元にいくら残るのか。最初の試算では、コンビニ決済もカードと同じ 3.6%として、1 本あたり 945 円と出しました。Stripe の料金表を開くと、コンビニ決済には 120 円の最低手数料があります。同じ 980 円でも、概算残額は 860 円でした。

AI で作った小さなデジタル商品は、制作にかけた時間が短いぶん、価格も低く置きたくなります。でも、商品を作る時間と、売るたびに引かれる金額は別です。私は AI へ価格を相談する前に、決済方法ごとの前提を自分で検査したいと思いました。ここで扱うのは販売実績ではなく、公開料金表を使った仮の販売計画です。実際の売上や手取りを示す数字ではありません。

前回と今回の差分

前回は、AI で用意した販売用 ZIP の日本語ファイル名が購入者側で読めるかを検査しました。商品ファイルを渡せる形にしても、価格の計算を間違えると、売るほど想定からずれます。

時点確認できること今回の差分
前回完了時ZIPの名前の文字コードと正規化を検査できます販売時の決済手数料は計算していません
今回完了後3種類の支払い方法について、公開料金を使った概算を比較できます返金、税、契約別料金、実売データはなお別途確認が必要です

飛ばせる章: 料金表の読み方を知っている場合は、「9行の試算を走らせる」から始められます。

なぜ3.6%だけでは足りないか

Stripe の日本向け標準料金表では、オンラインのカード決済は成功 1 回あたり 3.6%です。一方、コンビニ決済は 3.6%でも最低手数料が 120 円です。また、PayPay は通常 3.98%ですが、デジタルコンテンツ事業向けには 9.48%という別の表示があります。AI が商品価格だけを見て「手数料は 3.6%」とまとめても、支払い方法と商品区分を落とした時点で試算になりません。

ここでは「日本円で 980 円、1 件ずつ成功、標準料金のカード・コンビニ・デジタルコンテンツ事業向け PayPay」を仮定します。PayPay の 9.48%を使えるかは、この計算では確定できません。導入時には Stripe の表示と契約を確認します。円未満の処理も実際の Stripe 請求額だと断定せず、比較のため四捨五入しました。

[AIで作るデジタル商品] → [仮の販売価格 980円]
                              ↓
                  [購入者が選ぶ支払い方法]
                    ├─ カード: 3.6%
                    ├─ コンビニ: 3.6%、ただし最低120円
                    └─ PayPay: デジタルコンテンツ事業向け9.48%
                              ↓
                    [概算残額を比較して価格を再検討]

用語

用語この試算での意味
決済手数料決済が成功したとき、料金表に従って差し引くと仮定した金額です
最低手数料率で計算した額が小さくても、1件につき少なくとも差し引かれる額です
概算残額商品価格から、ここで計算した決済手数料だけを引いた額です。利益や振込額ではありません
DecimalPythonで十進の小数を扱う型です。金額の概算で2進浮動小数点の誤差を避けます
ROUND_HALF_UP円未満をこの実験用に四捨五入する設定です。Stripeの実際の丸め規則を代弁しません

9行の試算を走らせる

Python 標準機能だけを使います。まず版を確認しました。

python3 --version
Python 3.13.5

次の内容をfee_trial.pyとして保存します。最初の 1 行は「一律 3.6%」という失敗した計算です。その下で料金を支払い方法別に分け、コンビニの最低額を適用します。数値は 2026 年 10 月 5 日に確認した Stripe の公開料金表を入力したものです。料金の更新時には、表を見直してratesと最低額も更新します。

from decimal import Decimal, ROUND_HALF_UP

prices = [980, 1980, 3300]
rates = {
    "card": Decimal("0.036"),
    "konbini": Decimal("0.036"),
    "paypay_digital": Decimal("0.0948"),
}


def estimate(price, method):
    fee = (Decimal(price) * rates[method]).quantize(
        Decimal("1"), rounding=ROUND_HALF_UP
    )
    if method == "konbini":
        fee = max(fee, Decimal(120))
    return int(fee), price - int(fee)


wrong = (Decimal(980) * Decimal("0.036")).quantize(
    Decimal("1"), rounding=ROUND_HALF_UP
)
print(f"first: price=980 method=konbini fee={wrong} net={980-int(wrong)}")
for price in prices:
    for method in rates:
        fee, net = estimate(price, method)
        print(f"price={price} method={method} fee={fee} net={net}")
print("ten_sales_convenience_980=", estimate(980, "konbini")[1] * 10)
print("ten_sales_card_980=", estimate(980, "card")[1] * 10)
python3 fee_trial.py
first: price=980 method=konbini fee=35 net=945
price=980 method=card fee=35 net=945
price=980 method=konbini fee=120 net=860
price=980 method=paypay_digital fee=93 net=887
price=1980 method=card fee=71 net=1909
price=1980 method=konbini fee=120 net=1860
price=1980 method=paypay_digital fee=188 net=1792
price=3300 method=card fee=119 net=3181
price=3300 method=konbini fee=120 net=3180
price=3300 method=paypay_digital fee=313 net=2987
ten_sales_convenience_980= 8600
ten_sales_card_980= 9450

最初の見積もりから、コンビニ決済の概算残額は 1 件あたり 85 円下がりました。仮に 10 件すべてがこの方法なら、9450 円ではなく 8600 円です。1980 円でもコンビニの最低 120 円が効きますが、3300 円では 3.6%を四捨五入した 119 円に対して、まだ 120 円の最低額が効きます。率だけでは境目を見落とします。

PayPay は別の注意点があります。この例の 980 円なら概算手数料は 93 円です。ただし「PayPay なら必ず 9.48%」という意味ではありません。料金表には一般の 3.98%とデジタルコンテンツ事業向けの 9.48%が並びます。商材区分を先に確認せず、都合のいい率だけ選ぶのは危険です。

価格を変える前に残ったこと

この試算は決済成功 1 件あたりの比較に限ります。制作時間、サポート費、返金、税金、広告費、通貨換算、契約別の料金は含みません。売上がゼロなら、ここに並んだ「概算残額」もゼロです。支払い方法の利用比率も、まだ実測していません。

私はまず決済方法を限定した小さな販売テストを行い、実際の支払い方法と請求明細を見てから、価格を直したいです。AI に値付けの案を出してもらうのは、その後でも遅くありません。料金表の条件を確かめずに「980 円なら十分」という答えだけ採用するより、失敗の場所がはっきりします。

よくあるエラー

症状原因対処
コンビニの概算手数料が35円になる3.6%だけ掛け、最低120円を忘れていますmax(率で計算した額, 120)で比較します
PayPayの数字が資料と違う通常の3.98%と、デジタルコンテンツ事業向けの9.48%を混同しています契約・商材区分を確認してから率を選びます
概算残額を利益と呼んでしまう手数料だけを引き、ほかの費用を引いていません利益の表と切り離し、制作・税・返金などを別に集計します
小数の端数が計算ごとにぶれるfloatと丸め規則を混在させていますDecimalに文字列を渡し、丸め方を明記します

一次情報

資料確認した内容
Stripe 日本の料金体系標準のカード決済3.6%、コンビニ決済の最低120円など
Stripe 決済手段別の料金体系PayPayの通常3.98%とデジタルコンテンツ事業向け9.48%の表示
Python decimal公式文書十進演算とROUND_HALF_UPによる丸め方
この記事をシェア