# 火星BOT授权系统插件对接开发文档

> 适用站点：`https://bot.booboy.cn`  
> 核心插件接口：`/api/Communication.php`  
> 推荐模式：`c=api` 明文 JSON + 签名校验。旧加密模式也存在，但插件开发建议统一用 `c=api`。

---

## 1. 插件对接总流程

插件/客户端通常按下面顺序接入授权：

```text
1. 初始化 Initialization
   ↓ 获取 token、公告、更新地址
2. 登录授权 Login
   ↓ 校验账号/卡密/绑定信息
3. 上线确认 GoOnline，可选
   ↓ 用于处理单开/挤下线逻辑
4. 心跳 OnlineHeart，必须循环调用
   ↓ 维持在线状态、扣余额/刷新 htime
5. 读取信息，可选
   ├ GetAppInfo
   ├ GetUserInfo
   └ GetCustumData
6. 退出 OffLine
```

重要：后台“在线人数”已经按 `sq_user.htime` 判断：

```text
60秒内插件调用过 OnlineHeart 的授权用户 = 在线
```

所以插件必须定时调用 `OnlineHeart`，建议每 60 秒一次，建议每 30-60 秒调用一次。

---

## 2. 通信地址

### 推荐 API 模式

```http
POST https://bot.booboy.cn/api/Communication.php?appid=应用ID&c=api&sign=签名
Content-Type: application/x-www-form-urlencoded

data=JSON字符串
```

示例：

```http
POST /api/Communication.php?appid=1&c=api&sign=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

data={"mod":"Initialization","ddition":1}
```

### 旧加密模式

```http
POST /api/Communication.php?appid=应用ID&sign=签名

data=加密后的字符串
```

旧模式依赖 `/function/Encryption.class.php` 的自定义动态加密，第三方插件不建议用，除非要兼容旧客户端。

---

## 3. 应用密钥

每个应用在后台都有两组密钥：

```text
ConnectKey：通信密钥
DecryptKey：解密/签名密钥
```

后台可在应用管理里查看/重置密钥。

插件里必须保存：

```text
appid
connectkey
decryptkey
```

---

## 4. 签名算法，c=api 模式

### 请求签名

请求里的 `data` 是 JSON 字符串，签名算法：

```php
sign = md5(connectkey . md5(md5(data . connectkey) . decryptkey) . decryptkey)
```

### PHP 示例

```php
function hx_sign($data, $connectKey, $decryptKey) {
    return md5($connectKey . md5(md5($data . $connectKey) . $decryptKey) . $decryptKey);
}

$payload = json_encode([
    'mod' => 'Initialization',
    'ddition' => 1,
], JSON_UNESCAPED_UNICODE);

$sign = hx_sign($payload, $connectKey, $decryptKey);
```

### JS/Node 示例

```js
const crypto = require('crypto');
function md5(s) {
  return crypto.createHash('md5').update(s, 'utf8').digest('hex');
}
function hxSign(data, connectKey, decryptKey) {
  return md5(connectKey + md5(md5(data + connectKey) + decryptKey) + decryptKey);
}
```

---

## 5. 返回格式，c=api 模式

服务端返回外层 JSON：

```json
{
  "code": 1,
  "msg": "ok",
  "data": {
    "sign": "返回数据签名",
    "data": "内层JSON字符串"
  }
}
```

内层 `data` 也是 JSON 字符串，例如：

```json
{
  "code": 1,
  "msg": "ok",
  "data": {
    "token": "xxxx",
    "notice": "公告内容"
  }
}
```

插件收到后建议：

```text
1. 解析外层 JSON
2. 取 outer.data.data 作为 innerRaw
3. 用同样签名算法计算 hxSign(innerRaw)
4. 比对 outer.data.sign
5. 解析 innerRaw
```

---

## 6. 核心授权接口

路径统一：

```text
/api/Communication.php?appid=应用ID&c=api&sign=签名
```

POST 参数统一：

```text
data=JSON字符串
```

---

### 6.1 初始化 Initialization

用于获取 token、公告、更新信息。

请求 data：

```json
{
  "mod": "Initialization",
  "ddition": 1
}
```

字段说明：

| 字段 | 必填 | 说明 |
|---|---:|---|
| mod | 是 | 固定 `Initialization` |
| ddition | 是 | 客户端版本号，必须是数字，用于强制更新判断 |

成功返回：

