Autentisering API
Genom ett standardiserat GET-frågegränssnitt hämtar moonpacket aktivt 'belöningsregler' och 'användarattribut' från din server. Alla logiska bedömningar hanteras av moonpacket.
Interaktionslogik
Hela processen är indelad i två faser: 'Inställningsfas' och 'Körfas'. moonpacket kommer att skicka förfrågningar till ditt API med GET-metoden:
Fas 1: Definiera regler (konfiguration)
⚡ Utlösande händelse: när URL:en fylls i 'Inställningar för ansökningsvillkor' och skickas
Fas 2: Validera användare (Körning)
⚡ Utlösande händelse: när användaren försöker göra anspråk på Red Packet
💡 Stödda operatörer: `eq` (lika med, stöder strängar/nummer), `gt` (större än), `gte` (större än eller lika med), `lt` (mindre än), `lte` (mindre än eller lika med). Värden för icke-`eq` operatörer måste vara nummer.
Användningsscenarier
GameFi-integration
Definiera regeln `level >= 10`. När användaren hämtar, kontrollerar moonpacket användarens attribut, om `level: 12` så godkänns det.
Identitetsbundsningsbelöning
Definiera regeln `kyc == true`. moonpacket kontrollerar användarstatusen, och om den returnerar `kyc: true`, så distribueras belöningarna.
Blacklist-filtering
Definiera regel `is_blacklist == false`. Om API:et returnerar `is_blacklist: true`, avvisas anspråket.
Exempel på kommunikation (GET-förfrågan)
Mode A 1. Definiera regler (Inställning)
När inställningar skickas, returnera JSON som innehåller operatörer.
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. Frågestatus (Körning)
När användaren gör anspråk, returnera rena värden eller strängar.
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
}
} Datainstruktionsdefinition (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;
};
} 🔐 Säkerhetsvalidering
För att säkerställa äktheten av förfrågningar kommer moonpacket att inkludera en signatur i Headern. Du kan hänvisa till koden till höger för validering:
Nödvändiga rubriker
Signaturalgoritm
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); ⚠️ Observera
- ● Tidsgräns: Se till att API:et kan returnera resultat inom 3 sekunder.
- ● Format: Vänligen följ noggrant JSON-strukturen, annars kan det leda till parserfel.
Statuskoder
| Statuskod | Status | Beskrivning |
|---|---|---|
| 200 | OK | Begäran lyckades |
| 400 | Bad Request | Fel på begärningsparameter (t.ex. formatfel). |
| 401 | Unauthorized | Behörighetsheader saknas eller nyckeln är ogiltig. |
| 403 | Forbidden | IP-restriktion eller obehörig åtkomst till resursen. |
| 404 | Not Found | Användar-ID finns inte (för att fråga användarstatus-scenarier). |
| 500 | Server Error | Intern serverfel. |
⚠️ Tredjeparts API-disclaimer
Integrationsmetoderna för tredjepartsplattformar som nämns i detta dokument är endast av referenskaraktär. Utvecklare bör konsultera och följa den senaste officiella utvecklardokumentationen för plattformen.