开发者文档

本文档基于当前项目代码整理,包含动态验证网关、开发者后台 API、云端对接 API 的真实请求方式、鉴权规则、签名规则与示例。对接前请先在后台确认 APPID、APPKEY、加密模式、签名开关与时间戳校验配置。

动态验证网关

统一业务入口

客户端验证、登录、卡密、设备等业务通常都通过 `api.php` 进入,再由接口别名分发到具体模块。

https://n10.top/api.php?api=接口别名&app=APPID
开发者后台 API

应用、卡密、用户管理

用于开发者后台、移动端管理面板或自建工具拉取应用列表、统计信息、用户列表和更新配置。

https://n10.top/user/api.php
云端对接 API

远程开通与授权修改

适合代理系统、联运后台或远程开站脚本,支持添加授权、创建云端用户、变更授权域名。

https://n10.top/api/cloud_api.php

协议规则

网关地址 https://n10.top/api.php?api=接口别名&app=APPID

提交方式:`GET` 或 `POST`,实际以接口页面或客户端实现为准

返回格式:JSON 或接口自定义文本

字符编码:UTF-8

跨域策略:已开启 `Access-Control-Allow-Origin: *`

鉴权核心:APPID + APPKEY + 可选 Sign + 可选时间戳 `t` + 可选加密数据 `data`

支持加密:明文、RC4、Base64、RC4(hex2bin)、RSA、易验证 RSA 模式

签名算法:MD5 小写

字段 是否必填 位置 说明
apiQuery接口别名,对应 `yixi_program.api_path`。
app通常必填Query应用 ID,用于读取应用配置、APPKEY、加密方式。
sign按配置Query/Post外层签名;若开启 `mi_sign_in` 可改放加密前数据体内部。
data按配置Query/Post加密后的业务数据集合。
value可选Query/Post随机值或透传值,部分接口会使用。
t按配置数据体内Unix 秒级时间戳,启用时间校验时必须提交。

动态验证网关

统一入口文件:`/api.php`

关键参数来自 `api.php` 与 `api/app.php`:

GET /api.php?api=接口别名&app=APPID

可选参数:
- sign  外层签名
- data  加密后的数据体
- value 随机值/透传值
- other 默认加载的接口页面,未传时为 index

网关处理流程:

1. 校验接口目录与接口别名是否存在。

2. 校验应用是否存在、是否启用。

3. 校验接口是否已购买/是否过期/是否被关闭。

4. 根据应用配置解析数据:明文或加密数据。

5. 若启用签名,按 APPKEY 重新计算 MD5 并比对。

6. 若启用时间戳校验,检查 `t` 与服务器时间差是否超过 `mi_time`。

7. 将解析后的参数写入 `$data_arr`,再交由具体接口文件处理。

请求地址示例

https://n10.top/api.php?api=login&app=10001

明文请求示例

POST /api.php?api=login&app=10001
Content-Type: application/x-www-form-urlencoded

user=test001&password=123456&markcode=DEVICE001&t=1710000000&sign=md5结果

典型成功返回

{
  "code": 0,
  "msg": "success",
  "data": {
    "user": "test001",
    "expire": "2026-12-31 23:59:59"
  }
}

典型失败返回

{
  "code": 106,
  "msg": "签名错误"
}

Sign 计算方式

项目中的签名校验最终由 `Arr_sign($data_arr, $app_res['appkey'])` 完成。文档层面的使用规则如下:

1. 按实际提交的业务参数进行拼接
2. 在末尾追加 &APPKEY
3. 对最终字符串取 MD5
4. 使用小写结果作为 sign

示例:

原始参数:
user=test001
password=123456
inv=ABC123
markcode=DEVICE001
t=1710000000

拼接串:
user=test001&password=123456&inv=ABC123&markcode=DEVICE001&t=1710000000&APPKEY

结果:
sign = md5(上面的完整字符串)

PHP 示例

$params = [
    'user' => 'test001',
    'password' => '123456',
    'markcode' => 'DEVICE001',
    't' => time(),
];

