Skip to content

決済・アクセス制御方式の選定

項目内容
Issue#2384
親 Issue#2381 有料記事の体制を整える
関連 Issue#2390 決済・購読・アクセス制御
最終更新2026-06-20

1. 目的

有料記事(月 1 回更新)の 決済方法・購入管理・アクセス制御 の方式を選定し、実装 sub-issue(#2390)に渡せる要件を文書化する。

決済システムはバグが許されない領域であるため、決済 UI は Stripe Checkout に委譲し、購入記録と閲覧可否は WordPress 側の Webhook・カスタムテーブル・アクセス制御 Service を正とする。

2. 販売形態の確定

項目決定
販売形態単号購入のみ
月額サブスク対象外(継続課金・解約・失効の運用コストが大きいため)
バックナンバー各号を個別商品として販売
購入後のアクセス永久アクセス(購入した号は継続して閲覧可能)

単号購入を採用した理由

  • 月 1 配信のコンテンツ特性に合う(号ごとに完結した価値提供)
  • サブスクに比べ決済・失効・解約フローが単純で、バグリスクが低い
  • 初号〜数号は販売実績が未知数のため、購入ハードルを下げやすい

方式比較・未採用案・履歴は 決済-アクセス制御-検討.md に分離する。

3. 採用方式

項目方針
決済 UIStripe Checkout Session API
購入記録db_paid_article_purchase
閲覧判定PaidArticleAccessService
購入導線未ログイン時はログイン画面へ誘導し、購入 URL を redirect_to で保持
Webhook 正本checkout.session.completed で購入記録を付与

4. 未購入者への表示ルール

ルール案内容推奨
リードのみタイトル・冒頭・目次・固定セクション見出しのみ表示。本文・データは購入 CTA推奨(SEO・訴求のバランス)
全文非表示タイトルと「有料記事」バッジ、購入ボタンのみ訴求は弱いが実装は単純
ログイン必須(未購入も可)会員登録後にリード表示初期は不要(単号購入に WP アカウント必須はハードル)

推奨: リードのみ表示 + Stripe Checkout への購入ボタン

5. 過去号アクセスポリシー

項目方針
購入済み号永久アクセス(サブスク失効の概念なし)
未購入の過去号リードのみ。バックナンバーは 号ごとに単品購入
購入記録の保持返金・問い合わせ対応のため 最低 7 年 は注文 ID・購入者・post_id を保持(会計・税法は別途専門家確認)

購入記録の管理方式

購入記録は db_paid_article_purchase を正とする。ゲスト購入は扱わず、wp_users.IDpaid_article 投稿 ID を紐づける。

6. 決済プロバイダ・手数料

金額は 2026 年時点の公開情報に基づく目安。実際の契約・キャンペーンで変動するため、導入前に各サービスで再確認すること。

プロバイダ手数料(目安)入金サイクル備考
Stripe(日本・カード)3.6%週次など(アカウント設定による)Checkout 利用で PCI DSS は Stripe 側

: 1 号 500 円の場合、Stripe 手数料 ≒ 18 円。

7. 個人情報・領収書・返金ポリシー

項目方針
個人情報自サイトプライバシーポリシー + Stripe のデータ処理
領収書Stripe レシートを基本とする
返金返金ポリシーをサイトに明記し、Stripe から返金操作する
特商法表記自サイトに記載

方針: 返金ポリシー(デジタルコンテンツの扱い・期限)は 初号公開前 に #2392 運用チェックリストに明文化する。

自サイト販売では、利用規約(terms)・特定商取引法表記(tokushoho)・プライバシーポリシーを固定ページで表示し、フッター導線と有料記事 CTA 付近から参照できること。本文の正本は db_legal_document_version(管理画面「法務文書」)。Tokusho Generator / [tokusho] ショートコードには依存しない。会員再同意は利用規約の現行版(document_type=terms)のみ。詳細: 法務文書版管理.md

8. #2390 への引き渡し要件(サマリ)

実装 Issue #2390 では、自サイト販売で以下を満たす。

要件方針
未購入者表示リードのみ + 購入 CTA
購入済み表示対象 post_id の永久閲覧db_paid_article_purchase
ゲスト購入WP ログイン必須
購入記録の正カスタムテーブル(#2597)
Webhook署名検証・冪等キーを必須とする
購入可否テストStripe テストモードで購入から閲覧可否まで確認する

9. Stripe Checkout 単号購入(#2630)

Stripe Checkout + 自前アクセス制御の Checkout Session 作成部分。

項目設計
決済モードmode: payment(都度課金のみ)
通貨JPY(currency: jpy
価格db_member_plan_master.plan_key = paid_article_singleprice
metadatauser_id, post_id(Webhook #2631 で購入記録 INSERT に使用)
success_url記事パーマリンク + ?paid_article_checkout=success&session_id={CHECKOUT_SESSION_ID}
cancel_url記事パーマリンク + ?paid_article_checkout=cancel
購入導線リード CTA → admin-post.php?action=paid_article_checkout&post_id=... → Stripe Checkout
WebhookPOST /wp-json/commerce/v1/stripe-webhook(#2631)— checkout.session.completed で購入記録 INSERT
未ログインログイン画面へ誘導(redirect_to で購入 URL を保持)
購入済みCheckout 作成をスキップ(PaidArticleAccessService で判定)

10. 技術選定(#2629〜#2631)

Webhook・購入テーブル・アクセス制御は自サイト決済の必須要件とする。さらに Checkout Session API(動的生成) を採用し、user_id / post_id の metadata 付与・価格の DB 正本・号追加時の手動 Link 運用を避ける。

選定理由の詳細(「リンク貼り付けだけでは足りない」根拠、回避リスク、見直しトリガー)は Stripe決済-技術選定理由.md を参照。

11. 関連ドキュメント