ライセンスは、購入・認証・使用のライフサイクルの中で、
「利用できる状態」と「利用できない状態」を往復することがあります。
本章では、ライセンスの停止(無効化)・再利用(再有効化)・失効予約(期限が来たら無効にする) について解説します。
1. 失効(expire / revoke)
失効とは?
ライセンスが 利用不可になる ことを指します。
失効は主に以下の2つのケースがあります:
| タイプ | 説明 | トリガー | 認証結果 |
|---|---|---|---|
| expire(期限切れ) | 有効期限を過ぎた状態 | サブスク未更新 / 定期支払停止 | ❌ 利用不可 |
| revoke(取り消し) | 管理側の判断で停止 | 不正利用・返金後 等 | ❌ 利用不可(再利用できない) |
expire(期限切れ)の代表ケース
- 年額 / 月額プランの支払いが停止
- Stripe がカード更新に失敗しリトライにも失敗
流れ:
Stripe → invoice.payment_failed
↓
猶予期間(任意)
↓
期限到達
↓
AppCotton がライセンスを expired に更新
revoke(取り消し)の代表ケース
| ケース | 管理判断の例 |
|---|---|
| 不正配布 or シェアが発覚した | 利用権を強制的に停止 |
| 返金対応を行った | 正当利用が成立しないため |
| 法人契約の権利移転が必要 | 新アカウントへライセンス再発行する前提 |
注意revoked は 管理者による強制停止 であり、
ユーザーは自分では解除できません。
2. ライセンスキーの再発行(実際には再表示)
AppCotton では、ライセンスキーは「作り直さない」のが原則です。
キーを再発行するとは、「再表示」することを意味します。
ライセンスキーは同じまま → ユーザーが再度確認できるようにする
理由
| 理由 | 説明 |
|---|---|
| 既に配布されたプラグインで使われている可能性がある | 突然変更すると全サイトが認証失敗 |
| カスタマーサポート負担が大幅に増える | 「なぜ動かない?」問題が増える |
| キーは本人確認であり「秘密鍵」ではない | あくまで「利用権識別」 |
再表示手順
ユーザー側:
マイページ → ライセンス一覧 → 表示
管理者側:
AppCotton → ライセンス → 対象 → 「キーを表示」
3. 失効予約(サブスクの自然終了)
失効予約とは:
「今は使えるが、期限が来たら失効する」状態
これは、サブスク型プランで最も一般的な状態です。
表現:
| 項目 | 値 |
|---|---|
| status | active |
| expires_at | 期限日が未来に設定されている |
→ expires_at を過ぎると自動で expired へ遷移します。
失効予約となる代表ケース
| 状況 | 説明 |
|---|---|
| サブスクを 「更新しない」 にユーザーが切り替えた | 次回更新を止めた状態 |
| 法人契約の利用期限が決まっている | 年次契約など |
4. 失効 → 再有効化(復帰)
再有効化できるケース
| 状態 | 復帰可能? | 方法 |
|---|---|---|
| expired(期限切れ) | ✅ | 再課金 / 再購入 / 再更新 |
| revoked(取り消し) | ❌(原則) | 管理者が新しいライセンスを発行する |
買い切りプランの場合
- expires_at が NULL なら → 永続利用
- サポート期限だけを別で管理してもよい(※別フィールド)
5. UIでの表示の考え方
| 状態 | マイページ表示例 | CTA |
|---|---|---|
| active | ✅ 利用中 | ライセンスキー表示 / ドメイン管理 |
| expired | ⚠️ 有効期限切れ | 「更新する」 ボタン |
| revoked | ⛔ 利用停止 | 「サポートにお問い合わせください」 |
6. まとめ
• expired = 期限切れ(再購入・再課金で復帰可能)
• revoked = 管理者による取り消し(再利用不可)
• ライセンスキー自体は変えず「再表示」を基本とする
• サブスクは expires_at により自然に失効する
• 失効予約 = 将来の失効がスケジュールされている状態