```json
{
  "code": 1,
  "msg": "ok",
  "data": {
    "updateurl": "更新地址",
    "updatelog": "更新日志",
    "notice": "应用公告",
    "token": "初始化token"
  }
}
```

可能错误：

| code | 含义 |
|---:|---|
| -1 | appid 不能为空 |
| -2 | sign 不能为空/长度不对 |
| -3 | 签名校验失败 |
| -4 | 应用信息获取失败 |
| -101 | 当前客户端版本过低，需要更新 |
| -102 | 应用已停用 |

---

### 6.2 登录授权 Login

登录时根据应用后台的 `logintype` 不同，字段不同。

通用请求：

```json
{
  "mod": "Login",
  "token": "初始化返回的token",
  "user": "用户名或卡密",
  "pass": "密码，可选",
  "mac": "设备码，可选",
  "robot": "机器人QQ/绑定QQ，可选",
  "ip": "客户端IP，可选"
}
```

#### 登录类型 zhmm：账号密码

```json
{
  "mod": "Login",
  "token": "xxx",
  "user": "账号",
  "pass": "密码",
  "mac": "设备码",
  "robot": "机器人QQ"
}
```

#### 登录类型 kmsq：卡密授权

```json
{
  "mod": "Login",
  "token": "xxx",
  "user": "卡密",
  "mac": "设备码",
  "robot": "机器人QQ"
}
```

#### 登录类型 jcbd：检查绑定

```json
{
  "mod": "Login",
  "token": "xxx",
  "mac": "设备码",
  "robot": "机器人QQ",
  "ip": "客户端IP"
}
```

成功返回：

```json
{
  "code": 1,
  "msg": "ok"
}
```

常见错误：

| code | 含义 |
|---:|---|
| -201 | 初始化超时或 token 不存在 |
| -202 | 用户名不能为空 |
| -203 | 密码不能为空 |
| -204 | 用户名错误 |
| -205 | 密码错误 |
| -211 | 卡密不能为空 |
| -212 | 卡密不存在 |
| -221 | 未查询到绑定授权 |
| -231 | 授权被冻结 |
| -232 | 授权到期 |
| -233 | 余额不足 |
| -234 | IP 绑定不一致 |
| -235 | 设备码绑定不一致 |
| -236 | QQ 绑定不一致 |
| -301 | 已在别处登录，触发单开限制 |

---

### 6.3 上线确认 GoOnline

用于处理在线检查/单开逻辑。不是每个插件都必须用，但如果应用开启了 `onlinecheck`，建议 Login 成功后调用一次。

请求：

```json
{
  "mod": "GoOnline",
  "token": "登录token"
}
```

成功：

```json
{
  "code": 1,
  "msg": "ok"
}
```

---

### 6.4 在线心跳 OnlineHeart

插件必须定时调用，用于：

```text
1. 刷新 token.lastest
2. 更新 sq_user.htime
3. 余额型授权扣余额
4. 后台/代理后台在线人数统计
```

请求：

```json
{
  "mod": "OnlineHeart",
  "token": "登录token"
}
```

成功返回：

```json
{
  "code": 1,
  "msg": "ok",
  "data": {
    "time": 1720000000,
    "o": "余额扣除成功或空"
  }
}
```

建议频率：

```text
每 60 秒一次
```

在线人数判定：

```text
当前时间 - sq_user.htime <= 60 秒，即 60 秒内有心跳 = 在线
```

---

### 6.5 获取应用信息 GetAppInfo

请求：

```json
{
  "mod": "GetAppInfo",
  "token": "登录token"
}
```

返回当前应用配置，包含版本、公告、更新、登录类型、绑定设置等字段。

---

### 6.6 获取用户信息 GetUserInfo

请求：

```json
{
  "mod": "GetUserInfo",
  "token": "登录token"
}
```

成功返回授权用户完整信息，常见字段：

| 字段 | 说明 |
|---|---|
| username | 授权账号/卡密 |
| mac | 绑定设备码 |
| lip | 绑定 IP |
| rqq | 绑定机器人 QQ |
| balance | 到期时间戳或余额 |
| htime | 最近心跳时间 |
| status | 1 正常，0 冻结 |
| appid | 应用 ID |
| aid | 所属代理 ID |

---

### 6.7 获取自定义数据 GetCustumData

请求：

```json
{
  "mod": "GetCustumData",
  "token": "登录token"
}
```

