API 概览
星河云验证系统为开发者提供完整的RESTful API接口,支持用户验证、卡密管理、文件分发等核心功能。
基本信息
| 项目 | 说明 |
|---|---|
| API地址 | https://api.didichou.site/api.php |
| 请求方式 | POST / GET |
| 返回格式 | JSON |
| 编码格式 | UTF-8 |
认证方式
星河云验证系统支持多种认证方式,确保API调用的安全性。
基础认证
使用应用ID(APP ID)进行基础身份验证:
POST https://api.didichou.site/api.php?api=userlogon&app=YOUR_APP_ID
数据签名认证
通过MD5签名验证请求数据的完整性:
// 1. 将参数按字典序排序 // 2. 拼接成 key1=value1&key2=value2 格式 // 3. 末尾追加应用密钥 // 4. 计算MD5值转小写 $params = ['user' => 'test', 'password' => '123']; ksort($params); $string = http_build_query($params) . $app_key; $sign = md5($string);
🔐 安全建议
生产环境强烈建议启用数据签名和RC4加密,确保API调用安全。
请求格式
所有API请求都遵循统一的格式规范。
通用参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
api |
string | 必填 | 接口名称,如 userlogon、kmlogon |
app |
integer | 必填 | 应用ID,在管理后台获取 |
sign |
string | 可选 | 数据签名,开启签名验证时必填 |
响应格式
{
"code": 200, // 状态码:200成功,其他为错误
"msg": "操作成功", // 响应消息
"data": { // 响应数据(可选)
"user": "testuser"
},
"time": 1672531200 // 服务器时间戳
}
POST 用户注册
创建新的用户账号,支持用户名、密码、QQ等信息注册。
请求地址
POST https://api.didichou.site/api.php?api=userreg&app={APP_ID}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
user |
string | 必填 | 用户名,5-11位字母数字 |
password |
string | 必填 | 密码,6-18位 |
qq |
string | 必填 | QQ号码 |
name |
string | 可选 | 用户昵称 |
代码示例
$data = [
'user' => 'testuser123',
'password' => 'mypassword',
'qq' => '123456789',
'name' => '测试用户'
];
$url = 'https://api.didichou.site/api.php?api=userreg&app=1001';
$result = http_post($url, $data);
$response = json_decode($result, true);
响应示例
注册成功 (200)
{
"code": 200,
"msg": "注册成功",
"time": 1672531200
}
账号已存在 (115)
{
"code": 115,
"msg": "账号已存在",
"time": 1672531200
}
POST 用户登录
使用用户名和密码进行登录验证。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
user |
string | 必填 | 用户名 |
password |
string | 必填 | 密码 |
代码示例
import requests
data = {
'user': 'testuser123',
'password': 'mypassword'
}
url = 'https://api.didichou.site/api.php?api=userlogon&app=1001'
response = requests.post(url, data=data)
result = response.json()
if result['code'] == 200:
print(f"登录成功,用户:{result['data']['user']}")
else:
print(f"登录失败:{result['msg']}")
POST 卡密登录
使用卡密进行登录验证,支持时间卡、次数卡、永久卡等多种类型。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
kami |
string | 必填 | 卡密字符串 |
markcode |
string | 必填 | 机器码/设备标识 |
⚠️ 重要提醒
卡密登录会绑定机器码,同一卡密在不同设备上使用可能会被拒绝。
卡密类型说明
| 类型 | 说明 | VIP返回值 |
|---|---|---|
| 时间卡 | 按时长计费 | 到期时间戳 |
| 次数卡 | 按使用次数计费 | 当前时间+1小时 |
| 永久卡 | 永久使用权限 | 4102243200 |
代码示例
using System;
using System.Net.Http;
using System.Collections.Generic;
using Newtonsoft.Json;
var client = new HttpClient();
var data = new Dictionary<string, string>
{
{"kami", "ABCD-1234-EFGH-5678"},
{"markcode", "PC-12345-WIN10"}
};
var content = new FormUrlEncodedContent(data);
var url = "https://api.didichou.site/api.php?api=kmlogon&app=1001";
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
dynamic json = JsonConvert.DeserializeObject(result);
if (json.code == 200)
{
Console.WriteLine($"登录成功,VIP到期:{json.data.vip}");
}
else
{
Console.WriteLine($"登录失败:{json.msg}");
}
POST 卡密解绑
解除卡密与设备的绑定关系,需要消耗一定的解绑次数或时长。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
kami |
string | 必填 | 要解绑的卡密 |
markcode |
string | 必填 | 当前绑定的机器码 |
🚨 注意事项
• 解绑会消耗时长或次数
• 解绑有次数和时间间隔限制
• 免费应用禁止解绑操作
GET 获取应用公告
获取应用的最新公告信息。
请求地址
GET https://api.didichou.site/api.php?api=notice&app={APP_ID}
代码示例
fetch('https://api.didichou.site/api.php?api=notice&app=1001')
.then(response => response.json())
.then(data => {
if (data.code === 200) {
document.getElementById('notice').innerHTML = data.data.app_gg;
} else {
console.error('获取公告失败:', data.msg);
}
});
GET 获取文件列表
获取应用下的文件下载链接,支持蓝奏云等外链自动解析。
请求地址
GET https://api.didichou.site/api.php?api=getfile&app={APP_ID}&id={FILE_ID}
💡 功能特色
系统支持蓝奏云链接自动解析,会自动处理提取码,返回真实下载地址。
GET 获取应用配置
获取应用的基础配置信息,包括版本号、更新信息、接口调用统计等。
请求地址
GET https://api.didichou.site/api.php?api=ini&app={APP_ID}
响应数据
| 字段名 | 类型 | 说明 |
|---|---|---|
version |
string | 应用当前版本号 |
version_info |
string | 版本更新说明 |
app_update_show |
string | 更新内容展示 |
app_update_url |
string | 软件更新下载地址 |
app_update_must |
string | 是否强制更新 (y/n) |
api_total |
integer | 接口调用总次数 |
代码示例
import requests
url = 'https://api.didichou.site/api.php?api=ini&app=1001'
response = requests.get(url)
result = response.json()
if result['code'] == 200:
config = result['data']
print(f"当前版本: {config['version']}")
print(f"更新说明: {config['version_info']}")
print(f"是否强制更新: {config['app_update_must']}")
print(f"下载地址: {config['app_update_url']}")
print(f"调用次数: {config['api_total']}")
else:
print(f"获取配置失败: {result['msg']}")
响应示例
获取成功 (200)
{
"code": 200,
"msg": "获取成功",
"data": {
"version": "2.1.0",
"version_info": "修复已知问题,优化性能",
"app_update_show": "新增功能:支持批量操作\n修复BUG:解决登录异常问题",
"app_update_url": "https://example.com/update.exe",
"app_update_must": "n",
"api_total": 15680
},
"time": 1672531200
}
GET 版本控制与更新检查
检查软件版本更新,支持强制更新和自动下载功能。通过ini接口获取版本信息后进行版本比对。
更新检查流程
// 1. 获取服务器版本信息
GET /api.php?api=ini&app={APP_ID}
// 2. 比对版本号
local_version = "2.0.0"
server_version = response.data.version
if (server_version > local_version) {
// 3. 检查是否强制更新
if (response.data.app_update_must == "y") {
// 强制更新,阻止程序运行
force_update(response.data.app_update_url);
} else {
// 可选更新,询问用户
optional_update(response.data.app_update_url);
}
}
更新类型说明
| 更新类型 | 触发条件 | 用户体验 |
|---|---|---|
| 强制更新 | app_update_must = "y" | 必须更新才能使用 |
| 可选更新 | app_update_must = "n" | 用户可选择跳过 |
| 静默更新 | 后台自动下载 | 下载完成后提示重启 |
⚠️ 更新建议
• 强制更新应谨慎使用,避免影响用户体验
• 建议在程序启动时检查更新
• 支持蓝奏云链接自动解析下载
C# 完整示例
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class UpdateChecker
{
private readonly string apiUrl = "https://api.didichou.site/api.php";
private readonly int appId = 1001;
private readonly string currentVersion = "2.0.0";
public async Task<bool> CheckUpdate()
{
try
{
using var client = new HttpClient();
var url = $"{apiUrl}?api=ini&app={appId}";
var response = await client.GetStringAsync(url);
dynamic result = JsonConvert.DeserializeObject(response);
if (result.code == 200)
{
string serverVersion = result.data.version;
string updateUrl = result.data.app_update_url;
bool mustUpdate = result.data.app_update_must == "y";
string updateInfo = result.data.app_update_show;
if (CompareVersion(serverVersion, currentVersion) > 0)
{
return HandleUpdate(updateUrl, updateInfo, mustUpdate);
}
}
return false;
}
catch (Exception ex)
{
Console.WriteLine($"检查更新失败: {ex.Message}");
return false;
}
}
private int CompareVersion(string v1, string v2)
{
var version1 = new Version(v1);
var version2 = new Version(v2);
return version1.CompareTo(version2);
}
private bool HandleUpdate(string url, string info, bool mustUpdate)
{
if (mustUpdate)
{
// 强制更新逻辑
MessageBox.Show($"检测到新版本,必须更新才能继续使用\n\n{info}");
DownloadUpdate(url);
return true;
}
else
{
// 可选更新
var result = MessageBox.Show($"检测到新版本,是否立即更新?\n\n{info}",
"版本更新", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
DownloadUpdate(url);
return true;
}
}
return false;
}
private void DownloadUpdate(string url)
{
// 下载更新文件逻辑
System.Diagnostics.Process.Start(url);
}
}
GET 获取RC4密钥
获取应用的RC4加密密钥,用于数据加密传输。仅应用所有者可获取。
请求地址
GET https://api.didichou.site/api.php?api=getrc4&appid={APP_ID}&app={APP_ID}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
appid |
integer | 必填 | 目标应用ID |
app |
integer | 必填 | 请求方应用ID(必须为应用所有者) |
🔐 安全警告
• RC4密钥极其重要,请妥善保管
• 仅应用所有者可获取密钥
• 请勿在客户端硬编码密钥
响应示例
获取成功 (200)
{
"code": 200,
"msg": "获取成功",
"data": {
"rc4key": "MySecretRC4Key123456"
},
"time": 1672531200
}
权限不足 (200)
{
"code": 200,
"msg": "无法获取他人RC4Key",
"time": 1672531200
}
POST 违规信息上报
当检测到用户存在抓包、破解等违规行为时,可通过此接口向应用所有者发送邮件警告。
请求地址
POST https://api.didichou.site/api.php?api=violationsinfo&app={APP_ID}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
msg |
string | 必填 | 违规详情描述 |
⚠️ 使用说明
• 此接口会发送邮件到应用所有者邮箱
• 请勿频繁调用,避免邮件轰炸
• 建议只在确认违规时调用
代码示例
// 检测到抓包工具时上报
if (detectPacketCapture()) {
$data = [
'msg' => '检测到用户使用Fiddler等抓包工具,IP:' . $_SERVER['REMOTE_ADDR']
];
$url = 'https://api.didichou.site/api.php?api=violationsinfo&app=1001';
http_post($url, $data);
}
GET 获取SDK示例代码
获取各种编程语言的对接示例代码包,包含完整的集成代码和配置文件。
请求地址
GET https://api.didichou.site/api.php?api=automaticsample&app={APP_ID}&type={TYPE}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
type |
string | 必填 | 示例类型:andlua1, andlua2,易语言等 |
支持的示例类型
| 类型值 | 说明 | 包含文件 |
|---|---|---|
andlua1 |
AndLua 示例(版本1) | main.lua, cg5.aly等 |
andlua2 |
AndLua 示例(版本2) | 完整项目文件 |
易语言 |
易语言对接示例 | 源码文件和模块 |
💡 功能特色
• 示例代码会自动填入您的应用配置信息
• 包含完整的错误处理和加密逻辑
• 支持一键下载ZIP压缩包
• 代码经过实际项目验证
响应说明
成功时返回ZIP文件下载,失败时返回JSON错误信息。
POST 获取用户应用列表
用户登录后获取其拥有的应用列表,用于管理多个应用的场景。
请求地址
POST https://api.didichou.site/api.php?api=logongetapp&app={APP_ID}
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
user |
string | 必填 | 用户名 |
pass |
string | 必填 | 用户密码 |
响应数据
| 字段名 | 类型 | 说明 |
|---|---|---|
name |
string | 应用名称 |
id |
integer | 应用ID |
appkey |
string | 应用密钥 |
switch |
string | 应用状态 (y/n) |
代码示例
$data = [
'user' => 'myusername',
'pass' => 'mypassword'
];
$url = 'https://api.didichou.site/api.php?api=logongetapp&app=1001';
$result = http_post($url, $data);
$response = json_decode($result, true);
if ($response['code'] == 200) {
foreach ($response['data'] as $app) {
echo "应用:{$app['name']} (ID: {$app['id']})\n";
echo "状态:" . ($app['switch'] == 'y' ? '正常' : '关闭') . "\n";
}
}
响应示例
获取成功 (200)
{
"code": 200,
"msg": "获取成功",
"data": [
{
"name": "测试应用1",
"id": 1001,
"appkey": "abc123def456",
"switch": "y"
},
{
"name": "测试应用2",
"id": 1002,
"appkey": "xyz789uvw012",
"switch": "n"
}
],
"time": 1672531200
}
POST 易验证兼容接口
提供与易验证系统兼容的卡密登录接口,方便从易验证迁移的用户。
请求地址
POST https://api.didichou.site/api.php?api=yyzkmdenglu&app={APP_ID}
⚠️ 兼容说明
• 此接口为易验证迁移用户提供
• 返回格式与易验证保持一致
• 建议新项目使用标准卡密登录接口
• 部分高级功能可能不支持
响应格式
返回易验证格式的数据,包含中文字段名:
{
"登录验证": "成功",
"卡密ID": 42,
"创建时间": "2024-01-01 12:00",
"到期时间": "2024-01-02 12:00",
"卡密类型": "天卡",
"卡密价值": "一天",
"识别码": "a1b2c3d4e5f6..."
}
常见错误代码
以下是API可能返回的常见错误代码及其含义。
| 错误码 | 含义 | 解决方案 |
|---|---|---|
100 |
应用配置未加载 | 检查APP ID是否正确 |
110 |
请输入账号 | 添加user参数 |
111 |
请输入密码 | 添加password参数 |
113 |
账号密码不正确 | 检查用户名密码 |
115 |
账号已存在 | 使用其他用户名 |
149 |
卡密不存在 | 检查卡密是否正确 |
150 |
卡密已被使用 | 卡密已绑定其他设备 |
200 |
操作成功 | - |
201 |
操作失败 | 查看具体错误信息 |
多语言SDK示例
我们为常用编程语言提供了完整的SDK示例代码。
易语言 SDK
.版本 2 .程序集 星河API类 .程序集变量 API地址, 文本型, , , "https://api.didichou.site/api.php" .程序集变量 应用ID, 整数型 .子程序 _初始化, , 公开, .参数 appid, 整数型 应用ID = appid .子程序 用户登录, 文本型, 公开, .参数 用户名, 文本型 .参数 密码, 文本型 .局部变量 参数, 文本型 .局部变量 返回值, 文本型 参数 = "user=" + 用户名 + "&password=" + 密码 返回值 = 网页_访问S (API地址 + "?api=userlogon&app=" + 到文本 (应用ID), 1, 参数, , , , ) 返回 (返回值) .子程序 卡密登录, 文本型, 公开, .参数 卡密, 文本型 .参数 机器码, 文本型 .局部变量 参数, 文本型 .局部变量 返回值, 文本型 参数 = "kami=" + 卡密 + "&markcode=" + 机器码 返回值 = 网页_访问S (API地址 + "?api=kmlogon&app=" + 到文本 (应用ID), 1, 参数, , , , ) 返回 (返回值)
Java SDK
import java.io.*;
import java.net.*;
import java.util.*;
public class XingHeAPI {
private String apiUrl = "https://api.didichou.site/api.php";
private int appId;
public XingHeAPI(int appId) {
this.appId = appId;
}
// 用户登录
public String userLogin(String user, String password) {
Map<String, String> params = new HashMap<>();
params.put("user", user);
params.put("password", password);
return post("userlogon", params);
}
// 卡密登录
public String cardLogin(String kami, String markcode) {
Map<String, String> params = new HashMap<>();
params.put("kami", kami);
params.put("markcode", markcode);
return post("kmlogon", params);
}
private String post(String api, Map<String, String> params) {
try {
String url = String.format("%s?api=%s&app=%d", apiUrl, api, appId);
// HTTP POST 实现...
return "响应结果";
} catch (Exception e) {
return "错误: " + e.getMessage();
}
}
}
💡 技术支持
如遇到问题,可通过以下方式获取支持:
• 邮箱:sdwxgzh@126.com
• 官网:https://api.didichou.site
• 客服热线:13772895146