公務員すきま予備校|2026年10月9日
Stripe で何ができるかの調査結果と、販売管理の体制案(商品・値段・決済・返金は Stripe、権利と会員の紐付けは自社)をまとめました。キヨさんと、キヨさんが使う AI に渡すための資料です。AI にはページ下の Markdown をそのまま渡せます。
Markdown をダウンロード(AI に渡す用)| 項目 | 現状 |
|---|---|
| 売上の経路 | 教材は今も note.com で販売(月 ¥2,000 台)。会員サイト(members.educarelog.net)経由の売上は 0 円。 |
| 会員の正本 | 本番 D1 educare-poc の users。会員サイトの Worker と、管理画面(Cloudflare Pages educare-admin)の会員一覧・会員詳細が同じ D1 を直接読んでいる。 |
| 自社の課金基盤 | 9/30 にお渡しした枝 handoff/commerce-kiyo-20260930(line-harness リポジトリ)。商品・値段・注文・権利・返金・異議・日次照合の表(migration 126〜130)と、Stripe の通知(Webhook)の受け口がある。ステージングの課金 Worker と管理画面の販売管理で動作確認済み。 |
| Stripe での実地確認 | Stripe のテスト環境で、購入 → 権利付与 → 閲覧 → 返金 → 閲覧停止 → 異議(チャージバック)→ 停止 → 勝訴 → 閲覧復帰、を一周通している。本番の鍵・本番の Webhook は未設定。 |
| 値段の正本 | 今の設計では自社の表(offers / offer_prices)。決済のたびに Stripe へ金額を渡している(Checkout の price_data)。Stripe 側の商品マスターは使っていない。 |
| 自社が持つ情報 | 課金の表にカード番号・下 4 桁・有効期限・口座・住所・電話・メールは無い。Checkout に渡すのは会員 ID・品目・金額だけで、カード情報は Stripe の画面で入力され自社サーバーを通らない。一方、会員表にはメール等の個人情報があり、購入履歴も個人に結び付く。 |
| 閲覧可否の判定 | 本番では 4 系統に分かれている。教材=enrollments+user_memberships、問題集=user_plans(書き込むコードは無い)、過去問=環境変数の許可リスト、AI 面接=interview_access。 |
| 止まっている所 | 既存の閲覧判定(上の 4 系統)への接続と、既存会員の利用権の新しい権利表への移し替え。 |
文章で書いた体制案(5 章)を図にしました。カード情報と取引の記録は Stripe 側だけにあり、自社は「誰がどの教材を見てよいか」と会員の紐付けだけを持ちます。
青い矢印=購入の流れ、橙の矢印=Stripe から自社への通知。自社の「販売台帳」に載っていない Stripe の商品は、決済画面を作らず、権利も付けません(独立レビューの条件)。
出典は Stripe 公式(docs.stripe.com・stripe.com/jp/pricing、2026-10-08〜09 に取得)。
active(有効)は「新しい購入に使えるか」だけを意味する。client_reference_id で渡せる。Stripe の Customer を指定すると、その Customer のメールは決済画面で編集できない。client_reference_id は URL のパラメータで渡す(英数字・ダッシュ・アンダースコア、最大 200 文字)ため、買い手が書き換えられる。二重購入の事前チェックもできない。checkout.session.completed で届く。品目(line_items)は通知の本文に含まれず、API で取り直す必要がある。コンビニのように後から入金が確定する支払いは、checkout.session.async_payment_succeeded / async_payment_failed を別に受ける。Stripe-Signature、HMAC-SHA256)で本物か確かめる。届く順番は保証されず、同じ通知が複数回届くことがある。失敗時の自動再送は本番で最長 3 日。constructEventAsync(Web Crypto)で署名を検証できる。| 手段 | 手数料 | 制約 |
|---|---|---|
| カード | 3.6% | 3D セキュアは上記のとおり対応 |
| コンビニ | 3.6%(最低 ¥120) | サブスクの Checkout では使えない。¥500 の商品なら手数料は実質 24% |
| PayPay | 3.98%(デジタルコンテンツ事業は 9.48%) | 継続課金は不可。教材が「デジタルコンテンツ事業」に当たるかは未確認 |
| Stripe Billing(サブスク) | 取引額の 0.7% | — |
| 種類 | 主な候補 | 結果 |
|---|---|---|
| 日本の D2C・定期通販カート | ecforce、スマレジEC・リピート(旧 楽楽リピート)、Shopify、BASE、MakeShop ほか | 物販前提。決済代行は GMO-PG・SB ペイメント等の固定が多く、Stripe を選べる記載は見つからない。カート側に購入者の個人情報が集まる。例: ショップサーブ(Eストアー)は 2026 年 8 月に約 885 万件の不正アクセスを公表。 |
| 講座・会員サイト系 | UTAGE、MyASP、Teachable、Thinkific、Kajabi ほか | コンテンツと会員ごと移す前提。決済ページだけを切り出して使える確証が無く、会員 ID と学習記録が二重になる。日本円・コンビニ・特商法表示に対応しないものも多い。 |
| オープンソース | EC-CUBE、Medusa、Saleor、Vendure、Lago ほか | Cloudflare Workers・D1 に載らず、別サーバーの運用(OS・DB の更新、バックアップ、防御設定)が増える。取引データの置き場所も増える。公開済みのセキュリティ勧告も多い(Vendure 28 件・うち重大 6 件、Sylius 17 件、Saleor 12 件、EC-CUBE は 2026 年 3 月に管理画面の 2 段階認証すり抜け)。 |
| 課金 SaaS・販売代行 | Paddle、Lemon Squeezy、Chargebee、Recurly ほか | 日本円・コンビニ・PayPay への対応を確認できない、または別に決済代行が要る。 |
| 日本の決済代行 | KOMOJU、PAY.JP、GMO ほか | KOMOJU が次点(署名付き通知あり)だが料率非公開。Stripe から乗り換える理由は無い。 |
参考として挙がった CAM UP(cammacs.jp/contents/camup8/)は製品ではなく、物販向けクラウド ERP「キャムマックス」を提供する株式会社キャムの記事「おすすめのカートシステム 15 選」だった。
外部システムで置き換えられる部分(決済画面・商品管理・取引記録)は、既に Stripe と自社基盤で大半ができている。時間がかかっている部分(既存の閲覧判定への接続・既存会員の利用権の移し替え)は、どの外部システムを入れても自社に残る。
| 機能 | 置き場所 | 備考 |
|---|---|---|
| 商品名・説明・値段・値段の改定 | Stripe(Product / Price) | 管理画面で作成 |
| 決済ページ | Stripe Checkout | 自社サーバーが販売台帳の Price ID で作成 |
| 領収書・返金・異議・売上確認 | Stripe の管理画面 | 管理画面に売上画面は作らない |
| クーポン | Stripe のプロモーションコード | 最初の本番では使わない(5.4) |
| 販売台帳(Stripe の値段 → 教材の対応・販売状態) | 自社 | 権利付与の正本 |
| 販売開始・停止 | 自社の管理画面 | 教材が公開済み・本文ありかを検査してから台帳に載せる |
| 決済完了 → 権利付与 | 自社 | Webhook → 決済状態を API で確認 → 台帳の固定明細から付与(冪等) |
| 返金・異議 → 権利の停止・復帰 | 自社 | Webhook で自動。最初は全額返金の成功だけで停止 |
| 教材の中身・下書きと公開 | 自社 | Stripe は中身を持てない |
| 会員との紐付け | 自社(会員の正本=users) |
5.3 |
status='merged' で残る)の後も、過去の Customer は残るため。権利の付与先は統合先の会員へ辿って決める。Stripe の Customer は消さない。entitlements)に付け、教材の閲覧判定だけをそこへ切り替える。既存会員の教材の利用権は保持する。この案は、異なる 2 つの AI モデルに独立に防御レビューを依頼し、どちらも「条件付き採用可」だった。条件は 5 章に反映済み。要点:
enrollments に書かない。enrollments には状態の列が無く、返金で止めるには行を消すしかないため。既存コードで確認した修正点(返金時の権利停止の条件・二重購入の判定範囲・管理画面の有料会員数の数え方の3点)は、セキュリティ上の理由でこのページには書かず、リポジトリの設計メモ docs/COMMERCE_STRIPE_CENTRIC_PROPOSAL_20261009.md §6 に記載しています。
| 判断 | 対象 |
|---|---|
| 捨てる | 自社を値段の正本にする仕組み(offer_prices・price_revision_intents・Checkout の price_data)、管理画面の商品・値段の編集画面、セットを重ねる構造(migration 129・130) |
| 薄くして残す | 教材との対応・販売承認・変更履歴(=販売台帳。Stripe の商品カタログは複製しない) |
| 残す | Webhook の受け口・署名検証・イベントの重複排除、checkout_intents(固定明細)、注文、注文別の権利、監査ログ、日次照合(migration 128 の途中再開・異常台帳)、教材の閲覧判定(教材だけの checkAccess)、公開・下書き・プレビューの保護、教材の販売可否検査(checkCourseSale) |
| 直して残す | 返金・異議の状態遷移(6 章)、名寄せ時の注文の持ち主の扱い |
handoff/commerce-kiyo-20260930(packages/db/migrations/126〜130、packages/db/src/commerce.ts、apps/worker/src/lib/commerce-stripe.ts、apps/worker/src/routes/commerce.ts)educare_admin/site/functions/_lib/crm_db.tsAI に渡す場合は commerce_stripe_plan_20261009.md をそのまま使ってください。