返回后台应用里配置的自定义数据：

```json
{
  "code": 1,
  "data": {
    "data": "后台应用自定义数据"
  }
}
```

注意：系统里拼写就是 `GetCustumData`，不是 `GetCustomData`。

---

### 6.8 退出 OffLine

请求：

```json
{
  "mod": "OffLine",
  "token": "登录token"
}
```

作用：删除当前 token。

成功：

```json
{
  "code": 1,
  "msg": "ok"
}
```

---

## 7. c=api 请求完整示例，PHP

```php
<?php
$base = 'https://bot.booboy.cn/api/Communication.php';
$appid = 1;
$connectKey = '你的ConnectKey';
$decryptKey = '你的DecryptKey';

function hx_sign($data, $connectKey, $decryptKey) {
    return md5($connectKey . md5(md5($data . $connectKey) . $decryptKey) . $decryptKey);
}

function hx_request($mod, $payload = []) {
    global $base, $appid, $connectKey, $decryptKey;
    $payload['mod'] = $mod;
    $data = json_encode($payload, JSON_UNESCAPED_UNICODE);
    $sign = hx_sign($data, $connectKey, $decryptKey);
    $url = $base . '?appid=' . urlencode($appid) . '&c=api&sign=' . $sign;

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query(['data' => $data]),
        CURLOPT_TIMEOUT => 10,
    ]);
    $raw = curl_exec($ch);
    curl_close($ch);

    $outer = json_decode($raw, true);
    if (!$outer || $outer['code'] != 1) {
        throw new Exception('接口外层返回异常：' . $raw);
    }

    $innerRaw = $outer['data']['data'];
    $innerSign = $outer['data']['sign'];
    if (hx_sign($innerRaw, $connectKey, $decryptKey) !== $innerSign) {
        throw new Exception('返回签名校验失败');
    }
    return json_decode($innerRaw, true);
}

// 1. 初始化
$init = hx_request('Initialization', ['ddition' => 1]);
$token = $init['data']['token'];

// 2. 登录
$login = hx_request('Login', [
    'token' => $token,
    'user' => '授权账号或卡密',
    'pass' => '密码',
    'mac' => '设备码',
    'robot' => '机器人QQ',
]);

// 3. 心跳，建议循环定时执行
$heart = hx_request('OnlineHeart', ['token' => $token]);
```

---

## 8. c=api 请求完整示例，Node.js

```js
const crypto = require('crypto');

const base = 'https://bot.booboy.cn/api/Communication.php';
const appid = 1;
const connectKey = '你的ConnectKey';
const decryptKey = '你的DecryptKey';

function md5(s) {
  return crypto.createHash('md5').update(s, 'utf8').digest('hex');
}
function hxSign(data) {
  return md5(connectKey + md5(md5(data + connectKey) + decryptKey) + decryptKey);
}

async function hxRequest(mod, payload = {}) {
  payload.mod = mod;
  const data = JSON.stringify(payload);
  const sign = hxSign(data);
  const url = `${base}?appid=${appid}&c=api&sign=${sign}`;

  const res = await fetch(url, {
    method: 'POST',
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body: new URLSearchParams({data}),
  });
  const outer = await res.json();
  if (outer.code !== 1) throw new Error(JSON.stringify(outer));

  const innerRaw = outer.data.data;
  if (hxSign(innerRaw) !== outer.data.sign) throw new Error('返回签名校验失败');
  return JSON.parse(innerRaw);
}
```

---

## 9. 前台公共 AJAX 接口

这些接口主要给网站前台页面用，也可以被插件/外部系统调用，但通常需要人机验证 token 或页面流程配合。

路径：

```text
/ajax.php?mod=接口名
```

| mod | 用途 | 主要参数 |
|---|---|---|
| queryauth | 查询授权 | `qq`, `token` |
| macauth | 查询设备码 | `mac`, `token` |
| kmauth | 查询卡密 | `km`, `token` |
| FieldKamiOpen_First | 套餐卡密自助授权第一步 | `kami`, `token` |
| buy_applist | 获取可购买应用列表 | 无 |
| loadbuylist | 获取套餐购买列表 | `loadbuylist=appid` |
| buy_first | 购买第一步/表单 | 依页面流程 |
| buy_submit | 提交购买授权 | 依页面流程 |
| buy_agent | 自助开通代理 | `lid`, `username`, `password`, `qq`, `zffs`, `zxzffs`, `kt_key`, `token` |
| levellist | 获取可购买代理级别 | 无 |
| changegetform | 换绑表单 | `appid` |
| ChangeGetVerCode | 换绑获取验证码 | 动态字段 + `token` |
| postchange | 提交换绑 | 动态字段 |
| introduce | 应用介绍 | `appid` |

