登录管「你是谁」,授权管「你能用到哪天」——两件事分开,客户端每次启动都问一次授权,所以你这边改天数立即生效。
| 项目 | 说明 |
|---|---|
| 地址 | POST /api.php?a=登录,或 POST /api/Login.php(两种都行) |
| 格式 | 请求:JSON 或表单;响应:{"code":"200","msg":"...","data":{...}} |
| code | 200 成功 / 400 参数错 / 401 未授权 / 403 设备不匹配 / 409 冲突 / 429 限流 |
| 登录态 | 登录返回 token,后续带 token 参数或 Token 请求头 |
a=registerPOST /api.php?a=register
{"username":"test01","password":"123456","machine":"ABC-123"}
a=loginPOST /api.php?a=login
{"username":"test01","password":"123456","machine":"ABC-123"}
→ {"code":"200","msg":"登录成功",
"token":"9f2c...",
"state":"active", // active 有效 / expired 已到期
"account":{"username":"test01","days_left":29,"expire_str":"2026-12-02 10:00:00","zones":[...]}}
机器码绑定:首次登录自动绑定,之后换机器返回 403 设备不匹配,后台可一键解绑。
a=queryPOST /api.php?a=query
{"token":"9f2c...","machine":"ABC-123"}
→ {"code":"200","msg":"授权有效","active":true,"account":{...}}
a=cardPOST /api.php?a=card
{"token":"9f2c...","code":"ABCD-EFGH-IJKL-MNOP"}
→ {"code":"200","msg":"兑换成功,已续 30 天","days":30,"days_left":59,"expire_at":1795...}
a=configGET /api/GetConfig.php
→ {"code":"200","msg":"获取成功","data":{"site_name":"...","notice":"...","version":"4.2.2","register":true}}
| 接口 | 说明 |
|---|---|
a=logout | 注销 token |
a=passwd | 改密码:{token, old, password} |
using var http = new HttpClient();
var body = new StringContent(
JsonSerializer.Serialize(new { username = "test01", password = "123456", machine = MachineCode() }),
Encoding.UTF8, "application/json");
var res = await http.PostAsync("http://你的域名/api/Login.php", body);
var json = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement;
if (json.GetProperty("code").GetString() == "200")
{
var token = json.GetProperty("token").GetString();
var days = json.GetProperty("account").GetProperty("days_left").GetInt32();
var active = json.GetProperty("state").GetString() == "active";
// active == false → 提示"授权到期,请续费",不放行主功能
}
易语言接入:用「网页_访问S」POST 这段 JSON,取回 code 与 days_left 做判断即可。