ドメイン認証の仕組み

AppCotton のライセンスは、単に「ライセンスキーが正しいか」だけではなく、
どのドメインで使用されているか を検証することで正当な利用を保証します。

これにより、複数サイト・代理店・開発環境など、さまざまな使用シーンで柔軟に対応できます。


認証の基本フロー

アプリ / プラグイン側のコードから、AppCotton API に対して POST リクエスト を送信します。

/wp-json/appcotton/v1/licenses/validate

送信される情報:

キー説明
license_keyユーザーが入力 / 保持しているライセンスキー
product_slug製品識別子(例: combpass_premium
domain現在動作しているサイトのドメイン(正規化前でも可)
site_urlフルURL(オプション・履歴確認用)

AppCotton側での確認処理

リクエストを受け取ったサーバー側では、順に以下のチェックを行います。

1. ライセンスキーが存在するか?

存在しない → invalid_license

2. ライセンスが active 状態か?

expired → expired_license
revoked → revoked_license

3. product_slug が一致しているか?

キーが別製品向けなら → wrong_product

4. ドメインを正規化(normalize)する

例:

https://www.example.com/  → example.com
http://sub.example.com → sub.example.com
クエリ・トラッキング → すべて無視

5. ドメインがすでに登録されているか?

  • すでに登録済み → そのまま last_checked_at 更新
  • 未登録 → 次のステップへ

6. 利用可能サイト数のチェック(activation_limit)

状況判定
登録済み + 新規ドメイン < サイト数上限✅ 新規登録(アクティベーション)
上限に達している❌ domain_limit_reached

アクティベーション保存の仕組み

新しいドメインが認証された場合、以下のように記録します:

wp_appcotton_license_activations

license_id: ライセンスID
domain: 正規化後のドメイン
status: active
first_activated_at: 現在日時
last_checked_at: 現在日時

既存登録ドメインの場合は、last_checked_at のみ更新します。


なぜ last_checked_at を更新するのか?

  • ライセンスが本当に「利用され続けている」か追跡できる
  • 長期間アクセスされていないサイトを「自動整理」できる
  • 制作会社が引き渡し後に使用状況を確認できる

解除(deactivation)

ユーザーは「不要になったドメイン」をマイページから解除できます。

status: active → deactivated

解除後:

利用可能サイト数 = 残り枠 + 1

→ 新しいサイトで再利用可能


同じサイト内でのマルチ環境対応

必要に応じて、開発 / 本番を区別するために instance_id を使うことができます。

例:

環境instance_id
localhost:8888dev
staging.example.comstaging
example.comproduction

認証結果レスポンス例

成功(active)

{
  "status": "active",
  "licensed": true,
  "remaining_slots": 2
}

上限超過

{
  "error": "domain_limit_reached",
  "message": "ライセンスの使用可能数を超えています。不要なドメインを解除してください。"
}

期限切れ

{
  "error": "expired_license"
}

まとめ

1. アプリが API に license_key + domain を送信する
2. サーバー側でライセンス状態をチェックする
3. ドメインを正規化し、使用状況テーブルに記録する
4. サイト数上限・期限切れ・取り消しが自動反映される
5. ユーザーは不要ドメインを解除して再利用可能