§2 SDKクライアント:is_premium と検証API

この章では、AppCotton SDK が提供する ライセンス検証の中心機能である
is_premium()validate() について解説します。
これらは、製品(プラグイン / SaaS / Webアプリ)が プレミアム機能を開放する条件を決定するための基盤です。


is_premium() の役割

is_premium() は、ライセンスが以下の条件をすべて満たしている場合に true を返します:

チェック項目判定内容
ライセンスキーが存在するユーザーがキーを登録済みか
ライセンスが active 状態expired / revoked ではない
対象の product_slug と一致別製品のキーではない
ドメインが正しくアクティベート済み利用可能枠内であること
期限が切れていないexpires_at > now または NULL

結果

結果意味UI/機能挙動
true有効プレミアム機能を開放
false無効アップグレード誘導 or ロック

実装例(最小構成)

function yourplugin_is_premium(): bool {
    $license_key = get_option('yourplugin_license_key');
    return AppCotton_SDK::is_premium($license_key);
}

使用例

if ( yourplugin_is_premium() ) {
    // プレミアム機能有効
    include __DIR__ . '/premium/feature.php';
} else {
    // 無料版UIを表示
    yourplugin_show_upgrade_banner();
}

validate() API の詳細

validate() は、ライセンスキーの状態と使用状況(サイト数など)を
AppCotton サーバーに照会して取得する関数です。

呼び出し例

$result = AppCotton_SDK::validate($license_key);

返却例(成功)

{
  "status": "active",
  "product_slug": "combpass_premium",
  "license_id": 123,
  "usage": {
    "used": 2,
    "limit": 3,
    "remaining": 1
  },
  "expires_at": null,
  "activated": true
}

返却例(期限切れ)

{
  "error": "expired_license",
  "message": "このライセンスは有効期限が切れています。"
}

返却例(サイト数上限)

{
  "error": "domain_limit_reached",
  "remaining_slots": 0
}

is_premium() は validate() の結果をキャッシュします

項目説明
キャッシュ方法transient
既定TTL5分(cache_ttl で変更可能)
キャッシュ破棄activate() / deactivate() 実行時に自動パージ

これにより 毎回APIを叩かずに高速判定 が可能になります。


フローチャート

is_premium()
↓ 既存キャッシュある?
Yes → キャッシュ結果を返す
No → validate() API 実行
     ↓
     結果に応じて True/False 判定
     ↓
     成功なら結果をキャッシュ

なぜ「is_premium() だけで運用できる設計なのか」

API用途フラグ化したもの
validate()状態・使用状況を問い合わせる機能レベルで必要なときに使う
is_premium()機能を開放できるかを判定validate() の結果を抽象化したもの

つまり、開発者は基本的に is_premium() だけを使えばよいように設計されています。


典型的な使い分け

シーン推奨関数理由
機能を表示してよいか判定したいis_premium()簡潔・最速
「使用中のサイト数」を UI に表示したいvalidate()usage 情報を取得する必要がある
ドメイン登録/解除処理activate() / deactivate()ライセンス使用枠の更新が必要

まとめ

• is_premium() は「今このユーザーはプレミアム利用可能か」を返す
• validate() はライセンスの状態・使用状況を詳細に取得する
• is_premium() は validate() の結果を内部キャッシュして高速動作
• 開発者は UI/機能制御に is_premium() を使うだけで良い