前台页面：

| 页面 | 说明 |
|---|---|
| `/query.php` | 查询授权 |
| `/mac.php` | 查询设备码 |
| `/km.php` | 查询卡密 |
| `/auth.php` | 自助授权 |
| `/change.php` | 更换授权 |
| `/openuser.php` | 开通代理 |
| `/代理QQ` | 代理专属官网首页 |

---

## 10. 总后台接口索引

路径：

```text
/Adminx/ajax.php?mod=接口名
```

需要总后台登录态。

主要接口：

### 登录态

| mod | 说明 |
|---|---|
| login | 总后台登录 |
| checklogin | 检查登录态 |
| changepassword | 修改密码 |
| gettoken | 获取后台 accesstoken |
| resettoken / retoken | 重置 token |

### 仪表盘/日志

| mod | 说明 |
|---|---|
| getsysinfo | 总后台统计，包含访问量、今日访问、在线数量 |
| getnotice | 系统公告 |
| getuplog | 更新日志 |
| getvisitlogs | 首页访问日志，含 IP、归属地、时间、路径 |
| sitelog | 系统日志相关 |

### 应用管理

| mod | 说明 |
|---|---|
| getapplist | 应用列表 |
| addapp | 添加应用 |
| delapp | 删除应用 |
| savechange | 保存应用字段 |
| appkey | 查看/重置应用通信密钥 |
| resetkey | 重置应用密钥 |
| saveintroduce | 保存应用介绍 |
| introduce | 获取应用介绍 |
| getgrideinfo | 获取授权表单字段配置 |

### 授权用户

| mod | 说明 |
|---|---|
| getuserlist | 授权用户列表 |
| changeuser | 修改授权用户 |
| deluser | 删除授权用户 |
| user_applist | 用户筛选应用列表 |
| loadbuybody | 加载开通授权表单 |
| buy_submit | 后台开通授权 |

### 代理/等级

| mod | 说明 |
|---|---|
| getagentlist | 代理列表 |
| addagent | 添加代理 |
| changeagent | 修改代理 |
| coldagent | 冻结代理 |
| uncoldagent | 解冻代理 |
| delagent | 删除代理 |
| getagentinfo | 获取代理信息 |
| agentlog | 代理日志 |
| getlevallist | 代理等级列表 |
| addgrade | 添加等级 |
| changegrade | 修改等级 |
| delgrade | 删除等级 |
| gradelist | 等级列表/选择项 |
| getsetlevel / setlevel | 等级配置 |

### 余额卡密

| mod | 说明 |
|---|---|
| creatkey | 生成余额卡密 |
| getkeylist | 余额卡密列表 |
| keystatus | 卡密状态 |
| coldkey | 冻结卡密 |
| uncoldkey | 解冻卡密 |
| delkey | 删除卡密 |
| download | 下载导出的卡密 |
| keylog | 卡密日志 |
| KeyOperation | 批量导出/删除余额卡密 |

### 套餐卡密

| mod | 说明 |
|---|---|
| fidlist_show | 套餐列表 |
| addfid | 添加套餐 |
| changefid | 修改套餐 |
| delfid | 删除套餐 |
| creatfidkey | 生成套餐卡密 |
| gettckeylist | 套餐卡密列表 |
| tckeystatus | 套餐卡密状态 |
| deltckey | 删除套餐卡密 |
| FidKeyOperation | 批量导出/删除套餐卡密 |

### 订单/支付/系统

| mod | 说明 |
|---|---|
| gettradelist | 订单列表 |
| deltrade | 删除订单 |
| suppletrade | 补单 |
| clearalltradeid | 清空订单 |
| clearbeenpay | 清空已支付订单 |
| clearnopay | 清空未支付订单 |
| getsysset | 获取系统设置 |
| savesysset | 保存系统设置 |
| savesiteinfo | 保存站点信息 |
| savenotice | 保存公告 |
| savemailset | 保存邮件配置 |
| sendtestmail | 发送测试邮件 |
| saveepayset | 保存易支付配置 |
| vaptcha | 保存人机验证配置 |
| addadmin | 添加管理员 |
| checkupdate / downloadupdatepacks / unzippacks | 更新相关 |