$query = http_build_query($params) . '&' . $appKey;
$sign = md5($query);

JavaScript 示例

const params = {
  user: 'test001',
  password: '123456',
  markcode: 'DEVICE001',
  t: Math.floor(Date.now() / 1000)
};

const query = new URLSearchParams(params).toString() + '&' + APPKEY;
const sign = md5(query).toLowerCase();

加密模式与时间戳

以下模式来自 `api/app.php` 的真实逻辑:

`mi_type = 0`:明文模式,直接读取 `$_REQUEST`。

`mi_type = 1`:RC4 模式,提交 `data`,使用应用 `rc4_key` 解密。

`mi_type = 2`:Base64 模式,提交 `data`,Base64 解码后再解析。

`mi_type = 3`:RC4(hex2bin) 模式,先 hex2bin,再 RC4 解密。

`mi_type = 4`:RSA 模式,提交 `data`,使用应用私钥解密。

`mi_type = 10`:易验证兼容 RSA 模式,处理方式与上类似。

时间戳校验:

若应用配置 mi_time > 0:
- 必须提交 t
- 服务器会计算 time() - t
- 大于 mi_time 时拒绝请求

建议:客户端每次请求都带上 Unix 时间戳秒值 `t`,避免因为切换配置后出现兼容问题。

mi_type 模式 提交字段 服务端处理
0明文直接提交业务字段读取 `$_REQUEST`
1RC4`data``mi_rc4(data, rc4_key, 1)`
2Base64`data``base64_decode(data)`
3RC4(hex2bin)`data``rc4(hex2bin(data), rc4_key)`
4RSA`data``RSA_SMI(data, private_key, 1)`
10易验证兼容`data`兼容 RSA 解密流程

开发者后台 API

主地址https://n10.top/user/api.php
登录接口https://n10.top/user/api_v2.php
兼容地址https://n10.top/user/api_v3.php

当前项目中存在三个版本:`/user/api.php`、`/user/api_v2.php`、`/user/api_v3.php`。

推荐优先使用:`/user/api.php` 或 `api_v3.php`。

鉴权方式:

1. 浏览器已登录时自动读取 `user_auth_token` Cookie。

2. 外部调用时可传 `token` 参数。

3. 站内后台还支持 Session 登录态。

登录接口仅 `api_v2.php` 提供:

POST /user/api_v2.php?act=login

参数:
- user 用户名
- pass 密码

成功返回:
{
  "code": 0,
  "msg": "登录成功",
  "qq": "123456",
  "token": "..."
}
接口 方法 关键参数 说明
act=get_user_infoGETtoken获取当前登录开发者信息。
act=get_appsGETtoken, page, num获取当前开发者应用列表。
act=get_app_detailGETtoken, appid获取单个应用完整配置。
act=update_appPOSTtoken, id更新应用配置白名单字段。
act=get_kamisGETtoken, appid, page, num获取卡密列表。
act=get_usersGETtoken, appid, page, num获取应用用户列表。
act=get_statisticsGETtoken获取统计数据。

常用接口:

GET /user/api.php?act=get_user_info&token=TOKEN
GET /user/api.php?act=get_apps&page=1&num=30&token=TOKEN
GET /user/api.php?act=get_app_detail&appid=1&token=TOKEN
POST /user/api.php?act=update_app&token=TOKEN
GET /user/api.php?act=get_kamis&appid=1&page=1&num=30&token=TOKEN
GET /user/api.php?act=get_users&appid=1&page=1&num=30&token=TOKEN
GET /user/api.php?act=get_statistics&token=TOKEN

`update_app` 可更新的字段来自代码白名单,主要包括:

name, img, note, app_gg, version, version_info,
switch, ipauth, active, logon_check_in,
mi_state, mi_type, mi_sign, mi_sign_in, print_sign, mi_time, rc4_key,
km_change_time, km_change_num, single_km_change_num, km_change, longuse_km_change,
sqprice, sqprice2, sqprice3, sqsprice, sqsprice2, cgprice,
hourprice, dayprice, weekprice, monthprice, seasonprice, yearprice, longuseprice,
app_update_must, app_update_url, app_update_show, app_update_url_type, lanzou_pass

