認証API
標準化されたGETクエリインターフェースを通じて、moonpacketはあなたのサーバーから「報酬ルール」と「ユーザー属性」を積極的に取得します。すべての論理判断はmoonpacketによって処理されます。
インタラクションロジック
全プロセスは2つのフェーズに分かれています: 'セットアップフェーズ' と 'ランタイムフェーズ'。moonpacket は GET メソッドを使用してあなたの API にリクエストを送信します:
フェーズ1: ルールの定義(設定)
⚡ トリガーイベント: 'クレーム条件設定' にURLが入力され、送信されたとき
フェーズ2: ユーザーの検証(実行時)
⚡ トリガーイベント: ユーザーがレッドパケットを申請しようとしたとき
💡 サポートされている演算子: `eq` (等しい、文字列/数字をサポート), `gt` (より大きい), `gte` (以下または等しい), `lt` (より小さい), `lte` (以下または等しい)。非`eq`演算子の値は数字である必要があります。
アプリケーションシナリオ
GameFi統合
ルール『level >= 10』を定義します。ユーザーが請求すると、moonpacketはユーザーの属性を確認します。もし`level: 12`であれば、承認されます。
IDバインディング報酬
`kyc == true` というルールを定義します。moonpacket はユーザーのステータスを確認し、もし `kyc: true` が返された場合、報酬が配布されます。
ブラックリストフィルタリング
ルール `is_blacklist == false` を定義します。APIが `is_blacklist: true` を返す場合、申請は拒否されます。
通信の例(GETリクエスト)
Mode A 1. ルールを定義する (セットアップ)
設定を送信する際は、演算子を含むJSONを返してください。
GET /check HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 987654
X-API-SIGNATURE: 5d41402abc4b2a76b9719d911017c592...
# No user_id = Get Rules {
"data": {
"level": {
"gt": 99
},
"status": {
"eq": "active"
},
"is_blacklist": {
"eq": false
}
}
} Mode B 2. クエリステータス(ランタイム)
ユーザーがクレームを行った場合、純粋な値または文字列を返します。
GET /check?user_id=666666666 HTTP/1.1
Host: api.your-game.com
Content-Type: application/json
X-API-KEY: 1234567890
X-API-TIMESTAMP: 1698765432
X-API-NONCE: 123456
X-API-SIGNATURE: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6...
# With user_id = Get User Status {
"data": {
"level": 100,
"status": "active",
"is_blacklist": false
}
} データ構造定義(TypeScript)
// Step 1: Rules Definition
interface RulesResponse {
data: {
[key: string]: {
eq?: string | number | boolean;
gt?: number;
gte?: number;
lt?: number;
lte?: number;
};
};
}
// Step 2: User Status
interface UserStatusResponse {
data: {
[key: string]: string | number | boolean;
};
} 🔐 セキュリティ検証
リクエストの信頼性を確保するために、moonpacketはヘッダーに署名を含めます。検証のために右側のコードを参照してください:
必要なヘッダー
署名アルゴリズム
import crypto from "crypto";
// 1. Generate Signature
function generateSignature(
apiSecret: string,
body: object,
timestamp: number,
nonce?: string
) {
const payload = JSON.stringify(body) + timestamp + (nonce || "");
return crypto.createHmac("sha256", apiSecret).update(payload).digest("hex");
}
// Client Usage Example
const apiKey = "client123";
const apiSecret = "mysecretkey";
const body = { /* Query Params or Body */ };
const timestamp = Date.now();
const nonce = crypto.randomBytes(8).toString("hex");
const signature = generateSignature(apiSecret, body, timestamp, nonce);
console.log({ apiKey, timestamp, nonce, signature });
// 2. Verify Signature
function verifySignature(
apiSecret: string,
body: object,
timestamp: number,
nonce: string,
signature: string
) {
const expected = generateSignature(apiSecret, body, timestamp, nonce);
return expected === signature;
}
// Verification Result
const isValid = verifySignature(apiSecret, body, timestamp, nonce, signature);
console.log("Is Valid:", isValid); ⚠️ 注意
- ● タイムアウト: APIが3秒内に結果を返せることを確認してください。
- ● フォーマット: JSON構造を厳守してください。さもないと解析エラーが発生します。
ステータスコード
| ステータスコード | ステータス | 説明 |
|---|---|---|
| 200 | OK | リクエスト成功 |
| 400 | 不正なリクエスト | リクエストパラメータエラー(例:フォーマットが不正です)。 |
| 401 | 認証されていません | Authorization Headerが欠損しているか、キーが無効です。 |
| 403 | 禁止 | IP制限やリソースへの無許可アクセス。 |
| 404 | 見つかりません | ユーザーIDが存在しません(ユーザーステータスシナリオのクエリ用)。 |
| 500 | サーバーエラー | 内部サーバーエラー。 |
⚠️ 第三者API免責事項
本ドキュメントに記載されているサードパーティプラットフォームの統合方法は、参考の目的のみです。開発者はプラットフォームの最新の公式開発者ドキュメントを参照し、遵守する必要があります。