---

## 11. 二级后台接口索引

路径：

```text
/admin/ajax.php?mod=接口名
```

需要二级后台登录态。二级后台能力比总后台少，主要是用户、代理、卡密、购买和日志：

```text
login, checklogin, getsysinfo,
getuserlist, changeuser, deluser,
dl_applist, getgrideinfo,
getlevallist, addagent, getagentlist, coldagent, uncoldagent, getagentinfo, changeagent, delagent,
creatkey, getkeylist, keystatus, coldkey, uncoldkey, delkey, KeyOperation,
fidlist_show, creatfidkey, gettckeylist, tckeystatus, deltckey, FidKeyOperation,
loadbuybody, buy_submit,
keylog, agentlog,
getnotice, getuplog,
gettoken, resettoken,
savesignset, saveintroduce,
checkupdate, downloadupdatepacks, unzippacks, upload
```

---

## 12. 代理后台接口索引

路径：

```text
/user/ajax.php?mod=接口名
```

需要代理登录态。

### 登录态/仪表盘

| mod | 说明 |
|---|---|
| login | 代理登录 |
| checklogin | 检查代理登录态，返回 username/qq |
| getsysinfo | 代理统计：余额、等级、授权数、下级数、自己的访问量、自己的在线人数 |
| getnotice | 代理公告 |
| getvisitlogs | 当前代理自己的首页访问日志 |
| changepassword | 修改代理密码 |

### 授权用户

| mod | 说明 |
|---|---|
| getuserlist | 当前代理授权用户列表 |
| changeuser | 修改授权用户 |
| deluser | 删除授权用户 |
| buy_applist | 当前代理可开通应用列表 |
| buy_first | 购买/开通第一步 |
| buy_submit | 代理开通授权 |

### 充值/订单/升级

| mod | 说明 |
|---|---|
| recharge | 在线充值 |
| gettradelist | 订单列表 |
| deltrade | 删除订单 |
| clearalltradeid | 清空订单 |
| clearbeenpay | 清空已支付 |
| clearnopay | 清空未支付 |
| getbuylist | 获取可购买/升级列表 |
| updatelevel | 提升代理等级 |
| leveltips | 等级提示 |

### 下级代理

| mod | 说明 |
|---|---|
| getlevallist | 可开通级别 |
| addagenttips | 开通下级提示 |
| buyagent | 开通下级代理 |
| getagentlist | 下级代理列表 |
| changeagent | 修改下级代理 |
| delagent | 删除下级代理 |

### 卡密

| mod | 说明 |
|---|---|
| creatkey | 生成余额卡密 |
| getkeylist | 余额卡密列表 |
| delkey | 删除余额卡密 |
| KeyOperation | 余额卡密批量导出/删除 |
| buy_fidlist | 可购买套餐列表 |
| fidlist_show | 套餐列表 |
| creatfidkey | 生成套餐卡密 |
| gettckeylist | 套餐卡密列表 |
| tckeystatus | 套餐卡密状态 |
| deltckey | 删除套餐卡密 |
| FidKeyOperation | 套餐卡密批量导出/删除 |
| download | 下载导出卡密 |
| keylog | 卡密日志 |

---

## 13. 支付与订单回调

| 路径 | 说明 |
|---|---|
| `/payment.php?tradeno=订单号` | 打开支付页或使用余额/卡密支付 |
| `/payresult.php?tradeno=订单号` | 查询支付结果 |
| `/pay/epay/notify_url.php` | 易支付异步通知 |
| `/pay/epay/return_url.php` | 易支付同步返回 |
| `/api/monitor.php` | 订单补单/清理 token 监控脚本 |

---

## 14. 数据库字段和实时在线判定

### 授权用户表 sq_user 关键字段

| 字段 | 说明 |
|---|---|
| ID | 授权用户 ID |
| username | 授权账号/卡密 |
| password | 授权密码 |
| mac | 设备码 |
| lip | 最近/绑定 IP |
| rqq | 机器人 QQ |
| appid | 应用 ID |
| aid | 所属代理 ID |
| balance | 到期时间戳或余额 |
| htime | 最近心跳时间 |
| ltime | 最近登录时间 |
| status | 状态，1 正常 |

