Files
mqsrv/API.md

462 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 码枪堂 weapon-tuner API 文档
> 来源:原版 `app.asar` 中 `dist/weapon-tuner.html` (v7.0.4)
> BASE_URL: `https://maqt.top`
> 复刻目标: `https://gch3n.online/delta`
---
## 全局约定
| 项目 | 值 |
|------|-----|
| 基础路径 | `/api` |
| 认证方式 | `Authorization: Bearer <JWT>` |
| 加密算法 | AES-256-CBC |
| 加密密钥 | `maqt-delta-force-2024-secret-key-32` |
| 密钥派生 | SHA-256(KEY) → 32字节 AES key |
| 密文格式 | `{ "encrypted": true, "iv": "hex", "data": "hex" }` |
### Unicode-safe Base64
```js
function base64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function(match, p1) { return String.fromCharCode('0x' + p1); }));
}
```
### 响应加密(服务端可选)
当响应中 `encrypted``true` 时,客户端执行:
```
hex(iv) → ArrayBuffer
hex(data) → ArrayBuffer
SHA-256(KEY) → AES-CBC.decrypt(iv, data) → UTF-8 → JSON.parse
```
---
## 端点列表
### 1. 获取武器分类
```
GET /api/weapon-categories
```
**响应:** (注意:部分条目缺 `category` 字段,前端实际用索引区分)
```json
{
"success": true,
"data": [
{ "category": "突击步枪", "scheme_count": 887 },
{ "scheme_count": 353 },
{ "category": "射手步枪", "scheme_count": 260 }
]
}
```
### 2. 获取武器列表
```
GET /api/weapons → 全部
GET /api/weapons?category=突击步枪 → 按分类(传中文名!)
```
**Query:**
| 参数 | 必填 | 说明 |
|------|------|------|
| `category` | 否 | **中文分类名**如 `突击步枪`,空则返回全部 |
**响应:**
```json
{
"success": true,
"data": [
{
"id": 1,
"weapon_name": "M7",
"display_name": "M7战斗步枪",
"category": "突击步枪",
"use_count": 143
}
]
}
```
GET /api/weapon-categories
```
**响应:**
```json
{
"success": true,
"data": [
{ "category": "AR", "display_name": "突击步枪" },
{ "category": "SMG", "display_name": "冲锋枪" },
{ "category": "SR", "display_name": "狙击步枪" },
{ "category": "LMG", "display_name": "轻机枪" },
{ "category": "SG", "display_name": "霰弹枪" },
{ "category": "Pistol", "display_name": "手枪" },
{ "category": "Launcher", "display_name": "发射器" }
]
}
```
---
### 2. 获取武器列表
```
GET /api/weapons
GET /api/weapons?category=AR
```
**Query:**
| 参数 | 必填 | 说明 |
|------|------|------|
| `category` | 否 | 分类代码,例如 `AR``SMG`。空则返回全部 |
**响应:**
```json
{
"success": true,
"data": [
{ "display_name": "M4A1" },
{ "display_name": "AK-47" }
]
}
```
---
### 3. 获取方案列表
```
GET /api/schemes → 烽火地带
GET /api/schemes_aob → 全面战场AOB
GET /api/favorites → 我的收藏(需登录)
```
**Query:**
| 参数 | 必填 | 说明 |
|------|------|------|
| `sort` | 是 | `hot` / `new` |
| `page` | 是 | 页码,从 1 开始 |
| `limit` | 是 | 固定 `12` |
| `weaponCategory` | 否 | 武器分类中文名,如 `突击步枪` |
| `weaponName` | 否 | 武器中文显示名,如 `M4A1` |
| `minPrice` | 否 | 最低价格(万) |
| `maxPrice` | 否 | 最高价格(万) |
| `search` | 否 | 搜索关键词 |
| `category` | 否 | `favorites` 模式用此字段传分类 |
**收藏模式额外 Headers** `Authorization: Bearer <token>`
**响应(解密后):**
```json
{
"success": true,
"data": [
{
"id": 1237,
"user_id": 1006,
"username": "揽贝电竞-迟到了",
"avatar": "https://...",
"description": "M7满改方案",
"scheme_content": "M7战斗步枪-烽火地带-6I17GK0059L1ICRB4NQP4",
"category": "突击步枪",
"weapon_name": "M7战斗步枪",
"price": "97W",
"tags": [],
"uses": 10299,
"total_historical_uses": 10298,
"status": "normal",
"source": 1,
"created_at": "2025-11-20T16:00:00.000Z",
"updated_at": "2026-05-23T17:09:11.000Z",
"partner_type": "club",
"partner_level": "bronze",
"partner_badge": "揽贝电竞",
"partner_logo": "https://...",
"social_link": null
}
],
"pagination": {
"page": 1,
"limit": 12,
"hasMore": true
}
}
```
> **注意:** `price` 是字符串含 `"W"` 单位(如 `"97W"``pagination` 只有 `{page,limit,hasMore}` 不返回 total。schemes_aob 模式不含 price 字段。
**响应(加密):**
```json
{
"encrypted": true,
"iv": "a1b2c3d4...",
"data": "e5f6a7b8..."
}
```
---
### 4. 发布方案
```
POST /api/schemes → 烽火地带
POST /api/schemes_aob → 全面战场
```
**Headers:**
| 键 | 值 |
|----|-----|
| `Content-Type` | `application/json` |
| `x-user-info` | `Base64({ id: number, username: string })` |
**Body**
```json
{
"description": "方案描述≤50字",
"category": "武器分类中文名,如 突击步枪",
"weaponName": "武器中文名,如 M4A1",
"scheme": "配置代码字符串",
"tags": [],
"price": 15
}
```
- `price` 仅烽火模式需要,范围 1-999
- `tags` 目前传空数组
**响应(成功):**
```json
{
"success": true
}
```
**响应(含敏感词):**
```json
{
"success": false,
"message": "内容包含敏感词",
"sensitiveWords": ["词1", "词2"]
}
```
---
### 5. 记录方案使用次数
```
POST /api/schemes/{schemeId}/use
POST /api/schemes_aob/{schemeId}/use
```
**响应:**
```json
{
"success": true,
"message": "使用次数已记录"
}
```
---
### 6. 举报方案
```
POST /api/schemes/{schemeId}/report
POST /api/schemes_aob/{schemeId}/report
```
**Headers:**
| 键 | 值 |
|----|-----|
| `Content-Type` | `application/json` |
| `Authorization` | `Bearer <token>` |
**Body**
```json
{
"reason": "invalid",
"description": "详细举报说明≤200字"
}
```
`reason` 枚举:
- `invalid` — 方案失效
- `inappropriate` — 内容不当
**响应:**
```json
{
"success": true
}
```
---
### 7. 收藏操作
#### 7.1 添加收藏
```
POST /api/favorites
```
**Headers:**
| 键 | 值 |
|----|-----|
| `Content-Type` | `application/json` |
| `Authorization` | `Bearer <token>` |
**Body**
```json
{
"schemeId": "方案ID",
"source": "烽火地带"
}
```
**响应:**
```json
{
"success": true,
"alreadyFavorited": false
}
```
#### 7.2 取消收藏
```
DELETE /api/favorites/{schemeId}?source={source}
```
`source`: `烽火地带``全面战场`
**Headers:** `Authorization: Bearer <token>`
**响应:**
```json
{
"success": true
}
```
#### 7.3 检查收藏状态
```
GET /api/favorites/check?schemeId={id}&source={source}
```
**Headers:** `Authorization: Bearer <token>`
**响应:**
```json
{
"isFavorited": true
}
```
---
### 8. 广告
#### 8.1 获取广告列表
```
GET /api/adverts/list
```
**响应:**
```json
{
"success": true,
"data": [
{
"id": "string",
"author": "广告主昵称",
"avatar": "头像URL",
"shareTime": "ISO 8601",
"title": "广告标题",
"description": "简短描述",
"image_url": "图片URL可选",
"link_url": "跳转链接",
"isVip": true
}
]
}
```
#### 8.2 记录广告点击
```
POST /api/adverts/{advertId}/click
```
**响应:**
```json
{
"success": true,
"message": "点击已记录"
}
```
---
### 9. 旧版武器分类(逐个获取)
```
GET /api/category/AR
GET /api/category/SMG
GET /api/category/SR
GET /api/category/LMG
GET /api/category/SG
GET /api/category/Pistol
GET /api/category/Launcher
```
**响应:** 直接返回武器对象数组(不包裹 `success`
```json
[
{ "display_name": "M4A1" },
{ "display_name": "AK-47" }
]
```
---
## 分类代码映射
| 代码 | 中文名 |
|------|--------|
| `AR` | 突击步枪 |
| `SMG` | 冲锋枪 |
| `SR` | 狙击步枪 |
| `LMG` | 轻机枪 |
| `SG` | 霰弹枪 |
| `Pistol` | 手枪 |
| `Launcher` | 发射器 |
---
## 前端状态变量
```js
let currentMode = 'schemes'; // 'schemes' | 'schemes_aob' | 'favorites'
let currentSort = 'hot'; // 'hot' | 'new'
let currentPage = 1;
let currentFilters = {
weaponCategory: '', // 分类代码如 'AR'
weaponName: '', // 武器中文显示名
minPrice: '', // 字符串
maxPrice: '',
search: ''
};
let hasMore = true;
let userToken = ''; // JWT token
```