返回示例:获取应用列表

{
  "code": 0,
  "msg": "success",
  "data": [
    {
      "id": 1,
      "appkey": "abcdef123456",
      "name": "Demo App",
      "version": "1.0.0",
      "mi_type": "1",
      "mi_sign": "y",
      "mi_time": "300",
      "rc4_key": "demoRc4Key"
    }
  ],
  "total": 1,
  "page": 1,
  "num": 30
}

curl 示例:获取应用列表

curl "https://n10.top/user/api.php?act=get_apps&token=YOUR_TOKEN&page=1&num=30"

云端对接 API

云端 API 地址 https://n10.top/api/cloud_api.php

此类接口主要用于远程开通授权、添加代理/管理员、远程修改授权域名。

所有接口都依赖站点配置开关、API Key、以及 IP 白名单。

1. 添加程序授权:

GET /api/cloud_api.php?act=cloud_auth

参数:
- proid 程序ID
- name  站点名称
- qq    QQ号码
- url   绑定域名,不带 http://
- key   API Key
- ip    服务器IP

成功返回示例

{
  "code": 0,
  "msg": "添加Demo程序授权成功!"
}

2. 添加云端用户:

GET /api/cloud_api.php?act=cloud_user

参数:
- proid 程序ID
- power 权限级别
- user  用户名
- pwd   密码
- qq    QQ
- email 邮箱
- key   API Key
- ip    服务器IP

说明:

`power=1` 为授权商,`power=2` 为超级管理员,`power=3` 为全能管理员。

接口会校验 API Key 状态、余额、权限等级、QQ、邮箱、用户名唯一性。

3. 远程修改授权域名:

GET /api/cloud_api.php?act=cloud_authedit

参数:
- token 授权记录对应的 TOKEN
- url   新域名

请求示例

https://n10.top/api/cloud_api.php?act=cloud_auth&proid=1&name=DemoSite&qq=123456&url=demo.com&key=YOUR_KEY&ip=1.1.1.1

常见错误与排查

错误码 含义 常见原因
-1通用失败缺参数、未登录、权限不足、余额不足、记录不存在。
101应用不存在APPID 不正确或应用已被删除。
102应用关闭应用被后台停用。
104签名为空开启签名校验后未传 sign。
105时间戳超时`t` 与服务器时间差超出 `mi_time`。
106签名错误APPKEY 错误、参数顺序不一致、sign 位置错误。
107data 为空加密模式下没有提交 `data`。
108缺少时间变量启用时间戳校验但未传 `t`。
170-173接口授权异常接口关闭、维护、未购买或已过期。

`code = -1`:通常为缺少参数、未登录、权限不足、余额不足等业务错误。

`104`:签名为空。

`105`:时间戳超时。

`106`:签名错误。

`107`:加密数据 `data` 为空。

`108`:缺少时间变量 `t`。

`101`:应用不存在。

`102`:应用关闭。

`170/171/172/173`:接口关闭、维护、未购买、已过期等授权问题。

示例请求

// 1. 查询开发者后台应用列表
GET /user/api.php?act=get_apps&token=你的TOKEN&page=1&num=20

// 2. 动态验证网关调用示意
POST /api.php?api=你的接口别名&app=10001
Content-Type: application/x-www-form-urlencoded

user=test001&password=123456&t=1710000000&sign=md5结果

// 3. 云端新增授权
GET /api/cloud_api.php?act=cloud_auth&proid=1&name=DemoSite&qq=123456&url=demo.com&key=你的APIKEY&ip=1.1.1.1

完整 PHP 请求示例

$url = 'https://n10.top/user/api.php?act=get_apps&token=YOUR_TOKEN&page=1&num=20';
$result = file_get_contents($url);
$data = json_decode($result, true);
print_r($data);

完整 JavaScript 请求示例

fetch('https://n10.top/user/api.php?act=get_statistics&token=YOUR_TOKEN')
  .then(res => res.json())
  .then(data => console.log(data));