### token 表 sq_token

| 字段 | 说明 |
|---|---|
| token | 初始化/登录 token |
| uid | 授权用户 ID |
| appid | 应用 ID |
| ip | 初始化 IP |
| addtime | 初始化时间 |
| start | 登录开始时间 |
| lastest | 最近心跳时间 |

### 在线人数规则

```text
总后台在线数量：sq_user.htime >= time() - 60
代理后台在线人数：sq_user.aid = 当前代理ID AND sq_user.htime >= time() - 60
```

---

## 15. 插件开发注意事项

1. `Initialization` 必须先调用，拿到 token 后才能 `Login`。
2. `Login` 成功不代表在线人数会增加；必须持续调用 `OnlineHeart`。
3. `OnlineHeart` 建议每 60 秒调用一次。
4. 退出插件时调用 `OffLine` 删除 token。
5. 插件必须校验服务端返回签名，避免伪造授权返回。
6. `c=api` 模式不加密，只签名；如果传输敏感字段，必须走 HTTPS。
7. 绑定逻辑由后台应用设置决定：IP、设备码、QQ 是否绑定。
8. 余额授权类型 `kcye` 会在心跳时扣余额。
9. 到期授权类型 `dqsj` 的 `balance` 是到期时间戳，`-1` 表示不限期。
10. 系统里 `GetCustumData` 拼写就是这样，插件不要写成 `GetCustomData`。

---

## 16. 最小插件伪代码

```text
init = request(Initialization, {ddition: 本地版本})
if init.code != 1: 停止并提示

token = init.data.token

login = request(Login, {
  token,
  user: 授权账号或卡密,
  pass: 密码,
  mac: 本机设备码,
  robot: 机器人QQ
})
if login.code != 1: 停止并提示 login.msg

每 60 秒：
  heart = request(OnlineHeart, {token})
  if heart.code != 1:
      停止插件并提示 heart.msg

退出时：
  request(OffLine, {token})
```

---

## 17. 当前系统已发现的全部 mod 名称

### `/api/Communication.php`

```text
Initialization, Login, GoOnline, OnlineHeart, GetCustumData, GetAppInfo, GetUserInfo, OffLine
```

### `/ajax.php`

```text
queryauth, macauth, kmauth, FieldKamiOpen_First, buy_applist, loadbuylist,
buy_first, buy_submit, FieldKeyBuy_submit, buy_agent, levellist,
changegetform, ChangeGetVerCode, postchange, introduce, zfb, wx, qq
```

### `/Adminx/ajax.php`

```text
login, checklogin, getsysinfo, getvisitlogs, getapplist, addapp, delapp, savechange,
appkey, resetkey, getuserlist, changeuser, deluser, user_applist, loadbuybody, buy_submit,
getagentlist, addagent, changeagent, coldagent, uncoldagent, delagent, getagentinfo, agentlog,
getlevallist, addgrade, changegrade, delgrade, gradelist, getsetlevel, setlevel,
creatkey, getkeylist, keystatus, coldkey, uncoldkey, delkey, download, keylog, KeyOperation,
fidlist_show, addfid, changefid, delfid, creatfidkey, gettckeylist, tckeystatus, deltckey, FidKeyOperation,
gettradelist, deltrade, suppletrade, clearalltradeid, clearbeenpay, clearnopay,
getsysset, savesysset, savesiteinfo, savenotice, savemailset, sendtestmail, saveepayset, vaptcha,
addadmin, getnotice, getuplog, gettoken, resettoken, retoken, checkupdate, downloadupdatepacks, unzippacks, upload
```

### `/admin/ajax.php`

```text
login, checklogin, getsysinfo, getuserlist, changeuser, deluser,
dl_applist, getgrideinfo, getlevallist, addagent, getagentlist, coldagent, uncoldagent,
getagentinfo, changeagent, delagent, savesignset, creatkey, getkeylist, keystatus,
coldkey, uncoldkey, delkey, download, KeyOperation, fidlist_show, creatfidkey,
gettckeylist, tckeystatus, deltckey, FidKeyOperation, loadbuybody, buy_submit,
agentlog, keylog, saveintroduce, upload, getnotice, getuplog, gettoken, resettoken,
checkupdate, downloadupdatepacks, unzippacks
```

### `/user/ajax.php`

