公務員すきま予備校|2026年10月9日

販売管理を Stripe 中心で組む案

Stripe で何ができるかの調査結果と、販売管理の体制案(商品・値段・決済・返金は Stripe、権利と会員の紐付けは自社)をまとめました。キヨさんと、キヨさんが使う AI に渡すための資料です。AI にはページ下の Markdown をそのまま渡せます。

Markdown をダウンロード(AI に渡す用)

1. 現状の棚卸し(事実)

項目 現状
売上の経路 教材は今も 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 系統)への接続と、既存会員の利用権の新しい権利表への移し替え。

2. 要約

  1. 外部のカート・講座プラットフォーム・オープンソースを広く調べたが、今回の目的に合うものは無く、Stripe を中心にまとめることにした。
  2. 「カードや口座の情報を持ちたくない」は、Stripe の決済画面(Checkout)を使う今の作りで既に満たしている。
  3. 方針は「Stripe にまとめられるものは Stripe に、どうしても自社が要るものだけ自社に」。商品・値段・決済画面・返金・売上確認は Stripe、権利の付与と停止・教材の中身・会員との紐付けは自社。
  4. 自社には薄い「販売台帳」(Stripe の値段 ID と教材の対応・販売状態)を置き、権利はそこから付ける。Stripe の商品に書いたメモ(metadata)だけで権利を付けるのは危ないため。
  5. 9/30 の基盤のうち、自社の値段管理と商品編集画面は捨て、Webhook・注文・権利・返金/異議・日次照合は使い回す。
  6. 最初の本番は「公開済み教材の単品と固定セットを、カードの単発払いで売る」だけに絞る。
  7. 独立した 2 本の設計レビューの判定は、どちらも「条件付き採用可」。条件は 6 章。

構築イメージ(図解)

文章で書いた体制案(5 章)を図にしました。カード情報と取引の記録は Stripe 側だけにあり、自社は「誰がどの教材を見てよいか」と会員の紐付けだけを持ちます。

図 1 全体の構成(どこに何を置くか)

会員(ブラウザ) 会員サイトmembers.educarelog.net教材を読む・値段を見る「購入する」ボタン 自社(Cloudflare Workers + D1) 販売台帳Stripe の値段 ⇔ 教材 注文と固定明細買った中身を凍結 権利(閲覧の可否)付与・停止・復帰 会員 CRM(正本)会員 ⇔ Stripe 顧客 通知の受け口(署名検証)・毎日の突き合わせ(照合) Stripe 商品・値段管理画面で作成・改定 決済画面(Checkout)カードはここで入力 取引の記録決済・返金・異議・入金領収書メール 管理画面返金・売上確認・権限 カード・口座の情報はここだけ 運営(キヨ・敏) ① 購入の要求 ② 決済画面を作る ③ 会員がカードを入力(自社を通らない) ④ 決済完了・返金の通知(Stripe → 自社) 販売開始・停止 商品・値段の作成、返金はStripe の管理画面で

青い矢印=購入の流れ、橙の矢印=Stripe から自社への通知。自社の「販売台帳」に載っていない Stripe の商品は、決済画面を作らず、権利も付けません(独立レビューの条件)。

図 2 購入の流れ

会員 自社 Stripe 1. 「購入する」(表示した値段の ID を送る) 2. 確認:ログイン会員か/台帳で販売中か  同じ教材を持っていないか/未完了の決済は無いか  → 買う中身を固定した注文の下書きを作る 3. 決済画面を作る(値段 ID・顧客) 4. 会員を決済画面へ → カード入力・3D セキュア(自社を通らない) 5. 決済完了の通知(署名つき) 6. 通知を信じ切らず Stripe に状態を確認  → 固定した明細どおりに権利を付ける 7. 教材が読めるようになる 取りこぼした通知は、毎日の突き合わせ(照合)で拾う

図 3 返金・異議(チャージバック)のとき

運営Stripe の管理画面で返金 Stripe返金・異議を記録 自社通知を受けて、その注文の権利だけを止める 会員その教材が読めなくなる 最初の本番は「全額返金の成功」で停止。一部返金・返金失敗は例外の一覧に出して人が処理。異議に勝てば権利は自動で戻る。

3. Stripe で何ができるか(調査結果)

出典は Stripe 公式(docs.stripe.com・stripe.com/jp/pricing、2026-10-08〜09 に取得)。

3.1 商品と値段

3.2 決済ページ

3.3 取引の記録と運用

3.4 セキュリティ

3.5 日本の決済手段と手数料(標準料金・2026-10-08 時点)

手段 手数料 制約
カード 3.6% 3D セキュアは上記のとおり対応
コンビニ 3.6%(最低 ¥120) サブスクの Checkout では使えない。¥500 の商品なら手数料は実質 24%
PayPay 3.98%(デジタルコンテンツ事業は 9.48%) 継続課金は不可。教材が「デジタルコンテンツ事業」に当たるかは未確認
Stripe Billing(サブスク) 取引額の 0.7% —

3.6 使わないと決めたもの

4. 外部システムの比較調査(なぜ入れないか)

