OD Product Hub
Contract verification and license management for WordPress products integrated with Stripe.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/olein-jp/od-product-hub/archive/refs/heads/main.zipStripe Checkout / Subscription と WordPress ユーザーを結び、プロダクト、顧客、契約、ライセンスキー、契約検証APIを一元管理する WordPress プラグインです。対象環境は WordPress 7.0、PHP 8.3 以上(CI検証範囲: PHP 8.3〜8.5)です。
本プラグインは100% GPL方針のプロダクト販売を想定した契約検証基盤です。GPLコードの利用自体を法的・技術的に制限する目的ではありません。契約終了後も入手済みコードは利用でき、アップデート、サポート、契約者向け資料などのサービス提供可否を検証します。
現在の実装
- 独自テーブル(商品、顧客、契約、ライセンス、Webhook/API/管理操作ログ)
- Stripe設定と商品登録の管理画面
- Stripe Checkout、Customer Portal、署名検証済みWebhook
- 運用ダッシュボード、検索・ページング対応ログ、日次ログ保持処理
- Checkout完了時のWordPressユーザー・顧客・契約・ライセンス作成
/activate、/verify、/deactivate、/product、/updates/check、/downloads/{token}REST APIとレート制限- ComposerクライアントSDK、24時間キャッシュ、通信障害時の72時間猶予
- WordPress標準更新と連携するUpdater、署名済みZIP、一回利用の更新URL
- 上位HubによるOD Product Hub自身の契約認証、日次再確認、署名付き製品更新
[odph_checkout product="example-plugin"]と[odph_my_account]- 支払い失敗、解約、管理停止を表現できる契約状態モデル
ドキュメント
- Hub APIを利用するプラグイン開発者: クライアントSDK導入ガイド
- RESTルートとレスポンス契約: REST API
- 自動更新、署名鍵、秘密ストレージの運用: 更新配布
- Hub本体の構成と依存境界: アーキテクチャ
- OD Product Hub自身の販売元ライセンス: 製品ライセンス運用
- Hub配布ZIPの生成と新規環境試験: リリース手順
- Stripe設定と本番運用: Stripe設定 / 運用
MVPリリースチェックリスト は初回MVP判定時点の履歴資料です。現在の提供機能一覧としては使用しません。
開発環境
npm install
composer install
npm run env:start
wp-env は WordPress 7.0 / PHP 8.3 を使用し、http://localhost:8888 で起動します(admin / password)。
npm test
npm run test:database
npm run test:api
npm run test:integration
npm run test:i18n
npm run test:release
composer lint
composer phpstan
composer test
対応言語と翻訳
プラグインの原文は英語で、日本語翻訳を同梱しています。WordPressのサイト言語に応じて管理画面、購入・契約画面、通知、既定のメールテンプレートが切り替わります。商品名や商品説明、保存済みのカスタムメールテンプレートなど、管理者が入力したデータは自動翻訳されません。
翻訳を更新する場合は npm run build:i18n で languages/od-product-hub.pot を再生成し、languages/od-product-hub-ja.po を更新してから、次のコマンドでMOファイルを生成します。
msgfmt --check --check-format \
--output-file=languages/od-product-hub-ja.mo \
languages/od-product-hub-ja.po
初期設定
- 管理画面の「OD Product Hub → 設定」でStripeキー、Webhook Secret、完了/キャンセルURLを設定します。
- 商品管理で
prod_...と recurringprice_...を登録します。ライセンスキー接頭辞は任意で、新規商品の既定値は空欄です。 - StripeのWebhook URLに
/wp-json/od-product-hub/v1/stripe/webhookを登録します。 - 購入ページへ
[odph_checkout product="商品スラッグ"]、マイページへ[odph_my_account]を配置し、設定画面でマイページを指定します。
ローカルWebhook転送例:
stripe listen --forward-to http://localhost:8888/wp-json/od-product-hub/v1/stripe/webhook
stripe trigger checkout.session.completed
API
POST /wp-json/od-product-hub/v1/verify:
{
"license_key": "ABCD-EFGH-JKLM-NPQR",
"product_slug": "example-plugin",
"site_url": "https://example.com",
"plugin_version": "1.0.0",
"wp_version": "7.0",
"php_version": "8.3"
}
詳細は docs/API.md と docs/STRIPE_SETUP.md を参照してください。利用側では クライアントSDK が24時間キャッシュと、一時的な通信障害に対する72時間の猶予を実装しています。
ライセンスキーは既定で ABCD-EFGH-JKLM-NPQR、商品に接頭辞を設定した場合は MYAPP-ABCD-EFGH-JKLM-NPQR 形式です。既発行の ODPH-... キーも引き続き利用できます。接頭辞は識別・ブランド表示用であり、秘密情報ではなく認証強度も高めません。
実Stripeイベントの最終確認は、テストモード限定の docs/STRIPE_CLI_TEST.md に従ってください。
公開リポジトリとプライバシー
Stripe APIキー、Webhook Secret、本番URL、.env、wp-config.php、DBダンプ、顧客・ライセンス・ログデータをコミットしないでください。本番ではHTTPS、最小権限、バックアップ、秘密情報のローテーション、GitHub Secret Scanningを有効にしてください。
ダッシュボードとログ運用、payloadのマスキング、保持期間、手動削除については docs/OPERATIONS.md を参照してください。
サイトのプライバシーポリシーには、決済をStripeへ委託すること、氏名・メール・契約・認証元URL/IP/User-Agentを契約管理・不正防止・サポート目的で保持すること、保持期間と問い合わせ先を明記してください。記載例は docs/PRIVACY_POLICY_EXAMPLE.md です。
脅威と対策は docs/THREAT_MODEL.md、GitHub側のSecret ScanningとBranch protection手順は docs/REPOSITORY_SECURITY.md にまとめています。
ライセンス
GPL-2.0-or-later。セキュリティ報告は SECURITY.md を参照してください。