```text
login, checklogin, getsysinfo, getvisitlogs, getnotice, buy_applist, buy_first, buy_submit,
getuserlist, changeuser, deluser, recharge, gettradelist, deltrade, clearalltradeid,
clearbeenpay, clearnopay, getbuylist, updatelevel, leveltips, getlevallist,
addagenttips, buyagent, getagentlist, changeagent, delagent, creatkey, getkeylist,
delkey, KeyOperation, buy_fidlist, fidlist_show, creatfidkey, gettckeylist,
tckeystatus, deltckey, FidKeyOperation, download, keylog, changepassword, zfb, wx, qq
```


---

## 18. 二次严格扫描补充：全量路由/子操作附录

> 说明：本节是按源码重新扫描 `$_GET['mod']`、`$data['mod']`、`switch case`、UEditor `action` 得出的补充清单。  
> 其中 `/function/PHPMailer.php` 内部的 `alt/html/plain/smtp/sendmail` 等 case 是第三方邮件库内部 MIME/发送模式，不是本系统 HTTP 接口，已排除。

### 18.1 插件真正必须对接的核心接口

插件授权只需要对接：

```text
/api/Communication.php
```

核心 mod 全量如下：

```text
Initialization
Login
GoOnline
OnlineHeart
GetCustumData
GetAppInfo
GetUserInfo
OffLine
```

这些已经在正文第 6 节逐项写了请求、参数、返回和错误码。

---

### 18.2 根目录前台 `/ajax.php` 全量 mod

```text
queryauth
macauth
kmauth
FieldKamiOpen_First
buy_applist
loadbuylist
buy_first
buy_submit
FieldKeyBuy_submit
buy_agent
levellist
changegetform
ChangeGetVerCode
postchange
introduce
zfb
wx
qq
```

用途：前台查询、自助授权、购买、换绑、开通代理、支付方式选择。

---

### 18.3 总后台 `/Adminx/ajax.php` 全量 mod / 子操作

#### 登录/状态

```text
login
checklogin
changepassword
gettoken
resettoken
retoken
```

#### 仪表盘/公告/日志

```text
getsysinfo
getvisitlogs
getnotice
getuplog
sitelog
```

#### 应用管理

```text
getapplist
addapp
delapp
savechange
appkey
resetkey
saveintroduce
introduce
getgrideinfo
```

应用字段/配置子字段 case，包括：

```text
app_name
yybb
yxjb
yxhb
bdip
bdjq
bdqq
gbyy
qzgx
gxdz
gxrz
yygg
zxjc
zxms
mfms
zqkc
jbkc
zdysj
czmz
imgsrc
```

这些多为 `savechange` 或应用配置里的字段名/类型分支，不是单独给插件调用的公共接口。

#### 授权用户

```text
getuserlist
changeuser
deluser
user_applist
loadbuybody
buy_submit
```

#### 代理/等级

```text
getagentlist
addagent
changeagent
coldagent
uncoldagent
delagent
getagentinfo
agentlog
getlevallist
addgrade
changegrade
delgrade
gradelist
getgradelist
getsetlevel
setlevel
```

#### 余额卡密

```text
creatkey
getkeylist
keystatus
coldkey
uncoldkey
delkey
download
keylog
KeyOperation
```

`KeyOperation` 的批量子操作：

```text
ExportNoUse
ExportNoMoney
ExportAll
DelNoMoney
DelNoUse
DelUse
DelAll
```

#### 套餐/套餐卡密

```text
fidlist_show
addfid
changefid
delfid
getfidlist
creatfidkey
gettckeylist
tckeystatus
deltckey
FidKeyOperation
```

`FidKeyOperation` 的批量子操作：

```text
ExportNoUse
ExportNoMoney
ExportAll
DelNoMoney
DelNoUse
DelUse
DelAll
```

#### 订单/支付/清理

```text
gettradelist
deltrade
suppletrade
clearalltradeid
clearbeenpay
clearnopay
saveepayset
savesignset
```

支付类型/方式子操作：

```text
zfb
wx
qq
```

#### 系统设置/邮件/验证/管理员/更新

```text
getsysset
savesysset
savesiteinfo
savenotice
savemailset
sendtestmail
vaptcha
addadmin
checkupdate
downloadupdatepacks
unzippacks
upload
```

#### 黑词/补充配置

```text
getbclist
addbc
delbc
```

#### 返回/日志类型标记，不建议当接口调用

