マイライセンス一覧

以下は、ユーザー向けポータルで提供する「マイライセンス一覧」ページの仕様および運用ガイドです。ブロックエディタにそのまま貼り付けて使えるよう、テキスト/リスト/コードのみで構成しています。


目的

  • 購入済み(または発行済み)のライセンスキーの一覧表示
  • キーの閲覧(マスク/フル表示の切替)・コピー
  • アクティベーション状態(使用ドメイン数/残数)の可視化
  • ドメインの解除(=スロット解放)
  • プランのアップグレード開始(差額課金)

ここは「エンドユーザー(購入者)」が自分のライセンスをセルフサービスで管理する画面です。管理者は別途「管理画面>ライセンス」で同様の操作が可能です。


ページ構成(推奨UI)

  • 見出し:マイライセンス
  • サブヘッダ:メールアドレス(ログインユーザーのもの)と注意書き
  • フィルタバー
    • キーワード検索(製品名/ライセンスキーの一部でヒット)
    • ステータス(active/expired/revoked)
    • ソート(発行日/更新日/製品名/使用数)
  • リストテーブル
    • カラム例:
      • 製品名(Product)
      • ライセンスキー(マスク表示+[表示/隠す]・[コピー])
      • ステータス(active / expired / revoked)
      • 期限(Expires)
      • 使用状況(Used / Limit / Remaining)
      • アクション(ドメイン管理/アップグレード)
  • ページネーション(10〜50件/ページ)

表示データ仕様

  • 製品名:AppCotton の「プロダクト」名称
  • ライセンスキー:既定はマスク(ABCD-****-****-WXYZ
    • ボタン「表示/隠す」で切り替え
    • ボタン「コピー」でフルキーをクリップボードにコピー
  • ステータスactive(使用可)/ expired(期限切れ)/ revoked(無効)
  • 期限YYYY-MM-DD HH:MM(未設定は
  • 使用状況
    • used:現在アクティブなドメイン数
    • limit:上限(-1 は無制限)
    • remaining:残り使用可能枠(無制限は 表示)

できること(ユーザー操作)

1) ライセンスキーの閲覧・コピー

  • 表示/隠す:マスク⇄フルのトグル
  • コピー:クリックでフルキーをコピー(完了トースト表示)

2) ドメイン管理(解除)

  • ライセンス行の「ドメイン管理」を押下 → モーダル表示
  • モーダル内に現在アクティブなドメイン一覧domain / first_activated_at / last_checked_at
  • 選択したドメインを解除(deactivate)すると枠が1つ空き、新しいサイトで再アクティベーション可能
  • 解除後は使用状況カウンタを即時更新(AJAX)

3) プランのアップグレード開始(差額課金)

  • 「アップグレード」ボタン → プラン比較ダイアログ
    • 現在のプラン(例:3サイト)
    • 目標プラン(例:5サイト/無制限)
    • 差額(プロレートではなく差分のみ前提)
  • 「進む」で**チェックアウト(Stripe)**へ遷移
  • 成功後、ライセンスの activation_limit が更新され、一覧にも反映

内部フロー(概要)

A. 一覧データの取得

  1. ログインユーザーIDをキーに、該当ユーザーのライセンスを取得
  2. 各ライセンスごとに usageused/limit/remaining/activations)を付与
  3. JSON をページに埋め込み or REST で逐次取得し、テーブル描画

B. ドメイン解除

  1. ライセンスキー+ドメインを指定して /licenses/deactivate を呼ぶ
  2. 成功時:used/remaining を再計算し、テーブルを更新
  3. 失敗時:エラーをトースト表示(ネットワーク/権限/ドメイン不一致等)

C. 差額アップグレード

  1. 画面で目標プランを選択
  2. /checkout(upgrade start)相当のエンドポイントで差額の支払いセッションを作成
  3. Stripe 成功リダイレクト後、バックエンドでライセンスの activation_limit を更新
  4. 一覧をリロードして新しい上限を表示

セキュリティと権限

  • 本人のみ閲覧:ログイン必須。ユーザーIDまたはメールの照合でスコープ制限
  • キー表示の既定はマスク:フルキーはユーザー操作時のみ表示
  • CSRF:REST 呼び出し時に X-WP-Nonce を必須化
  • レート制限:連打対策としてキー表示/コピー/解除の頻度制御(前端またはAPI側)

エラー表示(利用者向け)

  • ネットワークエラー
    • 「ネットワークエラーです。時間をおいて再度お試しください。」
  • 権限エラー(未ログイン/他人のライセンス):
    • 「この操作を行う権限がありません。」
  • ビジネスルール(解除不可など):
    • 「このドメインはすでに解除済みです。」
    • 「上限に達しています。アップグレードをご検討ください。」
  • 決済失敗
    • 「お支払いが完了しませんでした。もう一度お試しください。」

画面要素の最小セット(ブロック例)

  • 見出し:H2: マイライセンス
  • 段落: ユーザーの登録メールを表示(例:example@domain.tld でログイン中
  • 検索ブロック+プルダウン(ステータス/ソート)
  • テーブルブロック(上記カラムを列で定義)
  • ページネーション(ナビ)
  • 注釈ブロック:
    • 「※ ライセンスキーは既定でマスク表示されます。」
    • 「※ ドメイン解除後、同じライセンスキーで別ドメインを再認証できます。」

REST/API 呼び出し(参考コード)

// 例:使用状況の取得(キーを入力済みの前提)
const res = await AppCottonLicense.getUsage('YOUR-LICENSE-KEY');
if (res && typeof res.used !== 'undefined') {
  // used / limit / remaining / activations[] をテーブルに反映
}
// 例:ドメイン解除
const result = await AppCottonLicense.deactivate('YOUR-LICENSE-KEY', 'https://example.com');
if (result.success) {
  // テーブル行の used/remaining を更新
} else {
  // result.message をユーザに表示
}

よくある質問(FAQ)

Q. ライセンスキーが表示されない/コピーできない
A. ブラウザのクリップボード許可設定をご確認ください。HTTPS 環境での利用を推奨します。

Q. ドメイン解除をしても使用数が減りません
A. ネットワークキャッシュの可能性があります。数秒待ってから再読込。解消しない場合は管理者へお問い合わせください。

Q. 上限に達しました。どうすれば使えますか?
A. 「アップグレード」から上位プランに差額で変更可能です。あるいは使っていないドメインを解除してください。


運用メモ(管理者向け)

  • 「設定>ポータル」からポータルページのスラッグ表示上限並び順を調整可能にしておくと管理が楽です。
  • 問い合わせ対応のため、**監査ログ(解除履歴/アップグレード履歴)**の保持を推奨します。
  • 差額課金の計算は、「現在のプラン価格」⇄「目標プラン価格」の差分を原則とし、クーポンや期間限定価格の適用ルールを別途明記してください。

以上です。ユーザーはここからキー閲覧/ドメイン解除/アップグレードを自走でき、管理者の問合せ対応コストを大きく削減できます。