種類 主な候補 結果
日本の 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 と自社基盤で大半ができている。時間がかかっている部分(既存の閲覧判定への接続・既存会員の利用権の移し替え)は、どの外部システムを入れても自社に残る。

5. 販売管理体制案

5.1 置き場所の仕分け

機能 置き場所 備考
商品名・説明・値段・値段の改定 Stripe(Product / Price) 管理画面で作成
決済ページ Stripe Checkout 自社サーバーが販売台帳の Price ID で作成
領収書・返金・異議・売上確認 Stripe の管理画面 管理画面に売上画面は作らない
クーポン Stripe のプロモーションコード 最初の本番では使わない(5.4)
販売台帳(Stripe の値段 → 教材の対応・販売状態) 自社 権利付与の正本
販売開始・停止 自社の管理画面 教材が公開済み・本文ありかを検査してから台帳に載せる
決済完了 → 権利付与 自社 Webhook → 決済状態を API で確認 → 台帳の固定明細から付与(冪等)
返金・異議 → 権利の停止・復帰 自社 Webhook で自動。最初は全額返金の成功だけで停止
教材の中身・下書きと公開 自社 Stripe は中身を持てない
会員との紐付け 自社(会員の正本=users) 5.3

5.2 購入の流れ

  1. 会員画面の値段は、販売台帳の写しから表示する(Stripe を表示のたびには叩かない。Stripe 障害を閲覧に波及させないため)。
  2. 購入ボタン → 自社サーバーが、①ログイン会員か ②台帳で販売中の Price か(表示した Price ID と照合)③同じ教材を既に持っていないか ④未完了の決済が無いか、を確かめる。
  3. 購入内容(教材の集合・金額・台帳の版)を固定した注文の下書きを作り、その会員の Stripe Customer と Price ID で Checkout セッションを作る。
  4. Webhook で決済完了を受けたら、通知の中身を信用せず Stripe API で状態を取り直し、固定した明細から権利を付ける。
  5. 日次の照合で「払ったのに権利が無い」「返金したのに権利が残っている」「台帳に無い決済」を検出する。

5.3 会員との紐付け

5.4 最初の本番の範囲

6. 独立レビューで付いた条件と、既存コードの修正点

この案は、異なる 2 つの AI モデルに独立に防御レビューを依頼し、どちらも「条件付き採用可」だった。条件は 5 章に反映済み。要点:

  1. Stripe の metadata を権利付与の正本にしない。管理画面で誰でも商品を作れ、metadata は検証されないため、付け忘れや書き間違いが「払ったのに読めない」に直結する。→ 自社の販売台帳を正本にする。
  2. Stripe で商品を有効にしても、教材が下書きのことがある。→ 販売開始を自社の操作にして公開検査を通す。教材を下書きに戻したら台帳を止め、Stripe の Price も無効にする(自社 → Stripe の一方向)。購入者のいる教材は公開版を消せないようにする。
  3. 日次照合は残す(Webhook の順序・重複・取りこぼしのため)。台帳と紐付かない通知は「解決待ち」として残し、後から再処理できるようにする。
  4. 権利は enrollments に書かない。enrollments には状態の列が無く、返金で止めるには行を消すしかないため。
  5. Stripe 側の守り: 個人別アカウント・2 段階認証必須・最小権限。Worker の鍵は返金の書き込み権限を持たない制限付きキー 1 本にし、テストと本番で鍵・Webhook の署名値を分ける。

既存コードで確認した修正点(返金時の権利停止の条件・二重購入の判定範囲・管理画面の有料会員数の数え方の3点)は、セキュリティ上の理由でこのページには書かず、リポジトリの設計メモ docs/COMMERCE_STRIPE_CENTRIC_PROPOSAL_20261009.md §6 に記載しています。

7. 9/30 の基盤から捨てるもの・残すもの

判断 対象
捨てる 自社を値段の正本にする仕組み(offer_prices・price_revision_intents・Checkout の price_data)、管理画面の商品・値段の編集画面、セットを重ねる構造(migration 129・130)
薄くして残す 教材との対応・販売承認・変更履歴(=販売台帳。Stripe の商品カタログは複製しない)
残す Webhook の受け口・署名検証・イベントの重複排除、checkout_intents(固定明細)、注文、注文別の権利、監査ログ、日次照合(migration 128 の途中再開・異常台帳)、教材の閲覧判定(教材だけの checkAccess)、公開・下書き・プレビューの保護、教材の販売可否検査(checkCourseSale)
直して残す 返金・異議の状態遷移(6 章)、名寄せ時の注文の持ち主の扱い

8. 決めたいこと

  1. この体制(Stripe 中心・自社は販売台帳と権利と会員の紐付け)で進めてよいか。
  2. 要件の変更: 以前の要件「管理画面だけで商品作成を 5 分以内に完結」を、「Stripe で商品と値段を作り、管理画面で教材を結んで販売開始」に変えてよいか。
  3. Stripe 管理画面の権限の運用: 誰が商品・値段を作り、誰が返金・異議に対応するか。

9. 参考(リポジトリ内)

AI に渡す場合は commerce_stripe_plan_20261009.md をそのまま使ってください。