```text
success
warning
danger
info
```

这些通常是日志类型或提示类型分支，不属于插件公共接口。

---

### 18.4 二级后台 `/admin/ajax.php` 全量 mod / 子操作

```text
login
checklogin
getsysinfo
getuserlist
changeuser
deluser
dl_applist
getgrideinfo
getlevallist
addagent
getagentlist
coldagent
uncoldagent
getagentinfo
changeagent
delagent
savesignset
creatkey
getkeylist
keystatus
coldkey
uncoldkey
delkey
download
KeyOperation
fidlist_show
creatfidkey
gettckeylist
tckeystatus
deltckey
FidKeyOperation
loadbuybody
buy_submit
agentlog
keylog
saveintroduce
upload
getnotice
getuplog
gettoken
resettoken
checkupdate
downloadupdatepacks
unzippacks
user_applist
getbclist
addbc
delbc
changepassword
```

批量子操作同总后台：

```text
ExportNoUse
ExportNoMoney
ExportAll
DelNoMoney
DelNoUse
DelUse
DelAll
```

---

### 18.5 代理后台 `/user/ajax.php` 全量 mod / 子操作

```text
login
checklogin
getsysinfo
getvisitlogs
getnotice
buy_applist
buy_first
buy_submit
getuserlist
changeuser
deluser
recharge
gettradelist
deltrade
clearalltradeid
clearbeenpay
clearnopay
getbuylist
updatelevel
leveltips
getlevallist
addagenttips
buyagent
getagentlist
changeagent
delagent
creatkey
getkeylist
delkey
KeyOperation
buy_fidlist
fidlist_show
creatfidkey
gettckeylist
tckeystatus
deltckey
FidKeyOperation
download
keylog
changepassword
zfb
wx
qq
```

批量子操作：

```text
ExportNoUse
ExportNoMoney
ExportAll
DelNoMoney
DelNoUse
DelUse
DelAll
```

---

### 18.6 登录退出入口

这些不是 `ajax.php?mod=`，但属于页面入口：

```text
/Adminx/index.php?mod=loginout
/admin/index.php?mod=loginout
/user/index.php?mod=loginout
```

当前新版页面中也有：

```text
/Adminx/logout.php
/admin/logout.php
/user/logout.php
```

---

### 18.7 UEditor/上传控制器 action

总后台：

```text
/Adminx/php/controller.php?action=config
/Adminx/php/controller.php?action=uploadimage
/Adminx/php/controller.php?action=uploadscrawl
/Adminx/php/controller.php?action=uploadvideo
/Adminx/php/controller.php?action=uploadfile
/Adminx/php/controller.php?action=listimage
/Adminx/php/controller.php?action=listfile
/Adminx/php/controller.php?action=catchimage
```

二级后台：

```text
/admin/php/controller.php?action=config
/admin/php/controller.php?action=uploadimage
/admin/php/controller.php?action=uploadscrawl
/admin/php/controller.php?action=uploadvideo
/admin/php/controller.php?action=uploadfile
/admin/php/controller.php?action=listimage
/admin/php/controller.php?action=listfile
/admin/php/controller.php?action=catchimage
```

这些是后台富文本/文件上传控件用的 action，不是插件授权通信接口。

---

### 18.8 独立页面/回调入口

```text
/index.php                 官方首页；/代理QQ 也会路由到这里
/query.php                 查询授权页
/mac.php                   查询设备码页
/km.php                    查询卡密页
/auth.php                  自助授权页
/change.php                更换授权页
/openuser.php              开通代理页
/payment.php?tradeno=订单号
/payresult.php?tradeno=订单号
/pay/epay/notify_url.php   易支付异步回调
/pay/epay/return_url.php   易支付同步返回
/api/monitor.php           订单补单/Token 清理监控脚本
```

---

## 19. 完整性说明

本文件现在分两层：

```text
正文第 1-16 节：插件开发者真正需要对接的核心接口和示例
第 17-18 节：源码扫描得到的全量接口/后台内部接口索引
```

如果只是写授权插件，优先看：

```text
/api/Communication.php
Initialization / Login / OnlineHeart / OffLine
```

如果要写自动化后台管理工具，再看：

```text
/Adminx/ajax.php
/admin/ajax.php
/user/ajax.php
```

注意：后台/代理后台接口需要登录 Session，不建议直接暴露给第三方插件。
