§5 エラー規約(コード・メッセージ)

AppCotton SDK および REST API では、
ライセンス状態・使用状況・認証結果 を統一的に扱うために
標準化された エラーコード体系 を採用しています。

これにより、プラグイン開発者は複雑な状態判定を行わず、
UI 表示とロジック分岐を エラーコードベース で簡潔に実装できます。


エラーコード設計の意図

目的内容
UI表示を簡潔にする状態ごとに明確なメッセージ・案内導線が作れる
SDK内部の分岐を統一is_premium 判定などを単純な bool として扱える
APIレスポンスを安定化外部統合(SaaS / CLI / ライセンス配布など)に強い

基本構造(REST API の失敗レスポンス)

{
  "error": "error_code_here",
  "message": "ユーザーに表示する説明文",
  "http_status": 400
}

SDK 側では以下の形にラップされます:

[
  'success' => false,
  'error'   => 'error_code_here',
  'message' => 'ユーザー向けの説明'
]

エラー分類一覧

A. ライセンスキーに関するエラー

error意味対処
invalid_licenseライセンスキーが存在しない入力ミス / キー再確認
wrong_productproduct_slug が一致していない他製品のキーを使用しようとしている
revoked_license管理者により利用権が取り消しサポート案内が必要

B. ライセンス状態に関するエラー

error意味UIでの案内
expired_license有効期限切れ「更新する」ボタンを提示
suspended_license一時停止中(決済保留等)Stripe請求・決済状況を確認
inactive_license有効化が完了していない「このサイトで有効化」 ボタンを提示

C. ドメイン / アクティベーション制御

error意味対応
domain_limit_reached使用可能サイト数の上限に達したドメイン解除 UI へ誘導
domain_not_registered未アクティベート状態activate() を呼び出す
domain_blacklisted不正利用・アクセスブロック管理者対応が必要

D. API / ネットワーク / セキュリティ

error意味詳細
network_errorサーバーに到達できないタイムアウト / 一時的な障害
invalid_nonceWordPress認証失敗ログインセッション切れ
rate_limited連続アクセス制限一定時間後に再試行
server_errorサーバ内部エラー管理者確認が必要

UI メッセージテンプレート(推奨)

状況推奨文言
invalid_license「ライセンスキーが正しくありません。入力内容をご確認ください。」
expired_license「有効期限が切れています。更新することで再度利用可能になります。」
domain_limit_reached「利用可能なサイト数の上限に達しています。不要なサイトを解除してください。」
revoked_license「このライセンスは利用停止されています。サポートへお問い合わせください。」
network_error「通信に失敗しました。ネットワーク状態を確認して再度お試しください。」

is_premium() とエラーの関係

is_premium() は内部的に validate() を実行しますが、
UI側でエラーメッセージを出す必要はありません。

状態is_premium推奨挙動
activetrueプレミアム機能を表示
expired / revoked / domain_limit_reachedfalse「アップグレード / 更新 / 解除誘導」UIへ

UI設計は「成功は silent / 失敗時のみ案内」という思想です。


API / SDK エラーの流れ

validate() 実行
↓
REST API応答を受け取る
↓
error フィールドがあれば is_premium = false
↓
error に応じて UI で適切な導線を提示

開発チェックリスト

  • errorコードベースで分岐し UI を切り替える
  • message はユーザー向けにそのまま表示して問題ない内容
  • revokedexpired を UI で区別している
  • domain_limit_reached のとき解除導線が表示される
  • ネットワーク系は 再試行 + 案内 を表示

まとめ

• AppCotton は標準化されたエラーコード体系を採用
• is_premium() は内部的にエラーを吸収し「true/false」で返す
• UI で必要なのは error の種類に応じた案内導線
• domain_limit_reached / expired / revoked は特に重要