幻影二级域名分发系统PHP版本完全免费,下载地址:https://blog.52hyjs.com/post-954.html
<?php
/**
* DNS API 客户端封装类
* 文件名:DnsApiClient.php
*/
class DnsApiClient
{
private $baseUrl;
private $token;
private $debug = false;
/**
* 构造函数
* @param string $baseUrl API基础地址
* @param string $token 用户令牌
*/
public function __construct($baseUrl, $token)
{
$this->baseUrl = rtrim($baseUrl, '/');
$this->token = $token;
}
/**
* 启用调试模式
* @param bool $debug 是否启用调试
*/
public function setDebug($debug = true)
{
$this->debug = $debug;
}
/**
* 发送API请求
* @param string $act 操作类型
* @param array $params 请求参数
* @param string $method 请求方法
* @return array 响应数据
*/
private function request($act, $params = [], $method = 'GET')
{
$url = $this->baseUrl . '?token=' . urlencode($this->token) . '&act=' . $act;
$options = [
'http' => [
'method' => $method,
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'timeout' => 10
]
];
if ($method === 'POST' && !empty($params)) {
$options['http']['content'] = http_build_query($params);
} elseif ($method === 'GET' && !empty($params)) {
$url .= '&' . http_build_query($params);
}
$context = stream_context_create($options);
if ($this->debug) {
echo "请求URL: $url\n";
echo "请求方法: $method\n";
if (!empty($params)) {
echo "请求参数: " . print_r($params, true) . "\n";
}
}
$startTime = microtime(true);
$response = @file_get_contents($url, false, $context);
$endTime = microtime(true);
if ($response === false) {
$error = error_get_last();
throw new Exception("API请求失败: " . ($error['message'] ?? '未知错误'));
}
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception("API响应格式错误: " . json_last_error_msg());
}
if ($this->debug) {
echo "响应时间: " . round(($endTime - $startTime) * 1000, 2) . "ms\n";
echo "响应数据: " . print_r($result, true) . "\n";
}
return $result;
}
/**
* 获取用户信息
* @return array
*/
public function getUserInfo()
{
return $this->request('info');
}
/**
* 获取域名列表
* @return array
*/
public function getDomainList()
{
return $this->request('list');
}
/**
* 获取解析记录列表
* @return array
*/
public function getRecordList()
{
return $this->request('get_record_list');
}
/**
* 添加解析记录
* @param string $domain 域名
* @param string $name 记录名
* @param string $type 记录类型
* @param string $value 记录值
* @param array $options 可选参数
* @return array
*/
public function addRecord($domain, $name, $type, $value, $options = [])
{
$params = array_merge([
'url' => $domain,
'name' => $name,
'type' => $type,
'value' => $value,
'remark' => $options['remark'] ?? 'API接口添加',
'line' => $options['line'] ?? 'default',
'ttl' => $options['ttl'] ?? 600,
'mx' => $options['mx'] ?? null
], $options);
// 移除空值
$params = array_filter($params, function($value) {
return $value !== null;
});
return $this->request('add', $params, 'POST');
}
/**
* 修改解析记录
* @param string $recordId 记录ID
* @param string $name 新记录名
* @param string $type 新记录类型
* @param string $value 新记录值
* @param array $options 可选参数
* @return array
*/
public function updateRecord($recordId, $name, $type, $value, $options = [])
{
$params = array_merge([
'record_id' => $recordId,
'name' => $name,
'type' => $type,
'value' => $value,
'line' => $options['line'] ?? 'default',
'ttl' => $options['ttl'] ?? 600,
'mx' => $options['mx'] ?? null
], $options);
// 移除空值
$params = array_filter($params, function($value) {
return $value !== null;
});
return $this->request('update_domain_dns', $params, 'POST');
}
/**
* 删除解析记录
* @param string $recordId 记录ID
* @return array
*/
public function deleteRecord($recordId)
{
return $this->request('delete_domain_dns', ['record_id' => $recordId], 'POST');
}
/**
* 批量添加解析记录
* @param array $records 记录数组
* @return array 成功和失败的记录
*/
public function batchAddRecords($records)
{
$results = [
'success' => [],
'failed' => []
];
foreach ($records as $index => $record) {
try {
$result = $this->addRecord(
$record['domain'],
$record['name'],
$record['type'],
$record['value'],
$record['options'] ?? []
);
if ($result['code'] == 0) {
$results['success'][] = [
'index' => $index,
'record' => $record,
'record_id' => $result['record_id'] ?? null
];
} else {
$results['failed'][] = [
'index' => $index,
'record' => $record,
'error' => $result['msg']
];
}
} catch (Exception $e) {
$results['failed'][] = [
'index' => $index,
'record' => $record,
'error' => $e->getMessage()
];
}
}
return $results;
}
/**
* 测试API连接
* @return array 测试结果
*/
public function testConnection()
{
try {
$startTime = microtime(true);
$result = $this->getUserInfo();
$endTime = microtime(true);
$responseTime = round(($endTime - $startTime) * 1000, 2);
if ($result['code'] == 0) {
return [
'success' => true,
'response_time' => $responseTime,
'user_info' => $result['data']
];
} else {
return [
'success' => false,
'error' => $result['msg'],
'response_time' => $responseTime
];
}
} catch (Exception $e) {
return [
'success' => false,
'error' => $e->getMessage(),
'response_time' => 0
];
}
}
/**
* 获取支持的DNS类型
* @return array
*/
public function getSupportedTypes()
{
return ['A', 'AAAA', 'CNAME', 'MX', 'TXT', 'SRV', 'NS', 'CAA'];
}
/**
* 获取默认线路列表
* @return array
*/
public function getDefaultLines()
{
return [
'default' => '默认',
'telecom' => '电信',
'unicom' => '联通',
'mobile' => '移动',
'edu' => '教育网',
'oversea' => '海外'
];
}
}
/**
* DNS API 测试示例
* 文件名:test_dns_api.php
*/
if (basename(__FILE__) === 'test_dns_api.php') {
// 配置
$API_BASE_URL = 'http://yourdomain.com/api.php';
$API_TOKEN = 'your_token_here';
// 创建客户端
$client = new DnsApiClient($API_BASE_URL, $API_TOKEN);
$client->setDebug(true);
echo "=== DNS API 测试开始 ===\n\n";
try {
// 1. 测试连接
echo "1. 测试API连接...\n";
$testResult = $client->testConnection();
if ($testResult['success']) {
echo "✓ 连接成功 (响应时间: {$testResult['response_time']}ms)\n";
echo " 用户: {$testResult['user_info']['username']}\n";
echo " 余额: {$testResult['user_info']['rmb']}\n";
} else {
echo "✗ 连接失败: {$testResult['error']}\n";
exit;
}
echo "\n";
// 2. 获取域名列表
echo "2. 获取域名列表...\n";
$domainResult = $client->getDomainList();
if ($domainResult['code'] == 0) {
$domains = $domainResult['data']['domain_list'];
echo "✓ 获取成功,共 " . count($domains) . " 个域名\n";
foreach ($domains as $i => $domain) {
$index = $i + 1;
echo " {$index}. {$domain['domain']} (价格: {$domain['api_price']})\n";
}
} else {
echo "✗ 获取失败: {$domainResult['msg']}\n";
}
echo "\n";
// 3. 获取解析记录列表
echo "3. 获取解析记录列表...\n";
$recordResult = $client->getRecordList();
if ($recordResult['code'] == 0) {
$records = $recordResult['data'];
echo "✓ 获取成功,共 " . count($records) . " 条记录\n";
if (!empty($records)) {
foreach ($records as $i => $record) {
$index = $i + 1;
echo " {$index}. {$record['name']}.{$record['url']} {$record['type']} {$record['value']}\n";
}
}
} else {
echo "✗ 获取失败: {$recordResult['msg']}\n";
}
echo "\n";
// 4. 添加解析记录示例(需要实际的域名)
if (!empty($domains)) {
$testDomain = $domains[0]['domain'];
echo "4. 测试添加解析记录...\n";
echo " 使用域名: {$testDomain}\n";
$addResult = $client->addRecord(
$testDomain,
'test' . time(), // 使用时间戳避免重复
'A',
'1.1.1.1',
[
'remark' => 'API测试记录',
'ttl' => 300
]
);
if ($addResult['code'] == 0) {
$recordId = $addResult['record_id'];
echo "✓ 添加成功,记录ID: {$recordId}\n";
echo "\n";
// 5. 测试修改解析记录
echo "5. 测试修改解析记录...\n";
$updateResult = $client->updateRecord(
$recordId,
'test' . time(),
'A',
'2.2.2.2',
['ttl' => 600]
);
if ($updateResult['code'] == 0) {
echo "✓ 修改成功\n";
} else {
echo "✗ 修改失败: {$updateResult['msg']}\n";
}
echo "\n";
// 6. 测试删除解析记录
echo "6. 测试删除解析记录...\n";
$deleteResult = $client->deleteRecord($recordId);
if ($deleteResult['code'] == 0) {
echo "✓ 删除成功\n";
} else {
echo "✗ 删除失败: {$deleteResult['msg']}\n";
}
} else {
echo "✗ 添加失败: {$addResult['msg']}\n";
}
}
// 7. 测试批量添加
echo "\n7. 测试批量添加记录...\n";
$batchRecords = [
[
'domain' => $testDomain ?? 'example.com',
'name' => 'batch1' . time(),
'type' => 'A',
'value' => '3.3.3.3',
'options' => ['ttl' => 300]
],
[
'domain' => $testDomain ?? 'example.com',
'name' => 'batch2' . time(),
'type' => 'CNAME',
'value' => 'www.example.com',
'options' => ['ttl' => 600]
]
];
$batchResult = $client->batchAddRecords($batchRecords);
echo " 成功: " . count($batchResult['success']) . " 条\n";
echo " 失败: " . count($batchResult['failed']) . " 条\n";
// 清理测试记录
foreach ($batchResult['success'] as $success) {
if (isset($success['record_id'])) {
$client->deleteRecord($success['record_id']);
}
}
} catch (Exception $e) {
echo "✗ 测试过程中发生错误: " . $e->getMessage() . "\n";
}
echo "\n=== DNS API 测试结束 ===\n";
}
/**
* 快速使用示例
* 文件名:quick_example.php
*/
// 快速使用示例
$api = new DnsApiClient('http://xiao.52hyjs.com/api.php', 'E0I0g00Zd0bDDBZX');
// 启用调试
$api->setDebug(true);
// 测试连接
$test = $api->testConnection();
if ($test['success']) {
echo "连接成功!\n";
}
// 获取域名列表
$result = $api->getDomainList();
if ($result['code'] == 0) {
foreach ($result['data']['domain_list'] as $domain) {
echo "域名: {$domain['domain']}\n";
}
}
// 添加解析记录
$addResult = $api->addRecord(
'example.com',
'www',
'A',
'1.1.1.1',
[
'remark' => '网站解析',
'line' => 'default',
'ttl' => 600
]
);
if ($addResult['code'] == 0) {
$recordId = $addResult['record_id'];
echo "记录添加成功,ID: {$recordId}\n";
}